v2 / vlib / v / tests / comptime / comptime_enum_values_test.v
79 lines · 64 sloc · 1.96 KB · 447994543ba7986846ff2d1a3811b675c65d6d66
Raw
1enum CharacterGroup {
2 chars
3 alphanumerics
4 numeric
5 special
6}
7
8type AnotherCharGroup = CharacterGroup
9
10fn (self CharacterGroup) value() string {
11 return match self {
12 .chars { 'first' }
13 .alphanumerics { 'second' }
14 .numeric { 'third' }
15 .special { 'fourth' }
16 }
17}
18
19fn CharacterGroup.values() []CharacterGroup {
20 mut res := []CharacterGroup{}
21 $for item in CharacterGroup.values {
22 res << CharacterGroup(item.value)
23 }
24 return res
25}
26
27fn do_generic[T](t T) []EnumData {
28 mut vals := []EnumData{}
29 $for value in T.values {
30 vals << value
31 }
32 return vals
33}
34
35fn test_main() {
36 values := CharacterGroup.values()
37 println('Char group values: ${values}')
38 println('For loop over the values')
39 for entry in CharacterGroup.values() {
40 println('Value: ${entry} ${entry.value()}')
41 }
42
43 assert values == [CharacterGroup.chars, CharacterGroup.alphanumerics, CharacterGroup.numeric,
44 CharacterGroup.special]
45}
46
47fn test_alias_enum() {
48 mut values := []EnumData{}
49 $for entry in AnotherCharGroup.values {
50 values << entry
51 }
52 assert values[0].value == int(CharacterGroup.chars)
53 assert values[0].name == CharacterGroup.chars.str()
54
55 assert values[1].value == int(CharacterGroup.alphanumerics)
56 assert values[1].name == CharacterGroup.alphanumerics.str()
57
58 assert values[2].value == int(CharacterGroup.numeric)
59 assert values[2].name == CharacterGroup.numeric.str()
60
61 assert values[3].value == int(CharacterGroup.special)
62 assert values[3].name == CharacterGroup.special.str()
63}
64
65fn test_generic_alias_enum() {
66 values := do_generic(AnotherCharGroup.chars)
67
68 assert values[0].value == int(CharacterGroup.chars)
69 assert values[0].name == CharacterGroup.chars.str()
70
71 assert values[1].value == int(CharacterGroup.alphanumerics)
72 assert values[1].name == CharacterGroup.alphanumerics.str()
73
74 assert values[2].value == int(CharacterGroup.numeric)
75 assert values[2].name == CharacterGroup.numeric.str()
76
77 assert values[3].value == int(CharacterGroup.special)
78 assert values[3].name == CharacterGroup.special.str()
79}
80