use rand::Rng;
use z_serial::CRC32;
const MAX_ITERATIONS: usize = 4096;
#[test]
fn check_same_crc() {
let mut rng = rand::thread_rng();
let crc = CRC32::default();
for _ in 0..MAX_ITERATIONS {
let data_size = rng.gen_range(100..1000);
let data: Vec<u8> = (0..data_size)
.map(|_| rng.gen_range(0u8..u8::MAX))
.collect();
assert_eq!(crc.compute_crc32(&data), crc.compute_crc32(&(data.clone())))
}
}
#[test]
fn check_different_crc() {
let mut rng = rand::thread_rng();
let crc = CRC32::default();
for _ in 0..MAX_ITERATIONS {
let data_one_size = rng.gen_range(100..1000);
let data_two_size = rng.gen_range(100..1000);
let data_one: Vec<u8> = (0..data_one_size)
.map(|_| rng.gen_range(0u8..u8::MAX))
.collect();
let data_two: Vec<u8> = (0..data_two_size)
.map(|_| rng.gen_range(0u8..u8::MAX))
.collect();
assert_ne!(crc.compute_crc32(&data_one), crc.compute_crc32(&data_two))
}
}
#[test]
fn check_different_bitflips_crc() {
let mut rng = rand::thread_rng();
let crc = CRC32::default();
for _ in 0..MAX_ITERATIONS {
let data_size = rng.gen_range(100..1000);
let data: Vec<u8> = (0..data_size)
.map(|_| rng.gen_range(0u8..u8::MAX))
.collect();
let mut bitflipped = data.clone();
for _ in 0..5 {
let index = rng.gen_range(0..data_size);
bitflipped[index] = !bitflipped[index];
}
assert_ne!(data, bitflipped);
assert_ne!(crc.compute_crc32(&data), crc.compute_crc32(&bitflipped))
}
}
#[test]
fn check_emtpy_crc() {
let crc = CRC32::default();
let data: Vec<u8> = vec![];
assert_eq!(crc.compute_crc32(&data), crc.compute_crc32(&(data.clone())))
}