Skip to main content

hyperfile/
utils.rs

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}