1pub fn is_all_zeros(buf: &[u8]) -> bool {
2 let (prefix, aligned, suffix) = unsafe { buf.align_to::<u128>() };
3
4 prefix.iter().all(|&x| x == 0)
5 && suffix.iter().all(|&x| x == 0)
6 && aligned.iter().all(|&x| x == 0)
7}
8
9#[cfg(test)]
10mod tests {
11 use super::*;
12
13 #[test]
14 fn all_zeros_empty() {
15 assert!(is_all_zeros(&[]));
16 }
17
18 #[test]
19 fn all_zeros_true() {
20 assert!(is_all_zeros(&[0u8; 4096]));
21 }
22
23 #[test]
24 fn all_zeros_false_first_byte() {
25 let mut buf = [0u8; 4096];
26 buf[0] = 1;
27 assert!(!is_all_zeros(&buf));
28 }
29
30 #[test]
31 fn all_zeros_false_last_byte() {
32 let mut buf = [0u8; 4096];
33 buf[4095] = 1;
34 assert!(!is_all_zeros(&buf));
35 }
36
37 #[test]
38 fn all_zeros_false_middle() {
39 let mut buf = [0u8; 4096];
40 buf[2048] = 0xFF;
41 assert!(!is_all_zeros(&buf));
42 }
43
44 #[test]
45 fn all_zeros_unaligned_size() {
46 assert!(is_all_zeros(&[0u8; 7]));
47 let mut buf = [0u8; 7];
48 buf[6] = 1;
49 assert!(!is_all_zeros(&buf));
50 }
51
52 #[test]
53 fn all_zeros_single_byte() {
54 assert!(is_all_zeros(&[0u8]));
55 assert!(!is_all_zeros(&[1u8]));
56 }
57}