mirror of
https://git.proxmox.com/git/rustc
synced 2025-08-13 16:40:03 +00:00
91 lines
2.4 KiB
Rust
91 lines
2.4 KiB
Rust
extern crate bytecount;
|
|
#[macro_use]
|
|
extern crate quickcheck;
|
|
extern crate rand;
|
|
|
|
use bytecount::{count, naive_count, naive_num_chars, 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);
|
|
}
|
|
}
|