pub mod algorithm;
pub mod consts;
pub(crate) mod width32_ops;
#[cfg(all(
feature = "std",
any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64")
))]
pub(crate) mod fusion;
#[cfg(test)]
mod property_tests {
use crate::test::miri_compatible_proptest_config;
use crate::{checksum, CrcAlgorithm};
use proptest::prelude::*;
proptest! {
#![proptest_config(miri_compatible_proptest_config())]
#[test]
fn prop_crc32_compatibility(data in proptest::collection::vec(any::<u8>(), 0..1024)) {
use crate::test::consts::{RUST_CRC32_ISCSI, RUST_CRC32_ISO_HDLC, RUST_CRC32_BZIP2, RUST_CRC32_MPEG_2};
let our_iscsi = checksum(CrcAlgorithm::Crc32Iscsi, &data);
let ref_iscsi = RUST_CRC32_ISCSI.checksum(&data) as u64;
prop_assert_eq!(
our_iscsi, ref_iscsi,
"CRC-32/ISCSI mismatch for {} bytes: our=0x{:08X}, ref=0x{:08X}",
data.len(), our_iscsi, ref_iscsi
);
let our_hdlc = checksum(CrcAlgorithm::Crc32IsoHdlc, &data);
let ref_hdlc = RUST_CRC32_ISO_HDLC.checksum(&data) as u64;
prop_assert_eq!(
our_hdlc, ref_hdlc,
"CRC-32/ISO-HDLC mismatch for {} bytes: our=0x{:08X}, ref=0x{:08X}",
data.len(), our_hdlc, ref_hdlc
);
let our_bzip2 = checksum(CrcAlgorithm::Crc32Bzip2, &data);
let ref_bzip2 = RUST_CRC32_BZIP2.checksum(&data) as u64;
prop_assert_eq!(
our_bzip2, ref_bzip2,
"CRC-32/BZIP2 mismatch for {} bytes: our=0x{:08X}, ref=0x{:08X}",
data.len(), our_bzip2, ref_bzip2
);
let our_mpeg2 = checksum(CrcAlgorithm::Crc32Mpeg2, &data);
let ref_mpeg2 = RUST_CRC32_MPEG_2.checksum(&data) as u64;
prop_assert_eq!(
our_mpeg2, ref_mpeg2,
"CRC-32/MPEG-2 mismatch for {} bytes: our=0x{:08X}, ref=0x{:08X}",
data.len(), our_mpeg2, ref_mpeg2
);
}
}
}