1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
mod decode; mod encode; mod error; pub use crate::decode::{ hex_check_fallback, hex_check_sse, hex_decode, hex_decode_fallback, hex_decode_unchecked, }; pub use crate::encode::{hex_encode, hex_encode_fallback, hex_string, hex_to}; #[cfg(test)] mod tests { use crate::decode::hex_decode; use crate::encode::{hex_encode, hex_string}; use proptest::{proptest, proptest_helper}; use std::str; fn _test_hex_encode(s: &String) { let mut buffer = vec![0; s.as_bytes().len() * 2]; hex_encode(s.as_bytes(), &mut buffer).unwrap(); let encode = unsafe { str::from_utf8_unchecked(&buffer[..s.as_bytes().len() * 2]) }; let hex_string = hex_string(s.as_bytes()).unwrap(); assert_eq!(encode, hex::encode(s)); assert_eq!(hex_string, hex::encode(s)); } proptest! { #[test] fn test_hex_encode(ref s in ".*") { _test_hex_encode(s); } } fn _test_hex_decode(s: &String) { let len = s.as_bytes().len(); let mut dst = Vec::with_capacity(len); dst.resize(len, 0); let hex_string = hex_string(s.as_bytes()).unwrap(); hex_decode(hex_string.as_bytes(), &mut dst).unwrap(); assert_eq!(&dst[..], s.as_bytes()); } proptest! { #[test] fn test_hex_decode(ref s in ".+") { _test_hex_decode(s); } } fn _test_hex_decode_check(s: &String, ok: bool) { let len = s.as_bytes().len(); let mut dst = Vec::with_capacity(len / 2); dst.resize(len / 2, 0); assert!(hex_decode(s.as_bytes(), &mut dst).is_ok() == ok); } proptest! { #[test] fn test_hex_decode_check(ref s in "([0-9a-fA-F][0-9a-fA-F])+") { _test_hex_decode_check(s, true); } } proptest! { #[test] fn test_hex_decode_check_odd(ref s in "[0-9a-fA-F]{11}") { _test_hex_decode_check(s, false); } } }