use arrow2::array::*;
use arrow2::compute::arithmetics::basic::*;
use arrow2::compute::arithmetics::{ArrayCheckedRem, ArrayRem};
#[test]
#[should_panic]
fn test_rem_mismatched_length() {
let a = Int32Array::from_slice([5, 6]);
let b = Int32Array::from_slice([5]);
rem(&a, &b);
}
#[test]
fn test_rem() {
let a = Int32Array::from(&[Some(5), Some(6)]);
let b = Int32Array::from(&[Some(4), Some(4)]);
let result = rem(&a, &b);
let expected = Int32Array::from(&[Some(1), Some(2)]);
assert_eq!(result, expected);
let result = a.rem(&b);
assert_eq!(result, expected);
}
#[test]
#[should_panic]
fn test_rem_panic() {
let a = Int8Array::from(&[Some(10i8)]);
let b = Int8Array::from(&[Some(0i8)]);
let _ = rem(&a, &b);
}
#[test]
fn test_rem_checked() {
let a = Int32Array::from(&[Some(5), None, Some(3), Some(6)]);
let b = Int32Array::from(&[Some(5), Some(3), None, Some(5)]);
let result = checked_rem(&a, &b);
let expected = Int32Array::from(&[Some(0), None, None, Some(1)]);
assert_eq!(result, expected);
let a = Int32Array::from(&[Some(5), None, Some(3), Some(6)]);
let b = Int32Array::from(&[Some(5), Some(0), Some(0), Some(5)]);
let result = checked_rem(&a, &b);
let expected = Int32Array::from(&[Some(0), None, None, Some(1)]);
assert_eq!(result, expected);
let result = a.checked_rem(&b);
assert_eq!(result, expected);
}
#[test]
fn test_rem_scalar() {
let a = Int32Array::from(&[None, Some(6), None, Some(5)]);
let result = rem_scalar(&a, &2i32);
let expected = Int32Array::from(&[None, Some(0), None, Some(1)]);
assert_eq!(result, expected);
let result = a.rem(&2i32);
assert_eq!(result, expected);
let a = UInt64Array::from(&[None, Some(6), None, Some(5)]);
let result = rem_scalar(&a, &2u64);
let expected = UInt64Array::from(&[None, Some(0), None, Some(1)]);
assert_eq!(result, expected);
let a = UInt32Array::from(&[None, Some(6), None, Some(5)]);
let result = rem_scalar(&a, &2u32);
let expected = UInt32Array::from(&[None, Some(0), None, Some(1)]);
assert_eq!(result, expected);
let a = UInt16Array::from(&[None, Some(6), None, Some(5)]);
let result = rem_scalar(&a, &2u16);
let expected = UInt16Array::from(&[None, Some(0), None, Some(1)]);
assert_eq!(result, expected);
let a = UInt8Array::from(&[None, Some(6), None, Some(5)]);
let result = rem_scalar(&a, &2u8);
let expected = UInt8Array::from(&[None, Some(0), None, Some(1)]);
assert_eq!(result, expected);
}
#[test]
fn test_rem_scalar_checked() {
let a = Int32Array::from(&[None, Some(6), None, Some(7)]);
let result = checked_rem_scalar(&a, &2i32);
let expected = Int32Array::from(&[None, Some(0), None, Some(1)]);
assert_eq!(result, expected);
let a = Int32Array::from(&[None, Some(6), None, Some(6)]);
let result = checked_rem_scalar(&a, &0);
let expected = Int32Array::from(&[None, None, None, None]);
assert_eq!(result, expected);
let result = a.checked_rem(&0);
assert_eq!(result, expected);
}