v/vlib/v/tests/sumtype_literal_test.v

85 lines
1.1 KiB
V

type Foo = f32 | f64 | i16 | int | u64
fn test_assign_cast() {
a := Foo(3)
b := Foo(3.0)
c := Foo(-7.25)
d := Foo(i16(-4))
e := Foo(f32(-0.0625))
assert a is int
assert b is f64
assert b !is int
assert c is f64
assert d is i16
assert e is f32
}
fn test_assign_mut() {
mut a := Foo(0)
mut b := Foo(i16(3))
mut c := Foo(f32(1))
a = 12.3
b = -123456
c = 33.0
assert a is f64
assert b is int
assert c is f64
}
fn test_call_arg() {
assert get_type_idx(0.25) == 1
assert get_type_idx(-7) == 3
assert get_type_idx(u64(0)) == 4
assert get_type_idx(f32(-0.125e-7)) == 0
}
fn get_type_idx(x Foo) int {
match x {
f32 {
return 0
}
f64 {
return 1
}
i16 {
return 2
}
int {
return 3
}
u64 {
return 4
}
}
}
fn test_sumtype_return() {
a := gen_foo(0)
b := gen_foo(1)
c := gen_foo(2)
d := gen_foo(3)
e := gen_foo(4)
assert a is f32
assert b is f64
assert c is f64
assert c !is int
assert d is i16
assert e is int
}
fn gen_foo(n int) Foo {
if n == 0 {
return f32(0.5)
}
if n == 1 {
return -17.3e23
}
if n == 2 {
return 32.0
}
if n == 3 {
return i16(13)
}
return 1
}