use arrow2::array::BooleanArray;
use arrow2::compute::boolean_kleene::*;
use arrow2::scalar::BooleanScalar;
#[test]
fn and_generic() {
let lhs = BooleanArray::from(&[
None,
None,
None,
Some(false),
Some(false),
Some(false),
Some(true),
Some(true),
Some(true),
]);
let rhs = BooleanArray::from(&[
None,
Some(false),
Some(true),
None,
Some(false),
Some(true),
None,
Some(false),
Some(true),
]);
let c = and(&lhs, &rhs);
let expected = BooleanArray::from(&[
None,
Some(false),
None,
Some(false),
Some(false),
Some(false),
None,
Some(false),
Some(true),
]);
assert_eq!(c, expected);
}
#[test]
fn or_generic() {
let a = BooleanArray::from(&[
None,
None,
None,
Some(false),
Some(false),
Some(false),
Some(true),
Some(true),
Some(true),
]);
let b = BooleanArray::from(&[
None,
Some(false),
Some(true),
None,
Some(false),
Some(true),
None,
Some(false),
Some(true),
]);
let c = or(&a, &b);
let expected = BooleanArray::from(&[
None,
None,
Some(true),
None,
Some(false),
Some(true),
Some(true),
Some(true),
Some(true),
]);
assert_eq!(c, expected);
}
#[test]
fn or_right_nulls() {
let a = BooleanArray::from_slice([false, false, false, true, true, true]);
let b = BooleanArray::from(&[Some(true), Some(false), None, Some(true), Some(false), None]);
let c = or(&a, &b);
let expected = BooleanArray::from(&[
Some(true),
Some(false),
None,
Some(true),
Some(true),
Some(true),
]);
assert_eq!(c, expected);
}
#[test]
fn or_left_nulls() {
let a = BooleanArray::from(vec![
Some(true),
Some(false),
None,
Some(true),
Some(false),
None,
]);
let b = BooleanArray::from_slice([false, false, false, true, true, true]);
let c = or(&a, &b);
let expected = BooleanArray::from(vec![
Some(true),
Some(false),
None,
Some(true),
Some(true),
Some(true),
]);
assert_eq!(c, expected);
}
#[test]
fn array_and_true() {
let array = BooleanArray::from(&[Some(true), Some(false), None, Some(true), Some(false), None]);
let scalar = BooleanScalar::new(Some(true));
let result = and_scalar(&array, &scalar);
assert_eq!(result, array);
}
#[test]
fn array_and_false() {
let array = BooleanArray::from(&[Some(true), Some(false), None, Some(true), Some(false), None]);
let scalar = BooleanScalar::new(Some(false));
let result = and_scalar(&array, &scalar);
let expected = BooleanArray::from(&[
Some(false),
Some(false),
Some(false),
Some(false),
Some(false),
Some(false),
]);
assert_eq!(result, expected);
}
#[test]
fn array_and_none() {
let array = BooleanArray::from(&[Some(true), Some(false), None, Some(true), Some(false), None]);
let scalar = BooleanScalar::new(None);
let result = and_scalar(&array, &scalar);
let expected = BooleanArray::from(&[None, Some(false), None, None, Some(false), None]);
assert_eq!(result, expected);
}
#[test]
fn array_or_true() {
let array = BooleanArray::from(&[Some(true), Some(false), None, Some(true), Some(false), None]);
let scalar = BooleanScalar::new(Some(true));
let result = or_scalar(&array, &scalar);
let expected = BooleanArray::from(&[
Some(true),
Some(true),
Some(true),
Some(true),
Some(true),
Some(true),
]);
assert_eq!(result, expected);
}
#[test]
fn array_or_false() {
let array = BooleanArray::from(&[Some(true), Some(false), None, Some(true), Some(false), None]);
let scalar = BooleanScalar::new(Some(false));
let result = or_scalar(&array, &scalar);
assert_eq!(result, array);
}
#[test]
fn array_or_none() {
let array = BooleanArray::from(&[Some(true), Some(false), None, Some(true), Some(false), None]);
let scalar = BooleanScalar::new(None);
let result = or_scalar(&array, &scalar);
let expected = BooleanArray::from(&[Some(true), None, None, Some(true), None, None]);
assert_eq!(result, expected);
}
#[test]
fn array_empty() {
let array = BooleanArray::from(&[]);
assert_eq!(any(&array), Some(false));
assert_eq!(all(&array), Some(true));
}