v2 / vlib / v / tests / generics / generics_with_generics_struct_init_test.v
48 lines · 42 sloc · 809 bytes · 2b52153c1477bb782645f6c50ce6773db6bb5092
Raw
1struct List[T] {
2mut:
3 count u32
4 first &ListNode[T]
5 last &ListNode[T]
6}
7
8struct ListNode[T] {
9mut:
10 val T
11 next &ListNode[T] = unsafe { nil }
12}
13
14fn create[T](arr []T) &List[T] {
15 assert arr.len > 0
16 mut n := &ListNode[T]{
17 val: arr[0]
18 next: unsafe { nil }
19 }
20 mut l := &List[T]{
21 first: n
22 last: n
23 count: 1
24 }
25 return l
26}
27
28fn test_generics_with_generic_structs_init() {
29 list1 := create([1, 2, 3])
30 println(list1)
31 assert list1.count == 1
32 assert list1.first.val == 1
33
34 list2 := create(['a', 'b', 'c'])
35 println(list2)
36 assert list2.count == 1
37 assert list2.first.val == 'a'
38
39 list3 := create([1.1, 2.2, 3.3])
40 println(list3)
41 assert list3.count == 1
42 assert list3.first.val == 1.1
43
44 list4 := create([true, false, true])
45 println(list4)
46 assert list4.count == 1
47 assert list4.first.val == true
48}
49