pub fn checksum(data: &[u8]) -> u16 {
let sum: u16 = data.iter().fold(0u16, |acc, &byte| acc.wrapping_add(byte as u16));
!sum
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let data = [1, 2, 3, 4];
let result = checksum(&data);
assert_eq!(result, !10u16);
}
#[test]
fn empty_array() {
let data = [];
let result = checksum(&data);
assert_eq!(result, !0u16);
}
#[test]
fn single_byte() {
let data = [255];
let result = checksum(&data);
assert_eq!(result, !255u16);
}
#[test]
fn large_array() {
let data = vec![1; 200]; let result = checksum(&data);
assert_eq!(result, !200u16);
}
}