@@ -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