1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00
v/vlib/v/gen/native/tests/match.vv
2022-09-27 13:31:54 +03:00

159 lines
1.7 KiB
V

fn match_for_test() { // from for_loops_2_test.v
mut a := 2
mut b := 0
for {
match a {
2 {
println('a == 2')
a = 0
continue
}
0 {
println('a == 0')
a = 5
b++
break
}
else {
println('unexpected branch')
break
}
}
}
assert a == 5
assert b == 1
println(b)
println(a)
}
fn ifexpr_match_test() { // from if_expr_with_nested_match_expr_test.v
b := true // this is needed. why?
a := if b {
match 5 {
5 { 0 }
else { 1 }
}
} else {
3
}
assert a == 0
println(a)
}
fn integer_match_test() { // from match_test.v
mut a := 3
mut b := 0
match a {
2 {
println('two')
}
3 {
println('three')
b = 3
}
4 {
println('four')
}
else {
println('???')
}
}
assert b == 3
assert match 2 {
1 { 2 }
2 { 3 }
else { 5 }
} == 3
assert match 0 {
1 { 2 }
2 { 3 }
else { 5 }
} == 5
assert match 1 {
2 { 0 }
else { 5 }
} == 5
a = 0
match 2 {
0 {
a = 1
}
1 {
a = 2
}
else {
a = 3
}
}
assert a == 3
a = 0
/* match 1 {
0 {
a = 1
}
1 {
a = 2
a = a + 2
a = a + 2
}
else {}
}
assert a == 6
a = 0
match 1 {
0 {}
else { a = -2 }
}
assert a == -2*/
}
fn multiple_test() { // from match_test.v
a := 9
match a {
1, 2, 3 { println('1-3') }
4, 5 { println('4-5') }
6...9 { println('6-9') }
else { println('other') }
}
}
enum Foo {
a
b
c = 4 + 8
}
fn get() Foo {
return .a
}
fn foo(f Foo) {
match f {
.a {
println('a')
}
.b {
println('b')
}
.c {
println('c')
}
}
}
fn enum_test() {
foo(match get() {
.a { .b }
.b { .c }
.c { .a }
})
}
fn main() {
match_for_test()
ifexpr_match_test()
integer_match_test()
multiple_test()
enum_test()
}