v2 / vlib / v / tests / generics / generics_struct_to_string_test.v
80 lines · 67 sloc · 1.33 KB · 3d652b3ff013ae15c7c67596be68dca806e657b5
Raw
1struct Info[T] {
2 data T
3}
4
5fn get_info[T](res Info[T]) string {
6 return '${res}'
7}
8
9fn test_generic_struct_to_string() {
10 mut ret := get_info(Info[bool]{true})
11 println(ret)
12 assert ret.contains('data: true')
13
14 ret = get_info(Info[int]{123})
15 println(ret)
16 assert ret.contains('data: 123')
17
18 ret = get_info(Info[f32]{f32(2.2)})
19 println(ret)
20 assert ret.contains('data: 2.2')
21
22 ret = get_info(Info[f64]{2.2})
23 println(ret)
24 assert ret.contains('data: 2.2')
25
26 ret = get_info(Info[string]{'aaa'})
27 println(ret)
28 assert ret.contains("data: 'aaa'")
29
30 ret = get_info(Info[u64]{u64(234)})
31 println(ret)
32 assert ret.contains('data: 234')
33}
34
35@[heap]
36struct RefNode[T] {
37pub mut:
38 value T
39}
40
41struct RefList[T] {
42pub mut:
43 node ?&RefNode[T]
44}
45
46fn (mut l RefList[T]) add(value T) {
47 l.node = &RefNode[T]{
48 value: value
49 }
50}
51
52fn (l RefList[T]) array() []T {
53 mut a := []T{}
54 mut n := l.node or { return a }
55 a << n.value
56 return a
57}
58
59@[heap]
60struct ReferencedValue {
61 n int
62}
63
64fn test_generic_struct_to_string_with_reference_values() {
65 mut list := RefList[&ReferencedValue]{}
66 list.add(&ReferencedValue{
67 n: 5
68 })
69 assert list.array()[0].n == 5
70 assert '${list}' == 'RefList[&ReferencedValue]{
71 node: &Option(RefNode[&ReferencedValue]{
72 value: &ReferencedValue{
73 n: 5
74 }
75 })
76}'
77 assert '${list.array()}' == '[&ReferencedValue{
78 n: 5
79}]'
80}
81