v2 / vlib / v / tests / enums / enum_from_generic_static_method_test.v
82 lines · 74 sloc · 1.33 KB · da3112e5453b553ca230d47590e0d3ed6be6478d
Raw
1enum MyEnum {
2 abc
3 def
4 lock
5 xyz
6 if
7}
8
9@[flag]
10enum MyFlaggedEnum {
11 abc
12 def
13 xyz
14}
15
16/*
17fn dump_enum_values[R,T](list []T) {
18 for input in list {
19 // TODO: R.from() should work, when R is an enum, but it does not right now
20 x := R.from(input) or {
21 eprintln('>>>> error input: `${input}` | err: `${err}`')
22 continue
23 }
24 eprintln('> input: ${input} | x: ${x}')
25 }
26 assert true
27}
28fn test_enums_conversion_using_from() {
29 dump_enum_values[MyEnum,string](['abc', 'bbb', 'xyz', 'if', 'def', 'zzz'])
30 dump_enum_values[MyFlaggedEnum,int]([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
31}
32*/
33
34fn test_enum_from_string() {
35 x := MyEnum.from('def')!
36 dump(x)
37 assert x == .def
38 y := MyFlaggedEnum.from('xyz')!
39 dump(y)
40 assert y == .xyz
41 assert MyEnum.from('if')! == MyEnum.if
42 assert MyEnum.from('lock')! == MyEnum.lock
43 if z := MyEnum.from('unknown') {
44 assert false
45 } else {
46 assert err.msg() == 'invalid value'
47 }
48}
49
50fn test_enum_from_integer() {
51 x := MyEnum.from(3)!
52 dump(x)
53 assert x == .xyz
54 y := MyFlaggedEnum.from(4)!
55 dump(y)
56 assert y == .xyz
57 if z := MyFlaggedEnum.from(9999) {
58 assert false
59 } else {
60 assert err.msg() == 'invalid value'
61 }
62}
63
64@[flag]
65enum Test {
66 first
67 second
68 third
69}
70
71fn test_flagged_enum_from_0_and_empty_string() {
72 z := Test.zero()
73 dump(z)
74
75 x := Test.from(0)!
76 dump(x)
77 assert x == z
78
79 y := Test.from('')!
80 dump(y)
81 assert y == z
82}
83