v2 / vlib / v / tests / comptime / comptime_kinds_test.v
198 lines · 167 sloc · 2.95 KB · bb2d6056535468b81e5749337ece8fcc1fe557fb
Raw
1fn assert_map[T]() {
2 $if T is $map {
3 assert true
4 } $else {
5 assert false
6 }
7}
8
9fn assert_array[T]() {
10 $if T is $array {
11 assert true
12 } $else {
13 assert false
14 }
15}
16
17fn assert_array_dynamic[T]() {
18 $if T is $array_dynamic {
19 assert true
20 } $else {
21 assert false
22 }
23}
24
25fn assert_array_fixed[T]() {
26 $if T is $array_fixed {
27 assert true
28 } $else {
29 assert false
30 }
31}
32
33fn assert_struct[T]() {
34 $if T is $struct {
35 assert true
36 } $else {
37 assert false
38 }
39}
40
41fn assert_not_struct[T]() {
42 $if T is $struct {
43 assert false
44 } $else {
45 assert true
46 }
47}
48
49fn assert_not_map[T]() {
50 $if T is $map {
51 assert false
52 } $else {
53 assert true
54 }
55}
56
57fn assert_not_array[T]() {
58 $if T is $array {
59 assert false
60 } $else {
61 assert true
62 }
63}
64
65fn assert_not_array_dynamic[T]() {
66 $if T is $array_dynamic {
67 assert false
68 } $else {
69 assert true
70 }
71}
72
73fn assert_not_array_fixed[T]() {
74 $if T is $array_fixed {
75 assert false
76 } $else {
77 assert true
78 }
79}
80
81struct Abc {}
82
83struct Bc {}
84
85struct Cd {}
86
87fn test_kind_map() {
88 assert_map[map[int]int]()
89 assert_map[map[string]int]()
90 assert_map[map[i64]i8]()
91
92 assert_not_map[Abc]()
93 assert_not_map[int]()
94 assert_not_map[[]int]()
95}
96
97fn test_kind_array() {
98 assert_array[[]int]()
99 assert_array[[]f32]()
100 assert_array[[]string]()
101
102 assert_not_array[Abc]()
103 assert_not_array[string]()
104 assert_not_array[int]()
105 assert_not_array[map[int]int]()
106}
107
108fn test_kind_array_dynamic() {
109 assert_array_dynamic[[]int]()
110 assert_array_dynamic[[]f32]()
111 assert_array_dynamic[[]string]()
112
113 assert_not_array_dynamic[Abc]()
114 assert_not_array_dynamic[string]()
115 assert_not_array_dynamic[int]()
116 assert_not_array_dynamic[map[int]int]()
117 assert_not_array_dynamic[[3]int]()
118}
119
120fn test_kind_array_fixed() {
121 assert_array_fixed[[3]int]()
122 assert_array_fixed[[5]f32]()
123 assert_array_fixed[[6]string]()
124
125 assert_not_array_fixed[Abc]()
126 assert_not_array_fixed[string]()
127 assert_not_array_fixed[int]()
128 assert_not_array_fixed[map[int]int]()
129 assert_not_array_fixed[[]int]()
130}
131
132fn test_kind_struct() {
133 assert_struct[Abc]()
134 assert_struct[Bc]()
135 assert_struct[Cd]()
136
137 assert_not_struct[int]()
138 assert_not_struct[[]int]()
139 assert_not_struct[map[int]int]()
140}
141
142//
143
144type AliasOfAbc = Abc
145type AliasOfint = int
146type AliasOfstring = string
147
148fn assert_alias[T]() {
149 $if T is $alias {
150 assert true
151 } $else {
152 assert false
153 }
154}
155
156fn assert_not_alias[T]() {
157 $if T is $alias {
158 assert false
159 } $else {
160 assert true
161 }
162}
163
164fn test_kind_alias() {
165 assert_alias[AliasOfAbc]()
166 assert_alias[AliasOfint]()
167 assert_alias[AliasOfstring]()
168
169 assert_not_alias[int]()
170 assert_not_alias[f32]()
171 assert_not_alias[[]int]()
172 assert_not_alias[map[int]int]()
173 assert_not_alias[Abc]()
174}
175
176//
177fn assert_function[T](f T) {
178 $if T is $function {
179 assert true
180 } $else {
181 assert false
182 }
183}
184
185fn assert_not_function[T](f T) {
186 $if T is $function {
187 assert false
188 } $else {
189 assert true
190 }
191}
192
193fn test_kind_function() {
194 assert_function(test_kind_function)
195 assert_not_function(123)
196 assert_function('abc'.contains)
197 assert_function(5.str)
198}
199