v2 / vlib / v / tests / generics / generic_selector_field_test.v
29 lines · 24 sloc · 427 bytes · 804c4362c1048e7ab49c26b2fbfa1a214d2e1a84
Raw
1module main
2
3struct Demo[T] {
4mut:
5 val T
6}
7
8type DemoType = int | []DemoType
9
10fn test_main() {
11 assert decode[Demo[[]DemoType]]() == Demo[[]DemoType]{}
12 assert decode[Demo[DemoType]]() == Demo[DemoType]{}
13}
14
15fn decode[T]() T {
16 mut typ := T{}
17 typ.val = decode_x(typ.val)
18 return typ
19}
20
21fn decode_x[T](_ T) T {
22 mut field := T{}
23 $if T is int {
24 field = 0
25 } $else $if T is $array {
26 field = []DemoType{}
27 }
28 return field
29}
30