v/vlib/v/tests/match_in_fn_call_test.v

51 lines
872 B
V

[params]
struct Data {
array []int
}
fn (d Data) len() int {
return d.array.len
}
fn make_result() []Data {
return []
}
// make_result2 is here to ensure that
// the branches contain different code,
// so the tests passes even with -cstrict -cc gcc
fn make_result2() []Data {
return []
}
fn f_doesnotcompile(d Data) []Data {
return match d.len() {
1 { make_result() }
else { make_result2() }
}
}
fn f_compiles1(d Data) []Data {
return match d.array.len {
1 { make_result() }
else { make_result2() }
}
}
fn f_compiles2(d Data) []Data {
length := d.array.len
return match length {
1 { make_result() }
else { make_result2() }
}
}
fn test_match_in_fn_call() {
println(f_doesnotcompile())
assert f_doesnotcompile() == []Data{}
println(f_compiles1())
assert f_compiles1() == []Data{}
println(f_compiles2())
assert f_compiles2() == []Data{}
}