v2 / vlib / v / tests / generics / generic_array_ret_test.v
32 lines · 28 sloc · 542 bytes · 1f10a65515b2f821f8ee05efeadf3c76c209e2f7
Raw
1module main
2
3fn decode_primitive[T]() !T {
4 $if T is int {
5 return T(1)
6 } $else $if T is u8 {
7 return T(10)
8 } $else $if T is u16 {
9 return T(100)
10 }
11 return error('decode_primitive: not found')
12}
13
14fn decode_array[T](_ []T) ![]T {
15 mut arr := []T{}
16 arr << decode_primitive[T]()!
17 return arr
18}
19
20fn decode[T]() !T {
21 $if T is $array {
22 a := decode_array(T{})!
23 return a
24 }
25 return error('decode: not found')
26}
27
28fn test_main() {
29 assert decode[[]int]()! == [1]
30 assert decode[[]u8]()! == [u8(10)]
31 assert decode[[]u16]()! == [u16(100)]
32}
33