v2 / vlib / v / tests / generics / generics_with_embed_generics_test.v
54 lines · 47 sloc · 826 bytes · 6488041a749df9762348d019c4223908c476f2e2
Raw
1struct Group[T] {
2 len int
3 val []T
4mut:
5 index int
6}
7
8fn group_new[T](val ...T) Group[T] {
9 mut arr := []T{cap: val.len}
10 for i in val {
11 arr << i
12 }
13 mut g := Group[T]{
14 len: val.len
15 val: arr
16 }
17
18 return g
19}
20
21fn (mut it Group[T]) next() ?T {
22 if it.index >= it.len {
23 return none
24 }
25 v := it.val[it.index]
26 it.index++
27 return v
28}
29
30fn test_generics_with_embed_generics() {
31 gx1 := group_new[int](1, 2, 3)
32 for x in gx1.val {
33 println(x)
34 }
35 assert gx1.val == [1, 2, 3]
36
37 gx2 := group_new[f64](1.1, 2.2, 3.3)
38 for x in gx2.val {
39 println(x)
40 }
41 assert gx2.val == [1.1, 2.2, 3.3]
42
43 gx3 := group_new[bool](true, true, false)
44 for x in gx3.val {
45 println(x)
46 }
47 assert gx3.val == [true, true, false]
48
49 gx4 := group_new[string]('aa', 'bb', 'cc')
50 for x in gx4.val {
51 println(x)
52 }
53 assert gx4.val == ['aa', 'bb', 'cc']
54}
55