v2 / vlib / v / tests / static_vars_test.v
48 lines · 43 sloc · 775 bytes · 4c6a6f361f0869216c533d1d5f2e7063014ed10e
Raw
1@[unsafe]
2fn foo() int {
3 mut static x := 42
4 x++
5 return x
6}
7
8fn xfoo() int {
9 return unsafe { foo() }
10}
11
12fn test_static_vars_work() {
13 assert xfoo() == 43
14 assert xfoo() == 44
15 assert xfoo() == 45
16}
17
18fn test_static_vars_in_unsafe_blocks() {
19 f := fn () int {
20 unsafe {
21 mut static counter := 0
22 counter++
23 return counter
24 }
25 }
26 assert f() == 1
27 assert f() == 2
28 dump(f()) // 3
29}
30
31@[unsafe]
32fn next_fib() int {
33 mut static fibs := []int{}
34 if fibs.len == 0 {
35 fibs << 1
36 fibs << 1
37 } else {
38 fibs << fibs[fibs.len - 1] + fibs[fibs.len - 2]
39 }
40 return fibs[fibs.len - 1]
41}
42
43fn test_static_vars_with_array_initializers() {
44 assert unsafe { next_fib() } == 1
45 assert unsafe { next_fib() } == 2
46 assert unsafe { next_fib() } == 3
47 assert unsafe { next_fib() } == 5
48}
49