v2 / vlib / x / json2 / tests / any_test.v
347 lines · 329 sloc · 13.33 KB · f94fa74a957971b7fd0a2bcd452ff6453c283f39
Raw
1import x.json2 as json
2
3const sample_data = {
4 'u8': json.Any(u8(1))
5 'u16': json.Any(u16(2))
6 'u32': json.Any(u32(3))
7 'u64': json.Any(u64(4))
8 'i8': json.Any(i8(5))
9 'i16': json.Any(i16(6))
10 'i32': json.Any(i32(7))
11 'int': json.Any(int(8))
12 'i64': json.Any(i64(9))
13 'f32': json.Any(f32(2.3))
14 'f64': json.Any(f64(1.283))
15 'bool': json.Any(false)
16 'str': json.Any('test')
17 'null': json.Any(json.null)
18 'arr': json.Any([json.Any('lol')])
19 'obj': json.Any({
20 'foo': json.Any(10)
21 })
22}
23
24fn is_null(f json.Any) bool {
25 match f {
26 json.Null { return true }
27 else { return false }
28 }
29}
30
31fn test_f32() {
32 // valid conversions
33 assert sample_data['u8'] or { 0 }.f32() == 1.0
34 assert sample_data['u16'] or { 0 }.f32() == 2.0
35 assert sample_data['u32'] or { 0 }.f32() == 3.0
36 assert sample_data['u64'] or { 0 }.f32() == 4.0
37 assert sample_data['i8'] or { 0 }.f32() == 5.0
38 assert sample_data['i16'] or { 0 }.f32() == 6.0
39 assert sample_data['i32'] or { 0 }.f32() == 7.0
40 assert sample_data['int'] or { 0 }.f32() == 8.0
41 assert sample_data['i64'] or { 0 }.f32() == 9.0
42 assert sample_data['f32'] or { 0 }.f32() == 2.3
43 assert sample_data['f64'] or { 0 }.f32() == 1.2829999923706055
44 // invalid conversions
45 assert sample_data['bool'] or { 0 }.f32() == 0.0
46 assert sample_data['str'] or { 0 }.f32() == 0.0
47 assert sample_data['null'] or { 0 }.f32() == 0.0
48 assert sample_data['arr'] or { 0 }.f32() == 0.0
49 assert sample_data['obj'] or { 0 }.f32() == 0.0
50}
51
52fn test_f64() {
53 // valid conversions
54 assert sample_data['u8'] or { 0 }.f64() == 1.0
55 assert sample_data['u16'] or { 0 }.f64() == 2.0
56 assert sample_data['u32'] or { 0 }.f64() == 3.0
57 assert sample_data['u64'] or { 0 }.f64() == 4.0
58 assert sample_data['i8'] or { 0 }.f64() == 5.0
59 assert sample_data['i16'] or { 0 }.f64() == 6.0
60 assert sample_data['i32'] or { 0 }.f64() == 7.0
61 assert sample_data['int'] or { 0 }.f64() == 8.0
62 assert sample_data['i64'] or { 0 }.f64() == 9.0
63 assert sample_data['f32'] or { 0 }.f64() == 2.299999952316284
64 assert sample_data['f64'] or { 0 }.f64() == 1.283
65 // invalid conversions
66 assert sample_data['bool'] or { 0 }.f64() == 0.0
67 assert sample_data['str'] or { 0 }.f64() == 0.0
68 assert sample_data['null'] or { 0 }.f64() == 0.0
69 assert sample_data['arr'] or { 0 }.f64() == 0.0
70 assert sample_data['obj'] or { 0 }.f64() == 0.0
71}
72
73fn test_i8() {
74 // valid conversions
75 assert sample_data['u8'] or { 0 }.i8() == 1
76 assert sample_data['u16'] or { 0 }.i8() == 2
77 assert sample_data['u32'] or { 0 }.i8() == 3
78 assert sample_data['u64'] or { 0 }.i8() == 4
79 assert sample_data['i8'] or { 0 }.i8() == 5
80 assert sample_data['i16'] or { 0 }.i8() == 6
81 assert sample_data['i32'] or { 0 }.i8() == 7
82 assert sample_data['int'] or { 0 }.i8() == 8
83 assert sample_data['i64'] or { 0 }.i8() == 9
84 assert sample_data['f32'] or { 0 }.i8() == 2
85 assert sample_data['f64'] or { 0 }.i8() == 1
86 assert json.Any(true).i8() == 1
87 assert json.Any('123').i8() == 123
88 // invalid conversions
89 assert sample_data['null'] or { 0 }.i8() == 0
90 assert sample_data['arr'] or { 0 }.i8() == 0
91 assert sample_data['obj'] or { 0 }.i8() == 0
92}
93
94fn test_i16() {
95 // valid conversions
96 assert sample_data['u8'] or { 0 }.i16() == 1
97 assert sample_data['u16'] or { 0 }.i16() == 2
98 assert sample_data['u32'] or { 0 }.i16() == 3
99 assert sample_data['u64'] or { 0 }.i16() == 4
100 assert sample_data['i8'] or { 0 }.i16() == 5
101 assert sample_data['i16'] or { 0 }.i16() == 6
102 assert sample_data['i32'] or { 0 }.i16() == 7
103 assert sample_data['int'] or { 0 }.i16() == 8
104 assert sample_data['i64'] or { 0 }.i16() == 9
105 assert sample_data['f32'] or { 0 }.i16() == 2
106 assert sample_data['f64'] or { 0 }.i16() == 1
107 assert json.Any(true).i16() == 1
108 assert json.Any('123').i16() == 123
109 // invalid conversions
110 assert sample_data['null'] or { 0 }.i16() == 0
111 assert sample_data['arr'] or { 0 }.i16() == 0
112 assert sample_data['obj'] or { 0 }.i16() == 0
113}
114
115fn test_i32() {
116 // valid conversions
117 assert sample_data['u8'] or { 0 }.i32() == 1
118 assert sample_data['u16'] or { 0 }.i32() == 2
119 assert sample_data['u32'] or { 0 }.i32() == 3
120 assert sample_data['u64'] or { 0 }.i32() == 4
121 assert sample_data['i8'] or { 0 }.i32() == 5
122 assert sample_data['i16'] or { 0 }.i32() == 6
123 assert sample_data['i32'] or { 0 }.i32() == 7
124 assert sample_data['int'] or { 0 }.i32() == 8
125 assert sample_data['i64'] or { 0 }.i32() == 9
126 assert sample_data['f32'] or { 0 }.i32() == 2
127 assert sample_data['f64'] or { 0 }.i32() == 1
128 assert json.Any(true).i32() == 1
129 assert json.Any('123').i32() == 123
130 // invalid conversions
131 assert sample_data['null'] or { 0 }.i32() == 0
132 assert sample_data['arr'] or { 0 }.i32() == 0
133 assert sample_data['obj'] or { 0 }.i32() == 0
134}
135
136fn test_int() {
137 // valid conversions
138 assert sample_data['u8'] or { 0 }.int() == 1
139 assert sample_data['u16'] or { 0 }.int() == 2
140 assert sample_data['u32'] or { 0 }.int() == 3
141 assert sample_data['u64'] or { 0 }.int() == 4
142 assert sample_data['i8'] or { 0 }.int() == 5
143 assert sample_data['i16'] or { 0 }.int() == 6
144 assert sample_data['i32'] or { 0 }.int() == 7
145 assert sample_data['int'] or { 0 }.int() == 8
146 assert sample_data['i64'] or { 0 }.int() == 9
147 assert sample_data['f32'] or { 0 }.int() == 2
148 assert sample_data['f64'] or { 0 }.int() == 1
149 assert json.Any(true).int() == 1
150 assert json.Any('123').int() == 123
151 // invalid conversions
152 assert sample_data['null'] or { 0 }.int() == 0
153 assert sample_data['arr'] or { 0 }.int() == 0
154 assert sample_data['obj'] or { 0 }.int() == 0
155}
156
157fn test_i64() {
158 // valid conversions
159 assert sample_data['u8'] or { 0 }.i64() == 1
160 assert sample_data['u16'] or { 0 }.i64() == 2
161 assert sample_data['u32'] or { 0 }.i64() == 3
162 assert sample_data['u64'] or { 0 }.i64() == 4
163 assert sample_data['i8'] or { 0 }.i64() == 5
164 assert sample_data['i16'] or { 0 }.i64() == 6
165 assert sample_data['i32'] or { 0 }.i64() == 7
166 assert sample_data['int'] or { 0 }.i64() == 8
167 assert sample_data['i64'] or { 0 }.i64() == 9
168 assert sample_data['f32'] or { 0 }.i64() == 2
169 assert sample_data['f64'] or { 0 }.i64() == 1
170 assert json.Any(true).i64() == 1
171 assert json.Any('123').i64() == 123
172 // invalid conversions
173 assert sample_data['null'] or { 0 }.i64() == 0
174 assert sample_data['arr'] or { 0 }.i64() == 0
175 assert sample_data['obj'] or { 0 }.i64() == 0
176}
177
178fn test_u8() {
179 // valid conversions
180 assert sample_data['u8'] or { 0 }.u8() == 1
181 assert sample_data['u16'] or { 0 }.u8() == 2
182 assert sample_data['u32'] or { 0 }.u8() == 3
183 assert sample_data['u64'] or { 0 }.u8() == 4
184 assert sample_data['i8'] or { 0 }.u8() == 5
185 assert sample_data['i16'] or { 0 }.u8() == 6
186 assert sample_data['i32'] or { 0 }.u8() == 7
187 assert sample_data['int'] or { 0 }.u8() == 8
188 assert sample_data['i64'] or { 0 }.u8() == 9
189 assert sample_data['f32'] or { 0 }.u8() == 2
190 assert sample_data['f64'] or { 0 }.u8() == 1
191 assert json.Any(true).u8() == 1
192 assert json.Any('123').u8() == 123
193 // invalid conversions
194 assert sample_data['null'] or { 0 }.u8() == 0
195 assert sample_data['arr'] or { 0 }.u8() == 0
196 assert sample_data['obj'] or { 0 }.u8() == 0
197}
198
199fn test_u16() {
200 // valid conversions
201 assert sample_data['u8'] or { 0 }.u16() == 1
202 assert sample_data['u16'] or { 0 }.u16() == 2
203 assert sample_data['u32'] or { 0 }.u16() == 3
204 assert sample_data['u64'] or { 0 }.u16() == 4
205 assert sample_data['i8'] or { 0 }.u16() == 5
206 assert sample_data['i16'] or { 0 }.u16() == 6
207 assert sample_data['i32'] or { 0 }.u16() == 7
208 assert sample_data['int'] or { 0 }.u16() == 8
209 assert sample_data['i64'] or { 0 }.u16() == 9
210 assert sample_data['f32'] or { 0 }.u16() == 2
211 assert sample_data['f64'] or { 0 }.u16() == 1
212 assert json.Any(true).u16() == 1
213 assert json.Any('123').u16() == 123
214 // invalid conversions
215 assert sample_data['null'] or { 0 }.u16() == 0
216 assert sample_data['arr'] or { 0 }.u16() == 0
217 assert sample_data['obj'] or { 0 }.u16() == 0
218}
219
220fn test_u32() {
221 // valid conversions
222 assert sample_data['u8'] or { 0 }.u32() == 1
223 assert sample_data['u16'] or { 0 }.u32() == 2
224 assert sample_data['u32'] or { 0 }.u32() == 3
225 assert sample_data['u64'] or { 0 }.u32() == 4
226 assert sample_data['i8'] or { 0 }.u32() == 5
227 assert sample_data['i16'] or { 0 }.u32() == 6
228 assert sample_data['i32'] or { 0 }.u32() == 7
229 assert sample_data['int'] or { 0 }.u32() == 8
230 assert sample_data['i64'] or { 0 }.u32() == 9
231 assert sample_data['f32'] or { 0 }.u32() == 2
232 assert sample_data['f64'] or { 0 }.u32() == 1
233 assert json.Any(true).u32() == 1
234 assert json.Any('123').u32() == 123
235 // invalid conversions
236 assert sample_data['null'] or { 0 }.u32() == 0
237 assert sample_data['arr'] or { 0 }.u32() == 0
238 assert sample_data['obj'] or { 0 }.u32() == 0
239}
240
241fn test_u64() {
242 // valid conversions
243 assert sample_data['u8'] or { 0 }.u64() == 1
244 assert sample_data['u16'] or { 0 }.u64() == 2
245 assert sample_data['u32'] or { 0 }.u64() == 3
246 assert sample_data['u64'] or { 0 }.u64() == 4
247 assert sample_data['i8'] or { 0 }.u64() == 5
248 assert sample_data['i16'] or { 0 }.u64() == 6
249 assert sample_data['i32'] or { 0 }.u64() == 7
250 assert sample_data['int'] or { 0 }.u64() == 8
251 assert sample_data['i64'] or { 0 }.u64() == 9
252 assert sample_data['f32'] or { 0 }.u64() == 2
253 assert sample_data['f64'] or { 0 }.u64() == 1
254 assert json.Any(true).u64() == 1
255 assert json.Any('123').u64() == 123
256 // invalid conversions
257 assert sample_data['null'] or { 0 }.u64() == 0
258 assert sample_data['arr'] or { 0 }.u64() == 0
259 assert sample_data['obj'] or { 0 }.u64() == 0
260}
261
262fn test_as_map() {
263 assert sample_data['u8'] or { 0 }.as_map()['0'] or { 0 }.u8() == 1
264 assert sample_data['u16'] or { 0 }.as_map()['0'] or { 0 }.u16() == 2
265 assert sample_data['u32'] or { 0 }.as_map()['0'] or { 0 }.u32() == 3
266 assert sample_data['u64'] or { 0 }.as_map()['0'] or { 0 }.u64() == 4
267 assert sample_data['i8'] or { 0 }.as_map()['0'] or { 0 }.i8() == 5
268 assert sample_data['i16'] or { 0 }.as_map()['0'] or { 0 }.i16() == 6
269 assert sample_data['i32'] or { 0 }.as_map()['0'] or { 0 }.i32() == 7
270 assert sample_data['int'] or { 0 }.as_map()['0'] or { 0 }.int() == 8
271 assert sample_data['i64'] or { 0 }.as_map()['0'] or { 0 }.i64() == 9
272 assert sample_data['f32'] or { 0 }.as_map()['0'] or { 0 }.f32() == 2.3
273 assert sample_data['f64'] or { 0 }.as_map()['0'] or { 0 }.f64() == 1.283
274 assert sample_data['bool'] or { 0 }.as_map()['0'] or { 0 }.bool() == false
275 assert sample_data['str'] or { 0 }.as_map()['0'] or { 0 }.str() == 'test'
276 assert is_null(sample_data['null'] or { 0 }.as_map()['0'] or { 0 }) == true
277 assert sample_data['arr'] or { 0 }.as_map()['0'] or { 0 }.str() == 'lol'
278 assert sample_data['obj'] or { 0 }.as_map()['foo'] or { 0 }.int() == 10
279}
280
281fn test_as_map_of_strings() {
282 assert sample_data['obj']!.as_map() == {
283 'foo': json.Any(10)
284 }
285 assert sample_data['obj']!.as_map_of_strings() == {
286 'foo': '10'
287 }
288}
289
290fn test_as_array() {
291 assert sample_data['u8'] or { 0 }.as_array()[0].u8() == 1
292 assert sample_data['u16'] or { 0 }.as_array()[0].u16() == 2
293 assert sample_data['u32'] or { 0 }.as_array()[0].u32() == 3
294 assert sample_data['u64'] or { 0 }.as_array()[0].u64() == 4
295 assert sample_data['i8'] or { 0 }.as_array()[0].i8() == 5
296 assert sample_data['i16'] or { 0 }.as_array()[0].i16() == 6
297 assert sample_data['i32'] or { 0 }.as_array()[0].i32() == 7
298 assert sample_data['int'] or { 0 }.as_array()[0].int() == 8
299 assert sample_data['i64'] or { 0 }.as_array()[0].i64() == 9
300 assert sample_data['f32'] or { 0 }.as_array()[0].f32() == 2.3
301 assert sample_data['f64'] or { 0 }.as_array()[0].f64() == 1.283
302 assert sample_data['bool'] or { 0 }.as_array()[0].bool() == false
303 assert sample_data['str'] or { 0 }.as_array()[0].str() == 'test'
304 assert is_null(sample_data['null'] or { 0 }.as_array()[0]) == true
305 assert sample_data['arr'] or { 0 }.as_array()[0].str() == 'lol'
306 assert sample_data['obj'] or { 0 }.as_array()[0].int() == 10
307}
308
309fn test_bool() {
310 // valid conversions
311 assert sample_data['bool'] or { 0 }.bool() == false
312 assert json.Any('true').bool() == true
313 assert sample_data['u8'] or { 0 }.bool() == true
314 assert sample_data['u16'] or { 0 }.bool() == true
315 assert sample_data['u32'] or { 0 }.bool() == true
316 assert sample_data['u64'] or { 0 }.bool() == true
317 assert sample_data['i8'] or { 0 }.bool() == true
318 assert sample_data['i16'] or { 0 }.bool() == true
319 assert sample_data['i32'] or { 0 }.bool() == true
320 assert sample_data['int'] or { 0 }.bool() == true
321 assert sample_data['i64'] or { 0 }.bool() == true
322 assert sample_data['f32'] or { 0 }.bool() == true
323 assert sample_data['f64'] or { 0 }.bool() == true
324 // invalid conversions
325 assert sample_data['null'] or { 0 }.bool() == false
326 assert sample_data['arr'] or { 0 }.bool() == false
327 assert sample_data['obj'] or { 0 }.bool() == false
328}
329
330fn test_str() {
331 assert sample_data['u8'] or { 0 }.str() == '1'
332 assert sample_data['u16'] or { 0 }.str() == '2'
333 assert sample_data['u32'] or { 0 }.str() == '3'
334 assert sample_data['u64'] or { 0 }.str() == '4'
335 assert sample_data['i8'] or { 0 }.str() == '5'
336 assert sample_data['i16'] or { 0 }.str() == '6'
337 assert sample_data['i32'] or { 0 }.str() == '7'
338 assert sample_data['int'] or { 0 }.str() == '8'
339 assert sample_data['i64'] or { 0 }.str() == '9'
340 assert sample_data['f32'] or { 0 }.str() == '2.3'
341 assert sample_data['f64'] or { 0 }.str() == '1.283'
342 assert sample_data['bool'] or { 0 }.str() == 'false'
343 assert sample_data['str'] or { 0 }.str() == 'test'
344 assert sample_data['null'] or { 0 }.str() == 'null'
345 assert sample_data['arr'] or { 'not lol' }.str() == '["lol"]'
346 assert sample_data.str() == '{"u8":1,"u16":2,"u32":3,"u64":4,"i8":5,"i16":6,"i32":7,"int":8,"i64":9,"f32":2.3,"f64":1.283,"bool":false,"str":"test","null":null,"arr":["lol"],"obj":{"foo":10}}'
347}
348