v2 / vlib / v / tests / assign / complex_assign_test.v
117 lines · 103 sloc · 2.19 KB · 8e35f4d9848f7ad35d857a187dddbfd2eca5e19d
Raw
1struct Object {
2 name string
3 value int
4}
5
6fn multireturner(n int, s string) (int, string) {
7 return n + 1, s
8}
9
10fn test_assign_multi_expr_func() {
11 e, f := if false {
12 multireturner(-1, 'notawesome')
13 } else if false {
14 multireturner(-1, 'notawesome')
15 } else {
16 multireturner(17, 'awesomer')
17 }
18 assert e == 18
19 assert f == 'awesomer'
20
21 g, h := match true {
22 true { multireturner(0, 'good') }
23 false { multireturner(100, 'bad') }
24 }
25
26 assert g == 1
27 assert h == 'good'
28}
29
30fn test_assign_multi_expr() {
31 // helpers
32 val1 := 1
33 val2 := 2
34
35 // simple case for match
36 a, b, c := match false {
37 true { 1, 2, 3 }
38 false { 4, 5, 6 }
39 }
40
41 assert a == 4
42 assert b == 5
43 assert c == 6
44
45 // test with first value `literal`
46 d, e, f := if true { 1, 'awesome', [13] } else { 0, 'bad', [0] }
47 assert d == 1
48 assert e == 'awesome'
49 assert f == [13]
50
51 // test with first value `literal expr` and statement
52 awesome := 'awesome'
53 g, h, i := if true { 1 + val1, awesome, [13] } else { int(0), 'bad', [0] }
54 assert g == 2
55 assert h == 'awesome'
56 assert i == [13]
57
58 // test with first value `.name`
59 j, k, l := if true { val1, 'awesome', [13] } else { val2, 'bad', [0] }
60 assert j == 1
61 assert k == 'awesome'
62 assert l == [13]
63
64 // test with first value name and peek != .comma
65 m, n, o := if true { val1 + 1, val1, val1 } else { val2, val2, val2 }
66 assert m == val1 + 1
67 assert n == val1
68 assert o == val1
69
70 // test practical complex expressions
71 val3 := Object{
72 name: 'initial'
73 value: 19
74 }
75 mut q, mut r, mut s := if true {
76 1 + 1, 'awe' + 'some', Object{
77 ...val3
78 name: 'ok'
79 }
80 } else {
81 0, '0', Object{}
82 }
83 assert q == 2
84 assert r == 'awesome'
85 assert s.name == 'ok'
86 assert s.value == 19
87
88 // test assign to existing variables
89 q, r, s = if false {
90 0, '0', Object{}
91 } else {
92 5, '55', Object{
93 ...val3
94 value: 555
95 }
96 }
97 assert q == 5
98 assert r == '55'
99 assert s.value == 555
100 assert s.name == 'initial'
101}
102
103fn test_issue_9330() {
104 arr := '0.1'.split('.')
105 a0, a1 := arr[0], arr[1].int()
106 assert a0 == '0'
107 assert a1 == 1
108 b0, b1 := arr[0].int(), arr[1]
109 assert b0 == 0
110 assert b1 == '1'
111 c0, c1 := arr[0], arr[1]
112 assert c0 == '0'
113 assert c1 == '1'
114 d0, d1 := arr[0].int(), arr[1].f64()
115 assert d0 == 0
116 assert d1 == 1.0
117}
118