Skip to content

Commit 7e713ce

Browse files
committed
decimal tests
Signed-off-by: Andrew Duffy <[email protected]>
1 parent d124793 commit 7e713ce

File tree

1 file changed

+173
-0
lines changed

1 file changed

+173
-0
lines changed

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

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,176 @@ impl Filter<MaskIndices<'_>> for &mut DecimalVectorMut {
3838
match_each_dvector_mut!(self, |d| { d.filter(selection) });
3939
}
4040
}
41+
42+
#[cfg(test)]
43+
mod tests {
44+
use vortex_buffer::BufferMut;
45+
use vortex_dtype::{DecimalTypeDowncast, PrecisionScale};
46+
use vortex_mask::{Mask, MaskMut};
47+
use vortex_vector::decimal::DVectorMut;
48+
use vortex_vector::{VectorMutOps, VectorOps};
49+
50+
use super::*;
51+
52+
#[test]
53+
fn test_filter_decimal_vector_with_mask() {
54+
let ps = PrecisionScale::<i32>::new(9, 2);
55+
let elements = BufferMut::from_iter([100_i32, 200, 300, 400, 500]);
56+
let validity = MaskMut::new_true(5);
57+
let vec = DecimalVector::from(DVectorMut::new(ps, elements, validity).freeze());
58+
59+
let mask = Mask::from_iter([true, false, true, false, true]);
60+
61+
let filtered = (&vec).filter(&mask);
62+
63+
assert_eq!(filtered.len(), 3);
64+
assert_eq!(filtered.validity().true_count(), 3);
65+
let d32 = filtered.into_i32();
66+
assert_eq!(d32.get(0), Some(&100));
67+
assert_eq!(d32.get(1), Some(&300));
68+
assert_eq!(d32.get(2), Some(&500));
69+
}
70+
71+
#[test]
72+
fn test_filter_decimal_vector_with_mask_indices() {
73+
let ps = PrecisionScale::<i32>::new(9, 2);
74+
let elements = BufferMut::from_iter([100_i32, 200, 300, 400, 500]);
75+
let validity = MaskMut::new_true(5);
76+
let vec = DecimalVector::from(DVectorMut::new(ps, elements, validity).freeze());
77+
78+
let indices = unsafe { MaskIndices::new_unchecked(&[0, 2, 4]) };
79+
80+
let filtered = (&vec).filter(&indices);
81+
82+
assert_eq!(filtered.len(), 3);
83+
assert_eq!(filtered.validity().true_count(), 3);
84+
let d32 = filtered.into_i32();
85+
assert_eq!(d32.get(0), Some(&100));
86+
assert_eq!(d32.get(1), Some(&300));
87+
assert_eq!(d32.get(2), Some(&500));
88+
}
89+
90+
#[test]
91+
fn test_filter_decimal_vector_with_nulls() {
92+
let ps = PrecisionScale::<i64>::new(18, 4);
93+
let elements = BufferMut::from_iter([1000_i64, 0, 3000, 4000, 0]);
94+
let mut validity = MaskMut::with_capacity(5);
95+
validity.append_n(true, 1);
96+
validity.append_n(false, 1);
97+
validity.append_n(true, 1);
98+
validity.append_n(true, 1);
99+
validity.append_n(false, 1);
100+
let vec = DecimalVector::from(DVectorMut::new(ps, elements, validity).freeze());
101+
102+
let mask = Mask::from_iter([true, true, false, true, false]);
103+
104+
let filtered = (&vec).filter(&mask);
105+
106+
assert_eq!(filtered.len(), 3);
107+
assert_eq!(filtered.validity().true_count(), 2);
108+
let d64 = filtered.into_i64();
109+
assert_eq!(d64.get(0), Some(&1000));
110+
assert_eq!(d64.get(1), None);
111+
assert_eq!(d64.get(2), Some(&4000));
112+
}
113+
114+
#[test]
115+
fn test_filter_decimal_vector_all_true() {
116+
let ps = PrecisionScale::<i32>::new(9, 2);
117+
let elements = BufferMut::from_iter([100_i32, 200, 300]);
118+
let validity = MaskMut::new_true(3);
119+
let vec = DecimalVector::from(DVectorMut::new(ps, elements, validity).freeze());
120+
121+
let mask = Mask::new_true(3);
122+
123+
let filtered = (&vec).filter(&mask);
124+
125+
assert_eq!(filtered.len(), 3);
126+
let d32 = filtered.into_i32();
127+
assert_eq!(d32.get(0), Some(&100));
128+
assert_eq!(d32.get(1), Some(&200));
129+
assert_eq!(d32.get(2), Some(&300));
130+
}
131+
132+
#[test]
133+
fn test_filter_decimal_vector_all_false() {
134+
let ps = PrecisionScale::<i32>::new(9, 2);
135+
let elements = BufferMut::from_iter([100_i32, 200, 300]);
136+
let validity = MaskMut::new_true(3);
137+
let vec = DVectorMut::new(ps, elements, validity).freeze();
138+
139+
let mask = Mask::new_false(3);
140+
141+
let filtered = (&vec).filter(&mask);
142+
143+
assert_eq!(filtered.len(), 0);
144+
}
145+
146+
#[test]
147+
fn test_filter_decimal_vector_mut_with_mask() {
148+
let ps = PrecisionScale::<i32>::new(9, 2);
149+
let elements = BufferMut::from_iter([100_i32, 200, 300, 400, 500]);
150+
let validity = MaskMut::new_true(5);
151+
let mut vec = DecimalVectorMut::from(DVectorMut::new(ps, elements, validity));
152+
153+
let mask = Mask::from_iter([true, false, true, false, true]);
154+
155+
(&mut vec).filter(&mask);
156+
157+
assert_eq!(vec.len(), 3);
158+
let frozen = vec.freeze();
159+
assert_eq!(frozen.len(), 3);
160+
assert_eq!(frozen.validity().true_count(), 3);
161+
let d32 = frozen.into_i32();
162+
assert_eq!(d32.get(0), Some(&100));
163+
assert_eq!(d32.get(1), Some(&300));
164+
assert_eq!(d32.get(2), Some(&500));
165+
}
166+
167+
#[test]
168+
fn test_filter_decimal_vector_mut_with_mask_indices() {
169+
let ps = PrecisionScale::<i32>::new(9, 2);
170+
let elements = BufferMut::from_iter([100_i32, 200, 300, 400, 500]);
171+
let validity = MaskMut::new_true(5);
172+
let mut vec = DecimalVectorMut::from(DVectorMut::new(ps, elements, validity));
173+
174+
let indices = unsafe { MaskIndices::new_unchecked(&[0, 2, 4]) };
175+
176+
(&mut vec).filter(&indices);
177+
178+
assert_eq!(vec.len(), 3);
179+
let frozen = vec.freeze();
180+
assert_eq!(frozen.len(), 3);
181+
assert_eq!(frozen.validity().true_count(), 3);
182+
let d32 = frozen.into_i32();
183+
assert_eq!(d32.get(0), Some(&100));
184+
assert_eq!(d32.get(1), Some(&300));
185+
assert_eq!(d32.get(2), Some(&500));
186+
}
187+
188+
#[test]
189+
fn test_filter_decimal_vector_mut_with_nulls() {
190+
let ps = PrecisionScale::<i64>::new(18, 4);
191+
let elements = BufferMut::from_iter([1000_i64, 0, 3000, 4000, 0]);
192+
let mut validity = MaskMut::with_capacity(5);
193+
validity.append_n(true, 1);
194+
validity.append_n(false, 1);
195+
validity.append_n(true, 1);
196+
validity.append_n(true, 1);
197+
validity.append_n(false, 1);
198+
let mut vec = DecimalVectorMut::from(DVectorMut::new(ps, elements, validity));
199+
200+
let mask = Mask::from_iter([true, true, false, true, false]);
201+
202+
(&mut vec).filter(&mask);
203+
204+
assert_eq!(vec.len(), 3);
205+
let frozen = vec.freeze();
206+
assert_eq!(frozen.len(), 3);
207+
assert_eq!(frozen.validity().true_count(), 2);
208+
let d64 = frozen.into_i64();
209+
assert_eq!(d64.get(0), Some(&1000));
210+
assert_eq!(d64.get(1), None);
211+
assert_eq!(d64.get(2), Some(&4000));
212+
}
213+
}

0 commit comments

Comments
 (0)