Skip to content

Commit 6ed525c

Browse files
committed
add tests
Signed-off-by: Matt Katz <mhkatz97@gmail.com>
1 parent 4534416 commit 6ed525c

3 files changed

Lines changed: 22 additions & 6 deletions

File tree

vortex-array/src/arrays/decimal/compute/mod.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ mod tests {
2020
use crate::compute::conformance::binary_numeric::test_binary_numeric_array;
2121
use crate::compute::conformance::consistency::test_array_consistency;
2222
use crate::dtype::DecimalDType;
23+
use crate::dtype::NativeDecimalType;
2324
use crate::validity::Validity;
2425

2526
#[rstest]
@@ -83,6 +84,14 @@ mod tests {
8384
DecimalDType::new(5, 1),
8485
Validity::NonNullable,
8586
))]
87+
#[case::decimal_widened_carry(DecimalArray::new(
88+
buffer![
89+
<i128 as NativeDecimalType>::MAX_BY_PRECISION[38],
90+
<i128 as NativeDecimalType>::MIN_BY_PRECISION[38],
91+
],
92+
DecimalDType::new(38, 0),
93+
Validity::NonNullable,
94+
))]
8695
#[case::decimal_single(DecimalArray::new(
8796
buffer![42i128],
8897
DecimalDType::new(10, 0),

vortex-array/src/compute/conformance/binary_numeric.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ use std::fmt::Debug;
2525

2626
use itertools::Itertools;
2727
use num_traits::Bounded;
28+
use num_traits::CheckedAdd;
29+
use num_traits::CheckedSub;
2830
use num_traits::Float;
2931
use num_traits::Num;
3032
use num_traits::Signed;
@@ -328,14 +330,19 @@ fn test_decimal_binary_numeric_with_scalar(
328330
let (Some(lhs), Some(rhs)) = (lhs.decimal_value(), rhs.decimal_value()) else {
329331
return Some(Scalar::null(result_dtype.clone()));
330332
};
333+
let lhs = lhs.as_i256();
334+
let rhs = rhs.as_i256();
331335
let value = match operator {
332336
NumericOperator::Add => lhs.checked_add(&rhs),
333337
NumericOperator::Sub => lhs.checked_sub(&rhs),
334338
NumericOperator::Mul | NumericOperator::Div => unreachable!(),
335339
}?;
336-
value.fits_in_precision(result_decimal_dtype).then(|| {
337-
Scalar::decimal(value, result_decimal_dtype, result_dtype.nullability())
338-
})
340+
let value = DecimalValue::try_from_i256(value, result_decimal_dtype).ok()?;
341+
Some(Scalar::decimal(
342+
value,
343+
result_decimal_dtype,
344+
result_dtype.nullability(),
345+
))
339346
})
340347
.collect();
341348

vortex-array/src/scalar_fn/fns/binary/numeric/tests.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -342,13 +342,13 @@ fn test_decimal_overflow_on_null_lane_ignored() {
342342
fn test_decimal_add_reserves_carry_digit() {
343343
let mut ctx = array_session().create_execution_ctx();
344344
let dtype = DecimalDType::new(2, 0);
345-
let lhs = DecimalArray::from_iter::<i8, _>([60], dtype).into_array();
346-
let rhs = DecimalArray::from_iter::<i8, _>([60], dtype).into_array();
345+
let lhs = DecimalArray::from_iter::<i8, _>([99], dtype).into_array();
346+
let rhs = DecimalArray::from_iter::<i8, _>([99], dtype).into_array();
347347

348348
let result = decimal_binary(lhs, rhs, Operator::Add).unwrap();
349349
assert_arrays_eq!(
350350
result,
351-
DecimalArray::from_iter::<i16, _>([120], DecimalDType::new(3, 0)),
351+
DecimalArray::from_iter::<i16, _>([198], DecimalDType::new(3, 0)),
352352
&mut ctx
353353
);
354354
}

0 commit comments

Comments
 (0)