alamb commented on issue #7939:
URL: https://github.com/apache/arrow-rs/issues/7939#issuecomment-3107366092
# `f64` test:
I wrote a test for f64 like this
```rust
#[test]
fn test_cast_decimal128_to_f64_overflow() {
// Test positive overflow (positive infinity)
let array = vec![Some(i128::MAX)];
let array = create_decimal128_array(array, 25, 2).unwrap();
let array = Arc::new(array) as ArrayRef;
let result = cast(&array, &DataType::Float64).unwrap();
let result = result.as_primitive::<Float64Type>();
assert!(result.value(0).is_infinite());
assert!(result.value(0) > 0.0); // Positive infinity
// Test negative overflow (negative infinity)
let array = vec![Some(i128::MIN)];
let array = create_decimal128_array(array, 25, 2).unwrap();
let array = Arc::new(array) as ArrayRef;
let result = cast(&array, &DataType::Float64).unwrap();
let result = result.as_primitive::<Float64Type>();
assert!(result.value(0).is_infinite());
assert!(result.value(0) < 0.0); // Negative infinity
}
```
And it fails like this
```rust
assertion failed: result.value(0).is_infinite()
thread 'cast::tests::test_cast_decimal128_to_f64_overflow' panicked at
arrow-cast/src/cast/mod.rs:8655:9:
assertion failed: result.value(0).is_infinite()
stack backtrace:
0: __rustc::rust_begin_unwind
at
/rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/std/src/panicking.rs:697:5
1: core::panicking::panic_fmt
at
/rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/core/src/panicking.rs:75:14
2: core::panicking::panic
at
/rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/core/src/panicking.rs:145:5
3: arrow_cast::cast::tests::test_cast_decimal128_to_f64_overflow
at ./src/cast/mod.rs:8655:9
4:
arrow_cast::cast::tests::test_cast_decimal128_to_f64_overflow::{{closure}}
at ./src/cast/mod.rs:8647:46
5: core::ops::function::FnOnce::call_once
at
/Users/andrewlamb/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/ops/function.rs:250:5
6: core::ops::function::FnOnce::call_once
at
/rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/core/src/ops/function.rs:250:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose
backtrace.
```
# `f32` test
I wrote a test for f32 like this:
```rust
#[test]
fn test_cast_decimal128_to_f32_overflow() {
// Test positive overflow (positive infinity)
let array = vec![Some(i128::MAX)];
let array = create_decimal128_array(array, 25, 2).unwrap();
let array = Arc::new(array) as ArrayRef;
let result = cast(&array, &DataType::Float32).unwrap();
let result = result.as_primitive::<Float32Type>();
assert!(result.value(0).is_infinite());
assert!(result.value(0) > 0.0); // Positive infinity
// Test negative overflow (negative infinity)
let array = vec![Some(i128::MIN)];
let array = create_decimal128_array(array, 25, 2).unwrap();
let array = Arc::new(array) as ArrayRef;
let result = cast(&array, &DataType::Float32).unwrap();
let result = result.as_primitive::<Float32Type>();
assert!(result.value(0).is_infinite());
assert!(result.value(0) < 0.0); // Negative infinity
}
```
And it fails like this
```
assertion failed: result.value(0).is_infinite()
thread 'cast::tests::test_cast_decimal128_to_f32_overflow' panicked at
arrow-cast/src/cast/mod.rs:8655:9:
assertion failed: result.value(0).is_infinite()
stack backtrace:
0: __rustc::rust_begin_unwind
at
/rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/std/src/panicking.rs:697:5
1: core::panicking::panic_fmt
at
/rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/core/src/panicking.rs:75:14
2: core::panicking::panic
at
/rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/core/src/panicking.rs:145:5
3: arrow_cast::cast::tests::test_cast_decimal128_to_f32_overflow
at ./src/cast/mod.rs:8655:9
4:
arrow_cast::cast::tests::test_cast_decimal128_to_f32_overflow::{{closure}}
at ./src/cast/mod.rs:8647:46
5: core::ops::function::FnOnce::call_once
at
/Users/andrewlamb/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/ops/function.rs:250:5
6: core::ops::function::FnOnce::call_once
at
/rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/core/src/ops/function.rs:250:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose
backtrace.
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]