116 lines
2.2 KiB
V
116 lines
2.2 KiB
V
struct Object {
|
|
name string
|
|
value int
|
|
}
|
|
|
|
fn multireturner(n int, s string) (int, string) {
|
|
return n + 1, s
|
|
}
|
|
|
|
fn test_assign_multi_expr_func() {
|
|
e, f := if false {
|
|
multireturner(-1, 'notawesome')
|
|
} else if false {
|
|
multireturner(-1, 'notawesome')
|
|
} else {
|
|
multireturner(17, 'awesomer')
|
|
}
|
|
assert e == 18
|
|
assert f == 'awesomer'
|
|
|
|
g, h := match true {
|
|
true { multireturner(0, 'good') }
|
|
false { multireturner(100, 'bad') }
|
|
}
|
|
assert g == 1
|
|
assert h == 'good'
|
|
}
|
|
|
|
fn test_assign_multi_expr() {
|
|
// helpers
|
|
val1 := 1
|
|
val2 := 2
|
|
|
|
// simple case for match
|
|
a, b, c := match false {
|
|
true { 1, 2, 3 }
|
|
false { 4, 5, 6 }
|
|
}
|
|
assert a == 4
|
|
assert b == 5
|
|
assert c == 6
|
|
|
|
// test with first value `literal`
|
|
d, e, f := if true { 1, 'awesome', [13] } else { 0, 'bad', [0] }
|
|
assert d == 1
|
|
assert e == 'awesome'
|
|
assert f == [13]
|
|
|
|
// test with first value `literal expr` and statement
|
|
awesome := 'awesome'
|
|
g, h, i := if true { 1 + val1, awesome, [13] } else { int(0), 'bad', [0] }
|
|
assert g == 2
|
|
assert h == 'awesome'
|
|
assert i == [13]
|
|
|
|
// test with first value `.name`
|
|
j, k, l := if true { val1, 'awesome', [13] } else { val2, 'bad', [0] }
|
|
assert j == 1
|
|
assert k == 'awesome'
|
|
assert l == [13]
|
|
|
|
// test with first value name and peek != .comma
|
|
m, n, o := if true { val1 + 1, val1, val1 } else { val2, val2, val2 }
|
|
assert m == val1 + 1
|
|
assert n == val1
|
|
assert o == val1
|
|
|
|
// test practical complex expressions
|
|
val3 := Object{
|
|
name: 'initial'
|
|
value: 19
|
|
}
|
|
mut q, mut r, mut s := if true {
|
|
1 + 1, 'awe' + 'some', Object{
|
|
...val3
|
|
name: 'ok'
|
|
}
|
|
} else {
|
|
0, '0', Object{}
|
|
}
|
|
assert q == 2
|
|
assert r == 'awesome'
|
|
assert s.name == 'ok'
|
|
assert s.value == 19
|
|
|
|
// test assign to existing variables
|
|
q, r, s = if false {
|
|
0, '0', Object{}
|
|
} else {
|
|
5, '55', Object{
|
|
...val3
|
|
value: 555
|
|
}
|
|
}
|
|
assert q == 5
|
|
assert r == '55'
|
|
assert s.value == 555
|
|
assert s.name == 'initial'
|
|
}
|
|
|
|
fn test_issue_9330() {
|
|
arr := '0.1'.split('.')
|
|
a0, a1 := arr[0], arr[1].int()
|
|
assert a0 == '0'
|
|
assert a1 == 1
|
|
b0, b1 := arr[0].int(), arr[1]
|
|
assert b0 == 0
|
|
assert b1 == '1'
|
|
c0, c1 := arr[0], arr[1]
|
|
assert c0 == '0'
|
|
assert c1 == '1'
|
|
d0, d1 := arr[0].int(), arr[1].f64()
|
|
assert d0 == 0
|
|
assert d1 == 1.0
|
|
}
|