Skip to content

Commit ff04e8b

Browse files
committed
Improve coverage of num conversion in test suite
1 parent 69240c1 commit ff04e8b

File tree

1 file changed

+314
-52
lines changed

1 file changed

+314
-52
lines changed

test_suite/tests/test_de.rs

+314-52
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,10 @@ impl<'de> Deserialize<'de> for IgnoredAny {
144144
//////////////////////////////////////////////////////////////////////////
145145

146146
#[track_caller]
147-
fn test<'de>(value: impl Deserialize<'de> + PartialEq + Debug, tokens: &'de [Token]) {
147+
fn test<'de, T>(value: T, tokens: &'de [Token])
148+
where
149+
T: Deserialize<'de> + PartialEq + Debug,
150+
{
148151
// Test ser/de roundtripping
149152
assert_de_tokens(&value, tokens);
150153

@@ -207,60 +210,319 @@ fn test_bool() {
207210
}
208211

209212
#[test]
210-
fn test_isize() {
211-
test(0isize, &[Token::I8(0)]);
212-
test(0isize, &[Token::I16(0)]);
213-
test(0isize, &[Token::I32(0)]);
214-
test(0isize, &[Token::I64(0)]);
215-
test(0isize, &[Token::U8(0)]);
216-
test(0isize, &[Token::U16(0)]);
217-
test(0isize, &[Token::U32(0)]);
218-
test(0isize, &[Token::U64(0)]);
219-
}
220-
221-
#[test]
222-
fn test_ints() {
223-
test(0i8, &[Token::I8(0)]);
224-
test(0i16, &[Token::I16(0)]);
225-
test(0i32, &[Token::I32(0)]);
226-
test(0i64, &[Token::I64(0)]);
227-
}
228-
229-
#[test]
230-
fn test_uints() {
231-
test(0u8, &[Token::U8(0)]);
232-
test(0u16, &[Token::U16(0)]);
233-
test(0u32, &[Token::U32(0)]);
234-
test(0u64, &[Token::U64(0)]);
235-
}
236-
237-
#[test]
238-
fn test_floats() {
239-
test(0f32, &[Token::F32(0.)]);
240-
test(0f64, &[Token::F64(0.)]);
213+
fn test_i8() {
214+
let test = test::<i8>;
215+
216+
// from signed
217+
test(-128, &[Token::I8(-128)]);
218+
test(-128, &[Token::I16(-128)]);
219+
test(-128, &[Token::I32(-128)]);
220+
test(-128, &[Token::I64(-128)]);
221+
test(127, &[Token::I8(127)]);
222+
test(127, &[Token::I16(127)]);
223+
test(127, &[Token::I32(127)]);
224+
test(127, &[Token::I64(127)]);
225+
226+
// from unsigned
227+
test(0, &[Token::U8(0)]);
228+
test(0, &[Token::U16(0)]);
229+
test(0, &[Token::U32(0)]);
230+
test(0, &[Token::U64(0)]);
231+
test(127, &[Token::U8(127)]);
232+
test(127, &[Token::U16(127)]);
233+
test(127, &[Token::U32(127)]);
234+
test(127, &[Token::U64(127)]);
235+
}
236+
237+
#[test]
238+
fn test_i16() {
239+
let test = test::<i16>;
240+
241+
// from signed
242+
test(-128, &[Token::I8(-128)]);
243+
test(-32768, &[Token::I16(-32768)]);
244+
test(-32768, &[Token::I32(-32768)]);
245+
test(-32768, &[Token::I64(-32768)]);
246+
test(127, &[Token::I8(127)]);
247+
test(32767, &[Token::I16(32767)]);
248+
test(32767, &[Token::I32(32767)]);
249+
test(32767, &[Token::I64(32767)]);
250+
251+
// from unsigned
252+
test(0, &[Token::U8(0)]);
253+
test(0, &[Token::U16(0)]);
254+
test(0, &[Token::U32(0)]);
255+
test(0, &[Token::U64(0)]);
256+
test(255, &[Token::U8(255)]);
257+
test(32767, &[Token::U16(32767)]);
258+
test(32767, &[Token::U32(32767)]);
259+
test(32767, &[Token::U64(32767)]);
260+
}
261+
262+
#[test]
263+
fn test_i32() {
264+
let test = test::<i32>;
265+
266+
// from signed
267+
test(-128, &[Token::I8(-128)]);
268+
test(-32768, &[Token::I16(-32768)]);
269+
test(-2147483648, &[Token::I32(-2147483648)]);
270+
test(-2147483648, &[Token::I64(-2147483648)]);
271+
test(127, &[Token::I8(127)]);
272+
test(32767, &[Token::I16(32767)]);
273+
test(2147483647, &[Token::I32(2147483647)]);
274+
test(2147483647, &[Token::I64(2147483647)]);
275+
276+
// from unsigned
277+
test(0, &[Token::U8(0)]);
278+
test(0, &[Token::U16(0)]);
279+
test(0, &[Token::U32(0)]);
280+
test(0, &[Token::U64(0)]);
281+
test(255, &[Token::U8(255)]);
282+
test(65535, &[Token::U16(65535)]);
283+
test(2147483647, &[Token::U32(2147483647)]);
284+
test(2147483647, &[Token::U64(2147483647)]);
285+
}
286+
287+
#[test]
288+
fn test_i64() {
289+
let test = test::<i64>;
290+
291+
// from signed
292+
test(-128, &[Token::I8(-128)]);
293+
test(-32768, &[Token::I16(-32768)]);
294+
test(-2147483648, &[Token::I32(-2147483648)]);
295+
test(-9223372036854775808, &[Token::I64(-9223372036854775808)]);
296+
test(127, &[Token::I8(127)]);
297+
test(32767, &[Token::I16(32767)]);
298+
test(2147483647, &[Token::I32(2147483647)]);
299+
test(9223372036854775807, &[Token::I64(9223372036854775807)]);
300+
301+
// from unsigned
302+
test(0, &[Token::U8(0)]);
303+
test(0, &[Token::U16(0)]);
304+
test(0, &[Token::U32(0)]);
305+
test(0, &[Token::U64(0)]);
306+
test(255, &[Token::U8(255)]);
307+
test(65535, &[Token::U16(65535)]);
308+
test(4294967295, &[Token::U32(4294967295)]);
309+
test(9223372036854775807, &[Token::U64(9223372036854775807)]);
310+
}
311+
312+
#[test]
313+
fn test_i128() {
314+
let test = test::<i128>;
315+
316+
// from signed
317+
test(-128, &[Token::I8(-128)]);
318+
test(-32768, &[Token::I16(-32768)]);
319+
test(-2147483648, &[Token::I32(-2147483648)]);
320+
test(-9223372036854775808, &[Token::I64(-9223372036854775808)]);
321+
test(127, &[Token::I8(127)]);
322+
test(32767, &[Token::I16(32767)]);
323+
test(2147483647, &[Token::I32(2147483647)]);
324+
test(9223372036854775807, &[Token::I64(9223372036854775807)]);
325+
326+
// from unsigned
327+
test(0, &[Token::U8(0)]);
328+
test(0, &[Token::U16(0)]);
329+
test(0, &[Token::U32(0)]);
330+
test(0, &[Token::U64(0)]);
331+
test(255, &[Token::U8(255)]);
332+
test(65535, &[Token::U16(65535)]);
333+
test(4294967295, &[Token::U32(4294967295)]);
334+
test(18446744073709551615, &[Token::U64(18446744073709551615)]);
241335
}
242336

243337
#[test]
244-
fn test_small_int_to_128() {
245-
test(1i128, &[Token::I8(1)]);
246-
test(1i128, &[Token::I16(1)]);
247-
test(1i128, &[Token::I32(1)]);
248-
test(1i128, &[Token::I64(1)]);
249-
250-
test(1i128, &[Token::U8(1)]);
251-
test(1i128, &[Token::U16(1)]);
252-
test(1i128, &[Token::U32(1)]);
253-
test(1i128, &[Token::U64(1)]);
254-
255-
test(1u128, &[Token::I8(1)]);
256-
test(1u128, &[Token::I16(1)]);
257-
test(1u128, &[Token::I32(1)]);
258-
test(1u128, &[Token::I64(1)]);
259-
260-
test(1u128, &[Token::U8(1)]);
261-
test(1u128, &[Token::U16(1)]);
262-
test(1u128, &[Token::U32(1)]);
263-
test(1u128, &[Token::U64(1)]);
338+
fn test_isize() {
339+
let test = test::<isize>;
340+
341+
// from signed
342+
test(-10, &[Token::I8(-10)]);
343+
test(-10, &[Token::I16(-10)]);
344+
test(-10, &[Token::I32(-10)]);
345+
test(-10, &[Token::I64(-10)]);
346+
test(10, &[Token::I8(10)]);
347+
test(10, &[Token::I16(10)]);
348+
test(10, &[Token::I32(10)]);
349+
test(10, &[Token::I64(10)]);
350+
351+
// from unsigned
352+
test(0, &[Token::U8(0)]);
353+
test(0, &[Token::U16(0)]);
354+
test(0, &[Token::U32(0)]);
355+
test(0, &[Token::U64(0)]);
356+
test(10, &[Token::U8(10)]);
357+
test(10, &[Token::U16(10)]);
358+
test(10, &[Token::U32(10)]);
359+
test(10, &[Token::U64(10)]);
360+
}
361+
362+
#[test]
363+
fn test_u8() {
364+
let test = test::<u8>;
365+
366+
// from signed
367+
test(0, &[Token::I8(0)]);
368+
test(0, &[Token::I16(0)]);
369+
test(0, &[Token::I32(0)]);
370+
test(0, &[Token::I64(0)]);
371+
test(127, &[Token::I8(127)]);
372+
test(255, &[Token::I16(255)]);
373+
test(255, &[Token::I32(255)]);
374+
test(255, &[Token::I64(255)]);
375+
376+
// from unsigned
377+
test(0, &[Token::U8(0)]);
378+
test(0, &[Token::U16(0)]);
379+
test(0, &[Token::U32(0)]);
380+
test(0, &[Token::U64(0)]);
381+
test(255, &[Token::U8(255)]);
382+
test(255, &[Token::U16(255)]);
383+
test(255, &[Token::U32(255)]);
384+
test(255, &[Token::U64(255)]);
385+
}
386+
387+
#[test]
388+
fn test_u16() {
389+
let test = test::<u16>;
390+
391+
// from signed
392+
test(0, &[Token::I8(0)]);
393+
test(0, &[Token::I16(0)]);
394+
test(0, &[Token::I32(0)]);
395+
test(0, &[Token::I64(0)]);
396+
test(127, &[Token::I8(127)]);
397+
test(32767, &[Token::I16(32767)]);
398+
test(65535, &[Token::I32(65535)]);
399+
test(65535, &[Token::I64(65535)]);
400+
401+
// from unsigned
402+
test(0, &[Token::U8(0)]);
403+
test(0, &[Token::U16(0)]);
404+
test(0, &[Token::U32(0)]);
405+
test(0, &[Token::U64(0)]);
406+
test(255, &[Token::U8(255)]);
407+
test(65535, &[Token::U16(65535)]);
408+
test(65535, &[Token::U32(65535)]);
409+
test(65535, &[Token::U64(65535)]);
410+
}
411+
412+
#[test]
413+
fn test_u32() {
414+
let test = test::<u32>;
415+
416+
// from signed
417+
test(0, &[Token::I8(0)]);
418+
test(0, &[Token::I16(0)]);
419+
test(0, &[Token::I32(0)]);
420+
test(0, &[Token::I64(0)]);
421+
test(127, &[Token::I8(127)]);
422+
test(32767, &[Token::I16(32767)]);
423+
test(2147483647, &[Token::I32(2147483647)]);
424+
test(4294967295, &[Token::I64(4294967295)]);
425+
426+
// from unsigned
427+
test(0, &[Token::U8(0)]);
428+
test(0, &[Token::U16(0)]);
429+
test(0, &[Token::U32(0)]);
430+
test(0, &[Token::U64(0)]);
431+
test(255, &[Token::U8(255)]);
432+
test(65535, &[Token::U16(65535)]);
433+
test(4294967295, &[Token::U32(4294967295)]);
434+
test(4294967295, &[Token::U64(4294967295)]);
435+
}
436+
437+
#[test]
438+
fn test_u64() {
439+
let test = test::<u64>;
440+
441+
// from signed
442+
test(0, &[Token::I8(0)]);
443+
test(0, &[Token::I16(0)]);
444+
test(0, &[Token::I32(0)]);
445+
test(0, &[Token::I64(0)]);
446+
test(127, &[Token::I8(127)]);
447+
test(32767, &[Token::I16(32767)]);
448+
test(2147483647, &[Token::I32(2147483647)]);
449+
test(9223372036854775807, &[Token::I64(9223372036854775807)]);
450+
451+
// from unsigned
452+
test(0, &[Token::U8(0)]);
453+
test(0, &[Token::U16(0)]);
454+
test(0, &[Token::U32(0)]);
455+
test(0, &[Token::U64(0)]);
456+
test(255, &[Token::U8(255)]);
457+
test(65535, &[Token::U16(65535)]);
458+
test(4294967295, &[Token::U32(4294967295)]);
459+
test(18446744073709551615, &[Token::U64(18446744073709551615)]);
460+
}
461+
462+
#[test]
463+
fn test_u128() {
464+
let test = test::<u128>;
465+
466+
// from signed
467+
test(0, &[Token::I8(0)]);
468+
test(0, &[Token::I16(0)]);
469+
test(0, &[Token::I32(0)]);
470+
test(0, &[Token::I64(0)]);
471+
test(127, &[Token::I8(127)]);
472+
test(32767, &[Token::I16(32767)]);
473+
test(2147483647, &[Token::I32(2147483647)]);
474+
test(9223372036854775807, &[Token::I64(9223372036854775807)]);
475+
476+
// from unsigned
477+
test(0, &[Token::U8(0)]);
478+
test(0, &[Token::U16(0)]);
479+
test(0, &[Token::U32(0)]);
480+
test(0, &[Token::U64(0)]);
481+
test(255, &[Token::U8(255)]);
482+
test(65535, &[Token::U16(65535)]);
483+
test(4294967295, &[Token::U32(4294967295)]);
484+
test(18446744073709551615, &[Token::U64(18446744073709551615)]);
485+
}
486+
487+
#[test]
488+
fn test_usize() {
489+
let test = test::<usize>;
490+
491+
// from signed
492+
test(0, &[Token::I8(0)]);
493+
test(0, &[Token::I16(0)]);
494+
test(0, &[Token::I32(0)]);
495+
test(0, &[Token::I64(0)]);
496+
test(10, &[Token::I8(10)]);
497+
test(10, &[Token::I16(10)]);
498+
test(10, &[Token::I32(10)]);
499+
test(10, &[Token::I64(10)]);
500+
501+
// from unsigned
502+
test(0, &[Token::U8(0)]);
503+
test(0, &[Token::U16(0)]);
504+
test(0, &[Token::U32(0)]);
505+
test(0, &[Token::U64(0)]);
506+
test(10, &[Token::U8(10)]);
507+
test(10, &[Token::U16(10)]);
508+
test(10, &[Token::U32(10)]);
509+
test(10, &[Token::U64(10)]);
510+
}
511+
512+
#[test]
513+
fn test_f32() {
514+
let test = test::<f32>;
515+
516+
test(1.11, &[Token::F32(1.11)]);
517+
test(1.11, &[Token::F64(1.11)]);
518+
}
519+
520+
#[test]
521+
fn test_f64() {
522+
let test = test::<f64>;
523+
524+
test(1.11f32 as f64, &[Token::F32(1.11)]);
525+
test(1.11, &[Token::F64(1.11)]);
264526
}
265527

266528
#[test]

0 commit comments

Comments
 (0)