vortex_mask/
eq.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use crate::Mask;
5
6impl PartialEq for Mask {
7    fn eq(&self, other: &Self) -> bool {
8        if self.len() != other.len() {
9            return false;
10        }
11        if self.true_count() != other.true_count() {
12            return false;
13        }
14
15        // TODO(ngates): we could compare by indices if density is low enough
16        self.boolean_buffer() == other.boolean_buffer()
17    }
18}
19
20impl Eq for Mask {}
21
22#[cfg(test)]
23mod test {
24    use arrow_buffer::BooleanBuffer;
25
26    use crate::Mask;
27
28    #[test]
29    fn filter_mask_eq() {
30        assert_eq!(
31            Mask::new_true(5),
32            Mask::from_buffer(BooleanBuffer::new_set(5))
33        );
34        assert_eq!(
35            Mask::new_false(5),
36            Mask::from_buffer(BooleanBuffer::new_unset(5))
37        );
38        assert_eq!(
39            Mask::from_indices(5, vec![0, 2, 3]),
40            Mask::from_slices(5, vec![(0, 1), (2, 4)])
41        );
42        assert_eq!(
43            Mask::from_indices(5, vec![0, 2, 3]),
44            Mask::from_buffer(BooleanBuffer::from_iter([true, false, true, true, false]))
45        );
46    }
47}