nbcs/
lib.rs

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        // 1 + 2 + 3 + 4 = 10, 取反后为 !10 = 245
15        assert_eq!(result, !10u8);
16    }
17
18    #[test]
19    fn empty_array() {
20        let data = [];
21        let result = checksum(&data);
22        // 空数组和为0,取反后为 !0 = 255
23        assert_eq!(result, !0u8);
24    }
25
26    #[test]
27    fn single_byte() {
28        let data = [255];
29        let result = checksum(&data);
30        // 255取反后为 !255 = 0
31        assert_eq!(result, !255u8);
32    }
33
34    #[test]
35    fn large_array() {
36        let data = vec![1; 200]; // 200 个字节,每个都是 1
37        let result = checksum(&data);
38        // 200 % 256 = 200, 取反后为 !200 = 55
39        assert_eq!(result, !200u8);
40    }
41}