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