| //! Integration tests. |
| |
| /// Hexadecimal test vectors |
| struct HexVector { |
| /// Raw bytes |
| raw: &'static [u8], |
| /// Lower hex encoded |
| lower_hex: &'static [u8], |
| /// Upper hex encoded |
| upper_hex: &'static [u8], |
| } |
| |
| const HEX_TEST_VECTORS: &[HexVector] = &[ |
| HexVector { |
| raw: b"", |
| lower_hex: b"", |
| upper_hex: b"", |
| }, |
| HexVector { |
| raw: b"\0", |
| lower_hex: b"00", |
| upper_hex: b"00", |
| }, |
| HexVector { |
| raw: b"***", |
| lower_hex: b"2a2a2a", |
| upper_hex: b"2A2A2A", |
| }, |
| HexVector { |
| raw: b"\x01\x02\x03\x04", |
| lower_hex: b"01020304", |
| upper_hex: b"01020304", |
| }, |
| HexVector { |
| raw: b"\xAD\xAD\xAD\xAD\xAD", |
| lower_hex: b"adadadadad", |
| upper_hex: b"ADADADADAD", |
| }, |
| HexVector { |
| raw: b"\xFF\xFF\xFF\xFF\xFF", |
| lower_hex: b"ffffffffff", |
| upper_hex: b"FFFFFFFFFF", |
| }, |
| ]; |
| |
| #[test] |
| fn lower_encode() { |
| for vector in HEX_TEST_VECTORS { |
| // 10 is the size of the largest encoded test vector |
| let mut buf = [0u8; 10]; |
| let out = base16ct::lower::encode(vector.raw, &mut buf).unwrap(); |
| assert_eq!(vector.lower_hex, out); |
| } |
| } |
| |
| #[test] |
| fn lower_decode() { |
| for vector in HEX_TEST_VECTORS { |
| // 5 is the size of the largest decoded test vector |
| let mut buf = [0u8; 5]; |
| let out = base16ct::lower::decode(vector.lower_hex, &mut buf).unwrap(); |
| assert_eq!(vector.raw, out); |
| } |
| } |
| |
| #[test] |
| fn lower_reject_odd_size_input() { |
| let mut out = [0u8; 3]; |
| assert_eq!( |
| Err(base16ct::Error::InvalidLength), |
| base16ct::lower::decode(b"12345", &mut out), |
| ) |
| } |
| |
| #[test] |
| fn upper_encode() { |
| for vector in HEX_TEST_VECTORS { |
| // 10 is the size of the largest encoded test vector |
| let mut buf = [0u8; 10]; |
| let out = base16ct::upper::encode(vector.raw, &mut buf).unwrap(); |
| assert_eq!(vector.upper_hex, out); |
| } |
| } |
| |
| #[test] |
| fn upper_decode() { |
| for vector in HEX_TEST_VECTORS { |
| // 5 is the size of the largest decoded test vector |
| let mut buf = [0u8; 5]; |
| let out = base16ct::upper::decode(vector.upper_hex, &mut buf).unwrap(); |
| assert_eq!(vector.raw, out); |
| } |
| } |
| |
| #[test] |
| fn upper_reject_odd_size_input() { |
| let mut out = [0u8; 3]; |
| assert_eq!( |
| Err(base16ct::Error::InvalidLength), |
| base16ct::upper::decode(b"12345", &mut out), |
| ) |
| } |
| |
| #[test] |
| fn mixed_decode() { |
| for vector in HEX_TEST_VECTORS { |
| // 5 is the size of the largest decoded test vector |
| let mut buf = [0u8; 5]; |
| let out = base16ct::mixed::decode(vector.upper_hex, &mut buf).unwrap(); |
| assert_eq!(vector.raw, out); |
| let out = base16ct::mixed::decode(vector.lower_hex, &mut buf).unwrap(); |
| assert_eq!(vector.raw, out); |
| } |
| } |
| |
| #[test] |
| fn mixed_reject_odd_size_input() { |
| let mut out = [0u8; 3]; |
| assert_eq!( |
| Err(base16ct::Error::InvalidLength), |
| base16ct::mixed::decode(b"12345", &mut out), |
| ) |
| } |
| |
| #[test] |
| #[cfg(feature = "alloc")] |
| fn encode_and_decode_various_lengths() { |
| let data = [b'X'; 64]; |
| |
| for i in 0..data.len() { |
| let encoded = base16ct::lower::encode_string(&data[..i]); |
| let decoded = base16ct::lower::decode_vec(encoded).unwrap(); |
| assert_eq!(decoded.as_slice(), &data[..i]); |
| |
| let encoded = base16ct::upper::encode_string(&data[..i]); |
| let decoded = base16ct::upper::decode_vec(encoded).unwrap(); |
| assert_eq!(decoded.as_slice(), &data[..i]); |
| |
| let encoded = base16ct::lower::encode_string(&data[..i]); |
| let decoded = base16ct::mixed::decode_vec(encoded).unwrap(); |
| assert_eq!(decoded.as_slice(), &data[..i]); |
| |
| let encoded = base16ct::upper::encode_string(&data[..i]); |
| let decoded = base16ct::mixed::decode_vec(encoded).unwrap(); |
| assert_eq!(decoded.as_slice(), &data[..i]); |
| } |
| } |
| |
| #[test] |
| fn hex_display_upper() { |
| for vector in HEX_TEST_VECTORS { |
| let hex = format!("{:X}", base16ct::HexDisplay(vector.raw)); |
| assert_eq!(hex.as_bytes(), vector.upper_hex); |
| } |
| } |
| |
| #[test] |
| fn hex_display_lower() { |
| for vector in HEX_TEST_VECTORS { |
| let hex = format!("{:x}", base16ct::HexDisplay(vector.raw)); |
| assert_eq!(hex.as_bytes(), vector.lower_hex); |
| } |
| } |