diff options
Diffstat (limited to 'vendor/bytecount/tests/check.rs')
-rw-r--r-- | vendor/bytecount/tests/check.rs | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/vendor/bytecount/tests/check.rs b/vendor/bytecount/tests/check.rs new file mode 100644 index 000000000..147b466fc --- /dev/null +++ b/vendor/bytecount/tests/check.rs @@ -0,0 +1,95 @@ +extern crate bytecount; +#[macro_use] +extern crate quickcheck; +extern crate rand; + +use bytecount::{ + count, naive_count, + num_chars, naive_num_chars, +}; +use rand::RngCore; + +fn random_bytes(len: usize) -> Vec<u8> { + let mut result = vec![0; len]; + rand::thread_rng().fill_bytes(&mut result); + result +} + +quickcheck! { + fn check_count_correct(x: (Vec<u8>, u8)) -> bool { + let (haystack, needle) = x; + count(&haystack, needle) == naive_count(&haystack, needle) + } +} + +#[test] +fn check_count_large() { + let haystack = vec![0u8; if cfg!(miri) { 2_000 } else { 10_000_000 }]; + assert_eq!(naive_count(&haystack, 0), count(&haystack, 0)); + assert_eq!(naive_count(&haystack, 1), count(&haystack, 1)); +} + +#[test] +fn check_count_large_rand() { + let haystack = random_bytes(if cfg!(miri) { 200 } else { 100_000 }); + for i in 0..=255 { + assert_eq!(naive_count(&haystack, i), count(&haystack, i)); + } +} + +#[test] +fn check_count_some() { + let haystack = vec![0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68]; + let needle = 68; + assert_eq!(count(&haystack, needle), naive_count(&haystack, needle)); +} + +#[test] +fn check_count_overflow() { + let haystack = vec![0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + let needle = 2; + assert_eq!(count(&haystack, needle), naive_count(&haystack, needle)); +} + +#[test] +fn check_count_overflow_many() { + let string = [b'x'; 20000]; + for i in 0..20000 { + assert_eq!(count(&string[..i], b'x'), i); + } +} + + + +quickcheck! { + fn check_num_chars_correct(haystack: Vec<u8>) -> bool { + num_chars(&haystack) == naive_num_chars(&haystack) + } +} + +#[test] +fn check_num_chars_large() { + let haystack = vec![0u8; if cfg!(miri) { 2_000 } else { 10_000_000 }]; + assert_eq!(naive_num_chars(&haystack), num_chars(&haystack)); + assert_eq!(naive_num_chars(&haystack), num_chars(&haystack)); +} + +#[test] +fn check_num_chars_some() { + let haystack = vec![0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68]; + assert_eq!(num_chars(&haystack), naive_num_chars(&haystack)); +} + +#[test] +fn check_num_chars_overflow() { + let haystack = vec![0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + assert_eq!(num_chars(&haystack), naive_num_chars(&haystack)); +} + +#[test] +fn check_num_chars_overflow_many() { + let string = [b'x'; 20000]; + for i in 0..20000 { + assert_eq!(num_chars(&string[..i]), i); + } +} |