v2 / vlib / v / tests / loops / for_in_iterator_test.v
44 lines · 39 sloc · 653 bytes · 6488041a749df9762348d019c4223908c476f2e2
Raw
1struct Doubler {
2mut:
3 val int
4 until int
5}
6
7fn (mut it Doubler) next() ?int {
8 v := it.val
9 if v > it.until {
10 return none
11 }
12 it.val *= 2
13 return v
14}
15
16fn doubler(start int, until int) Doubler {
17 return Doubler{start, until}
18}
19
20fn test_for_in_iterator() {
21 mut d := doubler(5, 30)
22 mut vals := []int{}
23 for val in d {
24 vals << val
25 }
26 assert vals == [5, 10, 20]
27}
28
29fn test_for_in_empty_iterator() {
30 mut d := doubler(5, 2)
31 mut vals := []int{}
32 for val in d {
33 vals << val
34 }
35 assert vals == []
36}
37
38fn test_for_in_iterator_with_tmp_expr() {
39 mut vals := []int{}
40 for val in doubler(2, 64) {
41 vals << val
42 }
43 assert vals == [2, 4, 8, 16, 32, 64]
44}
45