diff --git a/arrow-cast/src/cast/decimal.rs b/arrow-cast/src/cast/decimal.rs index e47852a5e3cd..dad68872bdf3 100644 --- a/arrow-cast/src/cast/decimal.rs +++ b/arrow-cast/src/cast/decimal.rs @@ -590,6 +590,7 @@ where #[cfg(test)] mod tests { use super::*; + use crate::parse::parse_decimal; #[test] fn test_parse_string_to_decimal_native() -> Result<(), ArrowError> { @@ -597,17 +598,43 @@ mod tests { parse_string_to_decimal_native::("0", 0)?, 0_i128 ); + assert_eq!( + parse_decimal::("0", 38, 0)?, + parse_string_to_decimal_native::("0", 0)?, + "value is {}", + 0_i128 + ); + assert_eq!( parse_string_to_decimal_native::("0", 5)?, 0_i128 ); + assert_eq!( + parse_decimal::("0", 38, 5)?, + parse_string_to_decimal_native::("0", 5)?, + "value is {}", + 0_i128 + ); assert_eq!( parse_string_to_decimal_native::("123", 0)?, 123_i128 ); assert_eq!( + parse_decimal::("123", 38, 0)?, + parse_string_to_decimal_native::("123", 0)?, + "value is {}", + 123_i128 + ); + + assert_eq!( + parse_string_to_decimal_native::("123", 5)?, + 12300000_i128 + ); + assert_eq!( + parse_decimal::("123", 38, 5)?, parse_string_to_decimal_native::("123", 5)?, + "value is {}", 12300000_i128 ); @@ -616,16 +643,42 @@ mod tests { 123_i128 ); assert_eq!( + parse_decimal::("123.45", 38, 0)?, + parse_string_to_decimal_native::("123.45", 0)?, + "value is {}", + 123_i128 + ); + + assert_eq!( + parse_string_to_decimal_native::("123.45", 5)?, + 12345000_i128 + ); + assert_eq!( + parse_decimal::("123.45", 38, 5)?, parse_string_to_decimal_native::("123.45", 5)?, + "value is {}", 12345000_i128 ); assert_eq!( - parse_string_to_decimal_native::("123.4567891", 0)?, - 123_i128 + parse_string_to_decimal_native::("123.4567891", 5)?, + 12345679_i128 + ); + assert_eq!( + parse_decimal::("123.4567891", 38, 5)?, + parse_string_to_decimal_native::("123.4567891", 5)?, + "value is {}", + 12345679_i128 + ); + + assert_eq!( + parse_string_to_decimal_native::("123.4567891", 5)?, + 12345679_i128 ); assert_eq!( + parse_decimal::("123.4567891", 38, 5)?, parse_string_to_decimal_native::("123.4567891", 5)?, + "value is {}", 12345679_i128 ); Ok(())