v2 / vlib / v / gen / wasm / tests / control_flow.vv
178 lines · 148 sloc · 2.1 KB · 86619338dd2955e1d58a8a365409221e386a00fe
Raw
1fn func(a int, cond bool) i64 {
2 mut src := 0
3
4 if cond {
5 src = a
6 } else if cond {
7 src = 22
8 } else if cond {
9 src = 25
10 }
11
12 if cond {
13 src = a
14 } else if cond {
15 src = 22
16 } else if cond {
17 src = 25
18 } else {
19 src = src + src
20 }
21
22 return src
23}
24
25fn test(cond bool) int {
26 return if cond {
27 2
28 } else if !cond {
29 5
30 } else {
31 6
32 }
33}
34
35fn boolfor() int {
36 mut val := 0
37 for val == 0 {
38 val++
39 }
40 return val
41}
42
43fn inffor() int {
44 mut val := 0
45 for {
46 if val != 0 {
47 break
48 }
49 val++
50 }
51 return val
52}
53
54fn addcfor() int {
55 mut val := 0
56 for i := 0; i < 10; i++ {
57 val += i
58 }
59 return val
60}
61
62fn labelcfor() (int, int) {
63 mut idx := 0
64 mut val := 0
65
66 hello: for {
67 for {
68 val++
69 if val == 10 {
70 continue hello
71 }
72 idx++
73
74 if val == 100 {
75 break hello
76 }
77 }
78 break
79 }
80
81 return val, idx
82}
83
84fn infcfor() int {
85 mut val := 0
86
87 for i := 0; true; i++ {
88 if val >= 10 {
89 return val
90 }
91 val += i
92 }
93
94 return 0
95}
96
97fn continuecfor() int {
98 mut val := 0
99
100 for i := 0; i < 10; i += 2 {
101 if i == 6 {
102 continue
103 }
104 val += i
105 }
106 return val
107}
108
109fn continuecfor_multiple() int {
110 mut val := 0
111
112 for i := 0; i < 10; i += 2 {
113 if i == 6 {
114 continue
115 }
116 // Two continues
117 if i == 2 {
118 continue
119 }
120 val += i
121 }
122 return val
123}
124
125fn continuec_twofor_multiple() int {
126 mut val := 0
127
128 for i := 0; i < 10; i += 2 {
129 if i == 6 {
130 continue
131 }
132 for j := -12; j < 10; j += 1 {
133 if j == 6 {
134 continue
135 }
136 val += i
137 }
138 }
139 return val
140}
141
142fn main() {
143 println('--- func()')
144 println(func(10, true))
145 println(func(0, false))
146 println(func(0, true))
147
148 println('--- test()')
149 println(test(true))
150 println(test(false))
151 println(test(true && false))
152
153 println('--- boolfor()')
154 println(boolfor())
155
156 println('--- inffor()')
157 println(inffor())
158
159 println('--- addcfor()')
160 println(addcfor())
161
162 println('--- labelcfor()')
163 a, b := labelcfor()
164 println(a)
165 println(b)
166
167 println('--- infcfor()')
168 println(infcfor())
169
170 println('--- continuecfor()')
171 println(continuecfor())
172
173 println('--- continuecfor_multiple()')
174 println(continuecfor_multiple())
175
176 println('--- continuec_twofor_multiple()')
177 println(continuec_twofor_multiple())
178}
179