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 else { multireturner(200, 'bad') } 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 else { 7,8,9 } 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 { 47 1, 'awesome', [13] 48 } else { 49 0, 'bad', [0] 50 } 51 assert d == 1 52 assert e == 'awesome' 53 assert f == [13] 54 55 // test with first value `literal expr` and statement 56 awesome := 'awesome' 57 g, h, i := if true { 58 1 + val1, awesome, [13] 59 } else { 60 int(0), 'bad', [0] 61 } 62 assert g == 2 63 assert h == 'awesome' 64 assert i == [13] 65 66 // test with first value `.name` 67 j, k, l := if true { 68 val1, 'awesome', [13] 69 } else { 70 val2, 'bad', [0] 71 } 72 assert j == 1 73 assert k == 'awesome' 74 assert l == [13] 75 76 // test with first value name and peek != .comma 77 m, n, o := if true { 78 val1 + 1, val1, val1 79 } else { 80 val2, val2, val2 81 } 82 assert m == val1 + 1 83 assert n == val1 84 assert o == val1 85 86 // test practical complex expressions 87 val3 := Object { name: 'initial', value: 19 } 88 mut q, mut r, mut s := if true { 89 1 + 1, 'awe' + 'some', { val3 | name: 'ok' } 90 } else { 91 0, '0', Object {} 92 } 93 assert q == 2 94 assert r == 'awesome' 95 assert s.name == 'ok' 96 assert s.value == 19 97 98 // test assign to existing variables 99 q, r, s = if false { 100 0, '0', Object {} 101 } else { 102 5, '55', { val3 | value: 555 } 103 } 104 assert q == 5 105 assert r == '55' 106 assert s.value == 555 107 assert s.name == 'initial' 108} 109