v2 / vlib / v / tests / aliases / unaliased_typ_checking_test.v
45 lines · 43 sloc · 1.04 KB · afc1f92d0a42d1e8bbdd09007825f6947955a53a
Raw
1type MyArray = []string
2type MyString = string
3type MyFloat = f64
4type MyMap = map[string]string
5
6struct Foo {
7 a string
8 b ?string
9 c MyArray
10 d MyString
11 e MyFloat
12 f MyMap
13}
14
15fn test_main() {
16 mut out := map[string][]string{}
17 $for field in Foo.fields {
18 out[field.name] = []string{}
19 print('${field.name} is ')
20 $if field.unaliased_typ is $int {
21 println('numeric')
22 out[field.name] << 'numeric'
23 } $else $if field.unaliased_typ is $array {
24 println('array')
25 out[field.name] << 'array'
26 } $else $if field.unaliased_typ is $float {
27 println('float')
28 out[field.name] << 'float'
29 } $else $if field.unaliased_typ is $map {
30 println('map')
31 out[field.name] << 'map'
32 } $else $if field.unaliased_typ is string || field.unaliased_typ is ?string {
33 println('string opt? ${field.is_option}')
34 out[field.name] << 'string'
35 } $else {
36 assert false
37 }
38 }
39 assert out['a'][0] == 'string'
40 assert out['b'][0] == 'string'
41 assert out['c'][0] == 'array'
42 assert out['d'][0] == 'string'
43 assert out['e'][0] == 'float'
44 assert out['f'][0] == 'map'
45}
46