v2 / vlib / v / tests / mut_arg_struct_pointer_rebind_test.v
42 lines · 36 sloc · 668 bytes · 1cd3c9cb315a4199767de4b48dc082b4fe623a7b
Raw
1module main
2
3@[heap]
4struct Node {
5mut:
6 children []&Node
7}
8
9@[heap]
10struct Tree {
11mut:
12 root &Node
13}
14
15fn find_leaf(mut node Node) &Node {
16 for {
17 if node.children.len == 0 {
18 return node
19 }
20 node = node.children[0]
21 }
22 return node
23}
24
25fn test_mut_struct_arg_passed_as_pointer_keeps_original_tree_root() {
26 mut n1 := &Node{}
27 mut t := &Tree{
28 root: n1
29 }
30
31 mut n2 := &Node{}
32 t.root.children << n2
33 mut n3 := &Node{}
34 t.root.children[0].children << n3
35
36 found := find_leaf(mut t.root)
37 assert found == n3
38 assert t.root.children.len == 1
39 assert t.root.children[0] == n2
40 assert t.root.children[0].children.len == 1
41 assert t.root.children[0].children[0] == n3
42}
43