1 extern crate crc; 2 3 mod crc16 { 4 use crc::{crc16, Hasher16}; 5 6 const X25_CHECK_VALUE: u16 = 0x906e; 7 const USB_CHECK_VALUE: u16 = 0xb4c8; 8 9 #[test] checksum_x25()10 fn checksum_x25() { 11 assert_eq!(crc16::checksum_x25(b"123456789"), X25_CHECK_VALUE) 12 } 13 14 #[test] checksum_usb()15 fn checksum_usb() { 16 assert_eq!(crc16::checksum_usb(b"123456789"), USB_CHECK_VALUE) 17 } 18 19 #[test] digest_x25()20 fn digest_x25() { 21 verify_checksum(crc16::X25, X25_CHECK_VALUE); 22 } 23 24 #[test] digest_usb()25 fn digest_usb() { 26 verify_checksum(crc16::USB, USB_CHECK_VALUE); 27 } 28 verify_checksum(poly: u16, check_value: u16)29 fn verify_checksum(poly: u16, check_value: u16) { 30 let mut digest = crc16::Digest::new(poly); 31 digest.write(b"123456789"); 32 assert_eq!(digest.sum16(), check_value); 33 digest.reset(); 34 for i in 1..10 { 35 digest.write(i.to_string().as_bytes()); 36 } 37 assert_eq!(digest.sum16(), check_value); 38 } 39 } 40 41 mod crc32 { 42 use crc::{crc32, Hasher32}; 43 44 const CASTAGNOLI_CHECK_VALUE: u32 = 0xe3069283; 45 const IEEE_CHECK_VALUE: u32 = 0xcbf43926; 46 const KOOPMAN_CHECK_VALUE: u32 = 0x2d3dd0ae; 47 48 #[test] checksum_castagnoli()49 fn checksum_castagnoli() { 50 assert_eq!(crc32::checksum_castagnoli(b"123456789"), CASTAGNOLI_CHECK_VALUE) 51 } 52 53 #[test] checksum_ieee()54 fn checksum_ieee() { 55 assert_eq!(crc32::checksum_ieee(b"123456789"), IEEE_CHECK_VALUE) 56 } 57 58 #[test] checksum_koopman()59 fn checksum_koopman() { 60 assert_eq!(crc32::checksum_koopman(b"123456789"), KOOPMAN_CHECK_VALUE) 61 } 62 63 #[test] digest_castagnoli()64 fn digest_castagnoli() { 65 verify_checksum(crc32::CASTAGNOLI, CASTAGNOLI_CHECK_VALUE); 66 } 67 68 #[test] digest_ieee()69 fn digest_ieee() { 70 verify_checksum(crc32::IEEE, IEEE_CHECK_VALUE); 71 } 72 73 #[test] digest_koopman()74 fn digest_koopman() { 75 verify_checksum(crc32::KOOPMAN, KOOPMAN_CHECK_VALUE); 76 } 77 verify_checksum(poly: u32, check_value: u32)78 fn verify_checksum(poly: u32, check_value: u32) { 79 let mut digest = crc32::Digest::new(poly); 80 digest.write(b"123456789"); 81 assert_eq!(digest.sum32(), check_value); 82 digest.reset(); 83 for i in 1..10 { 84 digest.write(i.to_string().as_bytes()); 85 } 86 assert_eq!(digest.sum32(), check_value); 87 } 88 } 89 90 mod crc64 { 91 use crc::{crc64, Hasher64}; 92 93 const ECMA_CHECK_VALUE: u64 = 0x995dc9bbdf1939fa; 94 const ISO_CHECK_VALUE: u64 = 0xb90956c775a41001; 95 96 #[test] checksum_ecma()97 fn checksum_ecma() { 98 assert_eq!(crc64::checksum_ecma(b"123456789"), ECMA_CHECK_VALUE) 99 } 100 101 #[test] checksum_iso()102 fn checksum_iso() { 103 assert_eq!(crc64::checksum_iso(b"123456789"), ISO_CHECK_VALUE) 104 } 105 106 #[test] digest_ecma()107 fn digest_ecma() { 108 verify_checksum(crc64::ECMA, ECMA_CHECK_VALUE); 109 } 110 111 #[test] digest_iso()112 fn digest_iso() { 113 verify_checksum(crc64::ISO, ISO_CHECK_VALUE); 114 } 115 verify_checksum(poly: u64, check_value: u64)116 fn verify_checksum(poly: u64, check_value: u64) { 117 let mut digest = crc64::Digest::new(poly); 118 digest.write(b"123456789"); 119 assert_eq!(digest.sum64(), check_value); 120 digest.reset(); 121 for i in 1..10 { 122 digest.write(i.to_string().as_bytes()); 123 } 124 assert_eq!(digest.sum64(), check_value); 125 } 126 } 127