1pub fn checksum(data: &[u8]) -> u8 {
2 let sum: u8 = data.iter().fold(0u8, |acc, &byte| acc.wrapping_add(byte));
3 !sum
4}
5
6#[cfg(test)]
7mod tests {
8 use super::*;
9
10 #[test]
11 fn it_works() {
12 let data = [1, 2, 3, 4];
13 let result = checksum(&data);
14 assert_eq!(result, !10u8);
16 }
17
18 #[test]
19 fn empty_array() {
20 let data = [];
21 let result = checksum(&data);
22 assert_eq!(result, !0u8);
24 }
25
26 #[test]
27 fn single_byte() {
28 let data = [255];
29 let result = checksum(&data);
30 assert_eq!(result, !255u8);
32 }
33
34 #[test]
35 fn large_array() {
36 let data = vec![1; 200]; let result = checksum(&data);
38 assert_eq!(result, !200u8);
40 }
41}