Skip to content

Commit d124793

Browse files
committed
tests for BinaryViewVector filter
Signed-off-by: Andrew Duffy <[email protected]>
1 parent d02084c commit d124793

File tree

1 file changed

+172
-0
lines changed

1 file changed

+172
-0
lines changed

vortex-compute/src/filter/vector/binaryview.rs

Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,175 @@ where
4242
}
4343
}
4444
}
45+
46+
#[cfg(test)]
47+
mod tests {
48+
use vortex_mask::Mask;
49+
use vortex_vector::binaryview::StringVectorMut;
50+
use vortex_vector::{VectorMutOps, VectorOps};
51+
52+
use super::*;
53+
use crate::filter::MaskIndices;
54+
55+
#[test]
56+
fn test_filter_binary_view_vector_with_mask() {
57+
let mut vec = StringVectorMut::with_capacity(5);
58+
vec.append_values("hello", 1);
59+
vec.append_values("world", 1);
60+
vec.append_values("foo", 1);
61+
vec.append_values("bar", 1);
62+
vec.append_values("baz", 1);
63+
let vec = vec.freeze();
64+
65+
let mask = Mask::from_iter([true, false, true, false, true]);
66+
67+
let filtered = (&vec).filter(&mask);
68+
69+
assert_eq!(filtered.len(), 3);
70+
assert_eq!(filtered.validity().true_count(), 3);
71+
assert_eq!(filtered.get_ref(0), Some("hello"));
72+
assert_eq!(filtered.get_ref(1), Some("foo"));
73+
assert_eq!(filtered.get_ref(2), Some("baz"));
74+
}
75+
76+
#[test]
77+
fn test_filter_binary_view_vector_with_mask_indices() {
78+
let mut vec = StringVectorMut::with_capacity(5);
79+
vec.append_values("hello", 1);
80+
vec.append_values("world", 1);
81+
vec.append_values("foo", 1);
82+
vec.append_values("bar", 1);
83+
vec.append_values("baz", 1);
84+
let vec = vec.freeze();
85+
86+
let indices = unsafe { MaskIndices::new_unchecked(&[0, 2, 4]) };
87+
88+
let filtered = (&vec).filter(&indices);
89+
90+
assert_eq!(filtered.len(), 3);
91+
assert_eq!(filtered.validity().true_count(), 3);
92+
assert_eq!(filtered.get_ref(0), Some("hello"));
93+
assert_eq!(filtered.get_ref(1), Some("foo"));
94+
assert_eq!(filtered.get_ref(2), Some("baz"));
95+
}
96+
97+
#[test]
98+
fn test_filter_binary_view_vector_with_nulls() {
99+
let mut vec = StringVectorMut::with_capacity(5);
100+
vec.append_values("hello", 1);
101+
vec.append_nulls(1);
102+
vec.append_values("foo", 1);
103+
vec.append_values("bar", 1);
104+
vec.append_nulls(1);
105+
let vec = vec.freeze();
106+
107+
let mask = Mask::from_iter([true, true, false, true, false]);
108+
109+
let filtered = (&vec).filter(&mask);
110+
111+
assert_eq!(filtered.len(), 3);
112+
assert_eq!(filtered.validity().true_count(), 2);
113+
assert_eq!(filtered.get_ref(0), Some("hello"));
114+
assert_eq!(filtered.get_ref(1), None);
115+
assert_eq!(filtered.get_ref(2), Some("bar"));
116+
}
117+
118+
#[test]
119+
fn test_filter_binary_view_vector_all_true() {
120+
let mut vec = StringVectorMut::with_capacity(3);
121+
vec.append_values("hello", 1);
122+
vec.append_values("world", 1);
123+
vec.append_values("foo", 1);
124+
let vec = vec.freeze();
125+
126+
let mask = Mask::new_true(3);
127+
128+
let filtered = (&vec).filter(&mask);
129+
130+
assert_eq!(filtered.len(), 3);
131+
assert_eq!(filtered.get_ref(0), Some("hello"));
132+
assert_eq!(filtered.get_ref(1), Some("world"));
133+
assert_eq!(filtered.get_ref(2), Some("foo"));
134+
}
135+
136+
#[test]
137+
fn test_filter_binary_view_vector_all_false() {
138+
let mut vec = StringVectorMut::with_capacity(3);
139+
vec.append_values("hello", 1);
140+
vec.append_values("world", 1);
141+
vec.append_values("foo", 1);
142+
let vec = vec.freeze();
143+
144+
let mask = Mask::new_false(3);
145+
146+
let filtered = (&vec).filter(&mask);
147+
148+
assert_eq!(filtered.len(), 0);
149+
}
150+
151+
#[test]
152+
fn test_filter_binary_view_vector_mut_with_mask() {
153+
let mut vec = StringVectorMut::with_capacity(5);
154+
vec.append_values("hello", 1);
155+
vec.append_values("world", 1);
156+
vec.append_values("foo", 1);
157+
vec.append_values("bar", 1);
158+
vec.append_values("baz", 1);
159+
160+
let mask = Mask::from_iter([true, false, true, false, true]);
161+
162+
(&mut vec).filter(&mask);
163+
164+
assert_eq!(vec.len(), 3);
165+
let frozen = vec.freeze();
166+
assert_eq!(frozen.len(), 3);
167+
assert_eq!(frozen.validity().true_count(), 3);
168+
assert_eq!(frozen.get_ref(0), Some("hello"));
169+
assert_eq!(frozen.get_ref(1), Some("foo"));
170+
assert_eq!(frozen.get_ref(2), Some("baz"));
171+
}
172+
173+
#[test]
174+
fn test_filter_binary_view_vector_mut_with_mask_indices() {
175+
let mut vec = StringVectorMut::with_capacity(5);
176+
vec.append_values("hello", 1);
177+
vec.append_values("world", 1);
178+
vec.append_values("foo", 1);
179+
vec.append_values("bar", 1);
180+
vec.append_values("baz", 1);
181+
182+
let indices = unsafe { MaskIndices::new_unchecked(&[0, 2, 4]) };
183+
184+
(&mut vec).filter(&indices);
185+
186+
assert_eq!(vec.len(), 3);
187+
let frozen = vec.freeze();
188+
assert_eq!(frozen.len(), 3);
189+
assert_eq!(frozen.validity().true_count(), 3);
190+
assert_eq!(frozen.get_ref(0), Some("hello"));
191+
assert_eq!(frozen.get_ref(1), Some("foo"));
192+
assert_eq!(frozen.get_ref(2), Some("baz"));
193+
}
194+
195+
#[test]
196+
fn test_filter_binary_view_vector_mut_with_nulls() {
197+
let mut vec = StringVectorMut::with_capacity(5);
198+
vec.append_values("hello", 1);
199+
vec.append_nulls(1);
200+
vec.append_values("foo", 1);
201+
vec.append_values("bar", 1);
202+
vec.append_nulls(1);
203+
204+
let mask = Mask::from_iter([true, true, false, true, false]);
205+
206+
(&mut vec).filter(&mask);
207+
208+
assert_eq!(vec.len(), 3);
209+
let frozen = vec.freeze();
210+
assert_eq!(frozen.len(), 3);
211+
assert_eq!(frozen.validity().true_count(), 2);
212+
assert_eq!(frozen.get_ref(0), Some("hello"));
213+
assert_eq!(frozen.get_ref(1), None);
214+
assert_eq!(frozen.get_ref(2), Some("bar"));
215+
}
216+
}

0 commit comments

Comments
 (0)