v2 / vlib / v / tests / builtin_maps / map_enum_keys_test.v
38 lines · 34 sloc · 883 bytes · 6488041a749df9762348d019c4223908c476f2e2
Raw
1// This tests that V can import and use enums from other modules,
2// and that vfmt can handle all edge cases.
3import geometry { Shape }
4
5enum Token {
6 aa = 2
7 bb
8 cc
9}
10
11fn test_map_with_enum_keys() {
12 mut m := map[Token]string{}
13 m[.aa] = 'abc'
14 m[Token.bb] = 'def'
15 assert m[Token.aa] == 'abc'
16 assert m[.bb] == 'def'
17 s := '${m}'
18 assert s == "{aa: 'abc', bb: 'def'}"
19 println(m)
20}
21
22fn test_map_with_imported_enum_keys() {
23 mut fm := map[geometry.Form3D]string{}
24 fm[.cube] = 'a cube'
25 fm[geometry.Form3D.sphere] = 'a sphere'
26 assert fm[.invalid] == ''
27 assert geometry.Form3D.cube in fm
28 assert fm[.sphere] == 'a sphere'
29}
30
31fn test_map_with_selective_imported_enum_keys() {
32 mut shapes := map[Shape]string{}
33 shapes[.circle] = 'a circle'
34 shapes[Shape.rectangle] = 'a rectangle'
35 assert shapes[.circle] == 'a circle'
36 shapes.delete(Shape.circle)
37 assert Shape.circle !in shapes
38}
39