vortex_mask/
eq.rs

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