use crcany::crc::{Crc, FromSpec};
use crcany::model::{BitwiseModel, BytewiseModel, WordwiseModel};
use crcany::spec::Spec;
const ALL_CRCS: &str = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/allcrcs.txt"));
fn main() {
let all_specs: Vec<Spec> = ALL_CRCS
.lines()
.map(|line| line.parse())
.collect::<Result<Vec<_>, _>>()
.unwrap();
let mut good_bits = 0;
let mut good_bytes = 0;
let mut good_words = 0;
let total = all_specs.len();
for spec in all_specs {
let bitly = BitwiseModel::from_spec(spec.clone());
let start = bitly.crc(0, b"".iter().cloned());
let crc = bitly.crc(start, b"123456789".iter().cloned());
if spec.check != crc {
println!(
"Error on CRC {} (bitwise), expected {:#06x}, got {:#06x}",
spec.name, spec.check, crc
);
} else {
good_bits += 1;
}
let bytely = BytewiseModel::from_spec(spec.clone());
let start = bytely.crc(0, b"".iter().cloned());
let crc = bytely.crc(start, b"123456789".iter().cloned());
if spec.check != crc {
println!(
"Error on CRC {} (bytewise), expected {:#06x}, got {:#06x}",
spec.name, spec.check, crc
);
} else {
good_bytes += 1;
}
let wordly = WordwiseModel::from_spec(spec.clone());
let start = wordly.crc(0, b"".iter().cloned());
let crc = wordly.crc(start, b"123456789".iter().cloned());
if spec.check != crc {
println!(
"Error on CRC {} (wordwise), expected {:#06x}, got {:#06x}",
spec.name, spec.check, crc
);
} else {
good_words += 1;
}
}
println!("Passed bitwise: {}/{}", good_bits, total);
println!("Passed bytewise: {}/{}", good_bytes, total);
println!("Passed wordwise: {}/{}", good_words, total);
}