use rbs::Value;
use rbatis_codegen::ops::Div;
#[test]
fn test_value_div_value() {
let result1 = Value::I32(10).op_div(&Value::I32(2));
let result2 = Value::I64(20).op_div(&Value::I64(4));
let result3 = Value::U32(30).op_div(&Value::U32(3));
let result4 = Value::U64(40).op_div(&Value::U64(5));
let result5 = Value::F32(10.0).op_div(&Value::F32(2.0));
let result6 = Value::F64(20.0).op_div(&Value::F64(4.0));
println!("Value::F32(10.0) / Value::F32(2.0) = {:?}", result5);
println!("Value::F64(20.0) / Value::F64(4.0) = {:?}", result6);
assert!(matches!(result1, Value::I32(5)));
assert!(matches!(result2, Value::I64(5)));
assert!(matches!(result3, Value::U32(10)));
assert!(matches!(result4, Value::U64(8)));
if let Value::F32(val) = result5 {
assert!((val - 5.0).abs() < 1e-10);
} else {
panic!("Expected Value::F64, got {:?}", result5);
}
if let Value::F64(val) = result6 {
assert!((val - 5.0).abs() < 1e-10);
} else {
panic!("Expected Value::F64, got {:?}", result6);
}
}
#[test]
fn test_value_div_primitive() {
let result1 = Value::I32(10).op_div(&2i32);
let result2 = Value::I64(20).op_div(&4i64);
let result3 = Value::U32(30).op_div(&3u32);
let result4 = Value::U64(40).op_div(&5u64);
let result5 = Value::F32(10.0).op_div(&2.0f32);
let result6 = Value::F64(20.0).op_div(&4.0f64);
assert_eq!(result1, 5i64);
assert_eq!(result2, 5i64);
assert_eq!(result3, 10u64);
assert_eq!(result4, 8u64);
assert_eq!(result5, 5.0f64);
assert_eq!(result6, 5.0f64);
}
#[test]
fn test_primitive_div_value() {
let result1 = 20i32.op_div(&Value::I32(4));
let result2 = 30i64.op_div(&Value::I64(6));
let result3 = 40u32.op_div(&Value::U32(8));
let result4 = 50u64.op_div(&Value::U64(10));
let result5 = 20.0f32.op_div(&Value::F32(5.0));
let result6 = 30.0f64.op_div(&Value::F64(10.0));
assert_eq!(result1, 5i64);
assert_eq!(result2, 5i64);
assert_eq!(result3, 5u64);
assert_eq!(result4, 5u64);
assert_eq!(result5, 4.0f64);
assert_eq!(result6, 3.0f64);
let reverse1 = Value::I32(20).op_div(&4i32);
let reverse2 = 5i32.op_div(&Value::I32(1));
assert_eq!(reverse1, 5i64); assert_eq!(reverse2, 5i64); }
#[test]
fn test_div_ref_variants() {
let v1 = Value::I32(10);
let v2 = Value::I32(2);
let i1 = 10i32;
let result1 = (&v1).op_div(&v2);
let result2 = v1.op_div(&&v2);
let result3 = (&i1).op_div(&v2);
let result4 = i1.op_div(&&v2);
assert!(matches!(result1, Value::I32(5)));
assert!(matches!(result2, Value::I32(5)));
assert_eq!(result3, 5i64);
assert_eq!(result4, 5i64);
}