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