v2 / vlib / v / tests / fns / method_call_var_comp_test.v
39 lines · 34 sloc · 674 bytes · 6488041a749df9762348d019c4223908c476f2e2
Raw
1struct EmptyStruct {
2 a int
3 b []int
4}
5
6struct Encoder {
7}
8
9fn (e &Encoder) encode_array[T](val []T) []T {
10 return val
11}
12
13fn encode_struct[T](val T) []string {
14 e := Encoder{}
15 mut out := []string{}
16 $if T is $struct {
17 $for field in T.fields {
18 out << field.name
19 out << field.is_array.str()
20
21 $if field.is_array {
22 value := val.$(field.name)
23 out << e.encode_array(value).str()
24 out << e.encode_array([1, 2]).str()
25 }
26 }
27 }
28 return out
29}
30
31fn test_main() {
32 out := encode_struct(EmptyStruct{3, [2, 1]})
33 assert out[0] == 'a'
34 assert out[1] == 'false'
35 assert out[2] == 'b'
36 assert out[3] == 'true'
37 assert out[4] == '[2, 1]'
38 assert out[5] == '[1, 2]'
39}
40