Improve coverage of num conversion in test suite

This commit is contained in:
David Tolnay 2022-01-20 20:42:17 -08:00
parent 69240c17c5
commit ff04e8be9b
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82

View File

@ -144,7 +144,10 @@ impl<'de> Deserialize<'de> for IgnoredAny {
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
#[track_caller] #[track_caller]
fn test<'de>(value: impl Deserialize<'de> + PartialEq + Debug, tokens: &'de [Token]) { fn test<'de, T>(value: T, tokens: &'de [Token])
where
T: Deserialize<'de> + PartialEq + Debug,
{
// Test ser/de roundtripping // Test ser/de roundtripping
assert_de_tokens(&value, tokens); assert_de_tokens(&value, tokens);
@ -206,61 +209,320 @@ fn test_bool() {
test(false, &[Token::Bool(false)]); test(false, &[Token::Bool(false)]);
} }
#[test]
fn test_i8() {
let test = test::<i8>;
// from signed
test(-128, &[Token::I8(-128)]);
test(-128, &[Token::I16(-128)]);
test(-128, &[Token::I32(-128)]);
test(-128, &[Token::I64(-128)]);
test(127, &[Token::I8(127)]);
test(127, &[Token::I16(127)]);
test(127, &[Token::I32(127)]);
test(127, &[Token::I64(127)]);
// from unsigned
test(0, &[Token::U8(0)]);
test(0, &[Token::U16(0)]);
test(0, &[Token::U32(0)]);
test(0, &[Token::U64(0)]);
test(127, &[Token::U8(127)]);
test(127, &[Token::U16(127)]);
test(127, &[Token::U32(127)]);
test(127, &[Token::U64(127)]);
}
#[test]
fn test_i16() {
let test = test::<i16>;
// from signed
test(-128, &[Token::I8(-128)]);
test(-32768, &[Token::I16(-32768)]);
test(-32768, &[Token::I32(-32768)]);
test(-32768, &[Token::I64(-32768)]);
test(127, &[Token::I8(127)]);
test(32767, &[Token::I16(32767)]);
test(32767, &[Token::I32(32767)]);
test(32767, &[Token::I64(32767)]);
// from unsigned
test(0, &[Token::U8(0)]);
test(0, &[Token::U16(0)]);
test(0, &[Token::U32(0)]);
test(0, &[Token::U64(0)]);
test(255, &[Token::U8(255)]);
test(32767, &[Token::U16(32767)]);
test(32767, &[Token::U32(32767)]);
test(32767, &[Token::U64(32767)]);
}
#[test]
fn test_i32() {
let test = test::<i32>;
// from signed
test(-128, &[Token::I8(-128)]);
test(-32768, &[Token::I16(-32768)]);
test(-2147483648, &[Token::I32(-2147483648)]);
test(-2147483648, &[Token::I64(-2147483648)]);
test(127, &[Token::I8(127)]);
test(32767, &[Token::I16(32767)]);
test(2147483647, &[Token::I32(2147483647)]);
test(2147483647, &[Token::I64(2147483647)]);
// from unsigned
test(0, &[Token::U8(0)]);
test(0, &[Token::U16(0)]);
test(0, &[Token::U32(0)]);
test(0, &[Token::U64(0)]);
test(255, &[Token::U8(255)]);
test(65535, &[Token::U16(65535)]);
test(2147483647, &[Token::U32(2147483647)]);
test(2147483647, &[Token::U64(2147483647)]);
}
#[test]
fn test_i64() {
let test = test::<i64>;
// from signed
test(-128, &[Token::I8(-128)]);
test(-32768, &[Token::I16(-32768)]);
test(-2147483648, &[Token::I32(-2147483648)]);
test(-9223372036854775808, &[Token::I64(-9223372036854775808)]);
test(127, &[Token::I8(127)]);
test(32767, &[Token::I16(32767)]);
test(2147483647, &[Token::I32(2147483647)]);
test(9223372036854775807, &[Token::I64(9223372036854775807)]);
// from unsigned
test(0, &[Token::U8(0)]);
test(0, &[Token::U16(0)]);
test(0, &[Token::U32(0)]);
test(0, &[Token::U64(0)]);
test(255, &[Token::U8(255)]);
test(65535, &[Token::U16(65535)]);
test(4294967295, &[Token::U32(4294967295)]);
test(9223372036854775807, &[Token::U64(9223372036854775807)]);
}
#[test]
fn test_i128() {
let test = test::<i128>;
// from signed
test(-128, &[Token::I8(-128)]);
test(-32768, &[Token::I16(-32768)]);
test(-2147483648, &[Token::I32(-2147483648)]);
test(-9223372036854775808, &[Token::I64(-9223372036854775808)]);
test(127, &[Token::I8(127)]);
test(32767, &[Token::I16(32767)]);
test(2147483647, &[Token::I32(2147483647)]);
test(9223372036854775807, &[Token::I64(9223372036854775807)]);
// from unsigned
test(0, &[Token::U8(0)]);
test(0, &[Token::U16(0)]);
test(0, &[Token::U32(0)]);
test(0, &[Token::U64(0)]);
test(255, &[Token::U8(255)]);
test(65535, &[Token::U16(65535)]);
test(4294967295, &[Token::U32(4294967295)]);
test(18446744073709551615, &[Token::U64(18446744073709551615)]);
}
#[test] #[test]
fn test_isize() { fn test_isize() {
test(0isize, &[Token::I8(0)]); let test = test::<isize>;
test(0isize, &[Token::I16(0)]);
test(0isize, &[Token::I32(0)]); // from signed
test(0isize, &[Token::I64(0)]); test(-10, &[Token::I8(-10)]);
test(0isize, &[Token::U8(0)]); test(-10, &[Token::I16(-10)]);
test(0isize, &[Token::U16(0)]); test(-10, &[Token::I32(-10)]);
test(0isize, &[Token::U32(0)]); test(-10, &[Token::I64(-10)]);
test(0isize, &[Token::U64(0)]); test(10, &[Token::I8(10)]);
test(10, &[Token::I16(10)]);
test(10, &[Token::I32(10)]);
test(10, &[Token::I64(10)]);
// from unsigned
test(0, &[Token::U8(0)]);
test(0, &[Token::U16(0)]);
test(0, &[Token::U32(0)]);
test(0, &[Token::U64(0)]);
test(10, &[Token::U8(10)]);
test(10, &[Token::U16(10)]);
test(10, &[Token::U32(10)]);
test(10, &[Token::U64(10)]);
} }
#[test] #[test]
fn test_ints() { fn test_u8() {
test(0i8, &[Token::I8(0)]); let test = test::<u8>;
test(0i16, &[Token::I16(0)]);
test(0i32, &[Token::I32(0)]); // from signed
test(0i64, &[Token::I64(0)]); test(0, &[Token::I8(0)]);
test(0, &[Token::I16(0)]);
test(0, &[Token::I32(0)]);
test(0, &[Token::I64(0)]);
test(127, &[Token::I8(127)]);
test(255, &[Token::I16(255)]);
test(255, &[Token::I32(255)]);
test(255, &[Token::I64(255)]);
// from unsigned
test(0, &[Token::U8(0)]);
test(0, &[Token::U16(0)]);
test(0, &[Token::U32(0)]);
test(0, &[Token::U64(0)]);
test(255, &[Token::U8(255)]);
test(255, &[Token::U16(255)]);
test(255, &[Token::U32(255)]);
test(255, &[Token::U64(255)]);
} }
#[test] #[test]
fn test_uints() { fn test_u16() {
test(0u8, &[Token::U8(0)]); let test = test::<u16>;
test(0u16, &[Token::U16(0)]);
test(0u32, &[Token::U32(0)]); // from signed
test(0u64, &[Token::U64(0)]); test(0, &[Token::I8(0)]);
test(0, &[Token::I16(0)]);
test(0, &[Token::I32(0)]);
test(0, &[Token::I64(0)]);
test(127, &[Token::I8(127)]);
test(32767, &[Token::I16(32767)]);
test(65535, &[Token::I32(65535)]);
test(65535, &[Token::I64(65535)]);
// from unsigned
test(0, &[Token::U8(0)]);
test(0, &[Token::U16(0)]);
test(0, &[Token::U32(0)]);
test(0, &[Token::U64(0)]);
test(255, &[Token::U8(255)]);
test(65535, &[Token::U16(65535)]);
test(65535, &[Token::U32(65535)]);
test(65535, &[Token::U64(65535)]);
} }
#[test] #[test]
fn test_floats() { fn test_u32() {
test(0f32, &[Token::F32(0.)]); let test = test::<u32>;
test(0f64, &[Token::F64(0.)]);
// from signed
test(0, &[Token::I8(0)]);
test(0, &[Token::I16(0)]);
test(0, &[Token::I32(0)]);
test(0, &[Token::I64(0)]);
test(127, &[Token::I8(127)]);
test(32767, &[Token::I16(32767)]);
test(2147483647, &[Token::I32(2147483647)]);
test(4294967295, &[Token::I64(4294967295)]);
// from unsigned
test(0, &[Token::U8(0)]);
test(0, &[Token::U16(0)]);
test(0, &[Token::U32(0)]);
test(0, &[Token::U64(0)]);
test(255, &[Token::U8(255)]);
test(65535, &[Token::U16(65535)]);
test(4294967295, &[Token::U32(4294967295)]);
test(4294967295, &[Token::U64(4294967295)]);
} }
#[test] #[test]
fn test_small_int_to_128() { fn test_u64() {
test(1i128, &[Token::I8(1)]); let test = test::<u64>;
test(1i128, &[Token::I16(1)]);
test(1i128, &[Token::I32(1)]);
test(1i128, &[Token::I64(1)]);
test(1i128, &[Token::U8(1)]); // from signed
test(1i128, &[Token::U16(1)]); test(0, &[Token::I8(0)]);
test(1i128, &[Token::U32(1)]); test(0, &[Token::I16(0)]);
test(1i128, &[Token::U64(1)]); test(0, &[Token::I32(0)]);
test(0, &[Token::I64(0)]);
test(127, &[Token::I8(127)]);
test(32767, &[Token::I16(32767)]);
test(2147483647, &[Token::I32(2147483647)]);
test(9223372036854775807, &[Token::I64(9223372036854775807)]);
test(1u128, &[Token::I8(1)]); // from unsigned
test(1u128, &[Token::I16(1)]); test(0, &[Token::U8(0)]);
test(1u128, &[Token::I32(1)]); test(0, &[Token::U16(0)]);
test(1u128, &[Token::I64(1)]); test(0, &[Token::U32(0)]);
test(0, &[Token::U64(0)]);
test(255, &[Token::U8(255)]);
test(65535, &[Token::U16(65535)]);
test(4294967295, &[Token::U32(4294967295)]);
test(18446744073709551615, &[Token::U64(18446744073709551615)]);
}
test(1u128, &[Token::U8(1)]); #[test]
test(1u128, &[Token::U16(1)]); fn test_u128() {
test(1u128, &[Token::U32(1)]); let test = test::<u128>;
test(1u128, &[Token::U64(1)]);
// from signed
test(0, &[Token::I8(0)]);
test(0, &[Token::I16(0)]);
test(0, &[Token::I32(0)]);
test(0, &[Token::I64(0)]);
test(127, &[Token::I8(127)]);
test(32767, &[Token::I16(32767)]);
test(2147483647, &[Token::I32(2147483647)]);
test(9223372036854775807, &[Token::I64(9223372036854775807)]);
// from unsigned
test(0, &[Token::U8(0)]);
test(0, &[Token::U16(0)]);
test(0, &[Token::U32(0)]);
test(0, &[Token::U64(0)]);
test(255, &[Token::U8(255)]);
test(65535, &[Token::U16(65535)]);
test(4294967295, &[Token::U32(4294967295)]);
test(18446744073709551615, &[Token::U64(18446744073709551615)]);
}
#[test]
fn test_usize() {
let test = test::<usize>;
// from signed
test(0, &[Token::I8(0)]);
test(0, &[Token::I16(0)]);
test(0, &[Token::I32(0)]);
test(0, &[Token::I64(0)]);
test(10, &[Token::I8(10)]);
test(10, &[Token::I16(10)]);
test(10, &[Token::I32(10)]);
test(10, &[Token::I64(10)]);
// from unsigned
test(0, &[Token::U8(0)]);
test(0, &[Token::U16(0)]);
test(0, &[Token::U32(0)]);
test(0, &[Token::U64(0)]);
test(10, &[Token::U8(10)]);
test(10, &[Token::U16(10)]);
test(10, &[Token::U32(10)]);
test(10, &[Token::U64(10)]);
}
#[test]
fn test_f32() {
let test = test::<f32>;
test(1.11, &[Token::F32(1.11)]);
test(1.11, &[Token::F64(1.11)]);
}
#[test]
fn test_f64() {
let test = test::<f64>;
test(1.11f32 as f64, &[Token::F32(1.11)]);
test(1.11, &[Token::F64(1.11)]);
} }
#[test] #[test]