v2 / vlib / v / slow_tests / valgrind / free_heap_foos.c.v
48 lines · 42 sloc · 904 bytes · 3db7b4489486380e02c46c84525f34c3e25be787
Raw
1@[has_globals]
2module main
3
4__global frees = []int{cap: 100}
5
6struct Foo {
7 x int
8}
9
10fn create(x int) &Foo {
11 res := &Foo{x}
12 println('> creating Foo ${res.x} at address: ${voidptr(res)}')
13 return res
14}
15
16fn (f &Foo) free() {
17 println('> freeing Foo ${f.x} at address: ${voidptr(f)} | frees.len: ${frees.len}')
18 frees << f.x
19}
20
21fn create_some_foos() {
22 starting := frees.len
23 a := create(111)
24 assert frees.len == starting
25 b := create(222)
26 assert frees.len == starting
27 println(' > create_some_foos a: ${a.x}')
28 println(' > create_some_foos b: ${b.x}')
29 assert frees.len == starting
30}
31
32fn main() {
33 create_some_foos()
34 $if autofree {
35 assert frees.len == 2
36 assert frees[0] == 222
37 assert frees[1] == 111
38 }
39 create_some_foos()
40 $if autofree {
41 assert frees.len == 4
42 assert frees[0] == 222
43 assert frees[1] == 111
44 assert frees[2] == 222
45 assert frees[3] == 111
46 }
47 unsafe { frees.free() }
48}
49