v2 / vlib / v / slow_tests / inout / printing_nested_generic_struct.vv
55 lines · 49 sloc · 1.23 KB · 6a32c810703f4ec0c39fe18298ebe6c40acac8f1
Raw
1struct Tuple2[A, B] {
2 a A
3 b B
4}
5
6// map to array of Tuple2[int, Tuple2[key, value]] tuples
7fn map_to_array_int_kv[K, V](m map[K]V) []Tuple2[int, Tuple2[K, V]] {
8 mut r := []Tuple2[int, Tuple2[K, V]]{cap: m.len}
9 mut i := 0
10 for k, v in m {
11 r << Tuple2[int, Tuple2[K, V]]{i, Tuple2[K, V]{k, v}}
12 i += 1
13 }
14 return r
15}
16
17// map to array of Tuple2[int, Tuple2[Tuple2[key, value], Tuple2[value, key]]] tuples
18fn map_to_array_int_kv_vk[K, V](m map[K]V) []Tuple2[int, Tuple2[Tuple2[K, V], Tuple2[V, K]]] {
19 mut r := []Tuple2[int, Tuple2[Tuple2[K, V], Tuple2[V, K]]]{cap: m.len}
20 mut i := 0
21 for k, v in m {
22 r << Tuple2[int, Tuple2[Tuple2[K, V], Tuple2[V, K]]]{i, Tuple2[Tuple2[K, V], Tuple2[V, K]]{Tuple2[K, V]{k, v}, Tuple2[V, K]{v, k}}}
23 i += 1
24 }
25 return r
26}
27
28fn main() {
29 x := {
30 'one': 1
31 'two': 2
32 }
33 y := {
34 3: 'three'
35 4: 'four'
36 }
37
38 println(x)
39 rx1 := map_to_array_int_kv(x)
40 println(rx1)
41 rx2 := map_to_array_int_kv_vk(x)
42 println(rx2)
43
44 println(y)
45 ry1 := map_to_array_int_kv(y)
46 println(ry1)
47 ry2 := map_to_array_int_kv_vk(y)
48 println(ry2)
49
50 // test typeof(X).name
51 zx1 := []Tuple2[int, Tuple2[string, int]]{}
52 println(typeof(zx1).name)
53 zx2 := []Tuple2[int, Tuple2[Tuple2[string, int], Tuple2[int, string]]]{}
54 println(typeof(zx2).name)
55}
56