use uni_common::unival;
use uni_query::query::expr_eval::eval_scalar_function;
#[test]
fn test_bitwise_or() {
let result = eval_scalar_function("uni_bitwise_or", &[unival!(12), unival!(10)], None).unwrap();
assert_eq!(result, unival!(14)); }
#[test]
fn test_bitwise_or_zero() {
let result = eval_scalar_function("uni_bitwise_or", &[unival!(5), unival!(0)], None).unwrap();
assert_eq!(result, unival!(5)); }
#[test]
fn test_bitwise_and() {
let result =
eval_scalar_function("uni_bitwise_and", &[unival!(12), unival!(10)], None).unwrap();
assert_eq!(result, unival!(8)); }
#[test]
fn test_bitwise_and_zero() {
let result = eval_scalar_function("uni_bitwise_and", &[unival!(5), unival!(0)], None).unwrap();
assert_eq!(result, unival!(0)); }
#[test]
fn test_bitwise_xor() {
let result =
eval_scalar_function("uni_bitwise_xor", &[unival!(12), unival!(10)], None).unwrap();
assert_eq!(result, unival!(6)); }
#[test]
fn test_bitwise_xor_same() {
let result = eval_scalar_function("uni_bitwise_xor", &[unival!(7), unival!(7)], None).unwrap();
assert_eq!(result, unival!(0)); }
#[test]
fn test_bitwise_not() {
let result = eval_scalar_function("uni_bitwise_not", &[unival!(5)], None).unwrap();
assert_eq!(result, unival!(-6)); }
#[test]
fn test_bitwise_not_zero() {
let result = eval_scalar_function("uni_bitwise_not", &[unival!(0)], None).unwrap();
assert_eq!(result, unival!(-1)); }
#[test]
fn test_bitwise_not_negative() {
let result = eval_scalar_function("uni_bitwise_not", &[unival!(-1)], None).unwrap();
assert_eq!(result, unival!(0)); }
#[test]
fn test_shift_left() {
let result =
eval_scalar_function("uni_bitwise_shiftLeft", &[unival!(3), unival!(2)], None).unwrap();
assert_eq!(result, unival!(12)); }
#[test]
fn test_shift_left_zero() {
let result =
eval_scalar_function("uni_bitwise_shiftLeft", &[unival!(5), unival!(0)], None).unwrap();
assert_eq!(result, unival!(5)); }
#[test]
fn test_shift_right() {
let result =
eval_scalar_function("uni_bitwise_shiftRight", &[unival!(12), unival!(2)], None).unwrap();
assert_eq!(result, unival!(3)); }
#[test]
fn test_shift_right_zero() {
let result =
eval_scalar_function("uni_bitwise_shiftRight", &[unival!(5), unival!(0)], None).unwrap();
assert_eq!(result, unival!(5)); }
#[test]
fn test_bitwise_or_wrong_arg_count() {
let result = eval_scalar_function("uni_bitwise_or", &[unival!(5)], None);
assert!(result.is_err());
assert!(
result
.unwrap_err()
.to_string()
.contains("exactly 2 arguments")
);
}
#[test]
fn test_bitwise_or_non_integer() {
let result = eval_scalar_function("uni_bitwise_or", &[unival!("5"), unival!(3)], None);
assert!(result.is_err());
assert!(result.unwrap_err().to_string().contains("integer"));
}
#[test]
fn test_bitwise_and_wrong_arg_count() {
let result = eval_scalar_function("uni_bitwise_and", &[unival!(5)], None);
assert!(result.is_err());
}
#[test]
fn test_bitwise_xor_non_integer() {
let result = eval_scalar_function("uni_bitwise_xor", &[unival!(5.5), unival!(3)], None);
assert!(result.is_err());
}
#[test]
fn test_bitwise_not_wrong_arg_count() {
let result = eval_scalar_function("uni_bitwise_not", &[unival!(5), unival!(3)], None);
assert!(result.is_err());
assert!(
result
.unwrap_err()
.to_string()
.contains("exactly 1 argument")
);
}
#[test]
fn test_shift_left_non_integer() {
let result = eval_scalar_function("uni_bitwise_shiftLeft", &[unival!(3.5), unival!(2)], None);
assert!(result.is_err());
}
#[test]
fn test_shift_right_wrong_arg_count() {
let result = eval_scalar_function("uni_bitwise_shiftRight", &[unival!(12)], None);
assert!(result.is_err());
}
#[test]
fn test_flag_manipulation() {
let base_flags = 0b0000;
let read_flag = 0b0001;
let write_flag = 0b0010;
let execute_flag = 0b0100;
let result = eval_scalar_function(
"uni_bitwise_or",
&[unival!(base_flags), unival!(read_flag)],
None,
)
.unwrap();
let result = eval_scalar_function(
"uni_bitwise_or",
&[result.clone(), unival!(write_flag)],
None,
)
.unwrap();
assert_eq!(result, unival!(0b0011));
let has_write = eval_scalar_function(
"uni_bitwise_and",
&[result.clone(), unival!(write_flag)],
None,
)
.unwrap();
assert_eq!(has_write, unival!(write_flag));
let has_execute =
eval_scalar_function("uni_bitwise_and", &[result, unival!(execute_flag)], None).unwrap();
assert_eq!(has_execute, unival!(0)); }
#[test]
fn test_bitmask() {
let value = 0b11010110;
let mask = 0b00001111;
let result =
eval_scalar_function("uni_bitwise_and", &[unival!(value), unival!(mask)], None).unwrap();
assert_eq!(result, unival!(0b00000110)); }
#[test]
fn test_power_of_two_check() {
let n = 16;
let n_minus_1 = n - 1;
let result =
eval_scalar_function("uni_bitwise_and", &[unival!(n), unival!(n_minus_1)], None).unwrap();
assert_eq!(result, unival!(0));
let n = 15;
let n_minus_1 = n - 1;
let result =
eval_scalar_function("uni_bitwise_and", &[unival!(n), unival!(n_minus_1)], None).unwrap();
assert!(result != unival!(0)); }