use std::cmp::Ordering;
use rbs::Value;
use rbatis_codegen::ops::PartialOrd;
#[test]
fn test_value_cmp_value() {
assert_eq!(Value::Null.op_partial_cmp(&Value::Null), Some(Ordering::Equal));
assert_eq!(Value::Bool(true).op_partial_cmp(&Value::Bool(true)), Some(Ordering::Equal));
assert_eq!(Value::Bool(true).op_partial_cmp(&Value::Bool(false)), Some(Ordering::Greater));
assert_eq!(Value::Bool(false).op_partial_cmp(&Value::Bool(true)), Some(Ordering::Less));
assert_eq!(Value::I32(10).op_partial_cmp(&Value::I32(10)), Some(Ordering::Equal));
assert_eq!(Value::I32(20).op_partial_cmp(&Value::I32(10)), Some(Ordering::Greater));
assert_eq!(Value::I32(10).op_partial_cmp(&Value::I32(20)), Some(Ordering::Less));
assert_eq!(Value::I64(10).op_partial_cmp(&Value::I64(10)), Some(Ordering::Equal));
assert_eq!(Value::I64(20).op_partial_cmp(&Value::I64(10)), Some(Ordering::Greater));
assert_eq!(Value::I64(10).op_partial_cmp(&Value::I64(20)), Some(Ordering::Less));
assert_eq!(Value::U32(10).op_partial_cmp(&Value::U32(10)), Some(Ordering::Equal));
assert_eq!(Value::U32(20).op_partial_cmp(&Value::U32(10)), Some(Ordering::Greater));
assert_eq!(Value::U32(10).op_partial_cmp(&Value::U32(20)), Some(Ordering::Less));
assert_eq!(Value::U64(10).op_partial_cmp(&Value::U64(10)), Some(Ordering::Equal));
assert_eq!(Value::U64(20).op_partial_cmp(&Value::U64(10)), Some(Ordering::Greater));
assert_eq!(Value::U64(10).op_partial_cmp(&Value::U64(20)), Some(Ordering::Less));
assert_eq!(Value::F32(10.0).op_partial_cmp(&Value::F32(10.0)), Some(Ordering::Equal));
assert_eq!(Value::F32(20.0).op_partial_cmp(&Value::F32(10.0)), Some(Ordering::Greater));
assert_eq!(Value::F32(10.0).op_partial_cmp(&Value::F32(20.0)), Some(Ordering::Less));
assert_eq!(Value::F64(10.0).op_partial_cmp(&Value::F64(10.0)), Some(Ordering::Equal));
assert_eq!(Value::F64(20.0).op_partial_cmp(&Value::F64(10.0)), Some(Ordering::Greater));
assert_eq!(Value::F64(10.0).op_partial_cmp(&Value::F64(20.0)), Some(Ordering::Less));
assert_eq!(Value::String("a".to_string()).op_partial_cmp(&Value::String("a".to_string())), Some(Ordering::Equal));
assert_eq!(Value::String("b".to_string()).op_partial_cmp(&Value::String("a".to_string())), Some(Ordering::Greater));
assert_eq!(Value::String("a".to_string()).op_partial_cmp(&Value::String("b".to_string())), Some(Ordering::Less));
assert_eq!(Value::I32(10).op_partial_cmp(&Value::I64(10)), Some(Ordering::Equal));
assert_eq!(Value::I32(10).op_partial_cmp(&Value::F64(10.0)), Some(Ordering::Equal));
assert_eq!(Value::U32(10).op_partial_cmp(&Value::I64(10)), Some(Ordering::Equal));
}
#[test]
fn test_value_cmp_primitive() {
assert_eq!(Value::U64(10).op_partial_cmp(&10u64), Some(Ordering::Equal));
assert_eq!(Value::U64(20).op_partial_cmp(&10u64), Some(Ordering::Greater));
assert_eq!(Value::U64(10).op_partial_cmp(&20u64), Some(Ordering::Less));
assert_eq!(Value::I64(10).op_partial_cmp(&10i64), Some(Ordering::Equal));
assert_eq!(Value::I64(20).op_partial_cmp(&10i64), Some(Ordering::Greater));
assert_eq!(Value::I64(10).op_partial_cmp(&20i64), Some(Ordering::Less));
assert_eq!(Value::F64(10.0).op_partial_cmp(&10.0f64), Some(Ordering::Equal));
assert_eq!(Value::F64(20.0).op_partial_cmp(&10.0f64), Some(Ordering::Greater));
assert_eq!(Value::F64(10.0).op_partial_cmp(&20.0f64), Some(Ordering::Less));
assert_eq!(Value::Bool(true).op_partial_cmp(&true), Some(Ordering::Equal));
assert_eq!(Value::Bool(true).op_partial_cmp(&false), Some(Ordering::Greater));
assert_eq!(Value::Bool(false).op_partial_cmp(&true), Some(Ordering::Less));
assert_eq!(Value::String("a".to_string()).op_partial_cmp(&"a"), Some(Ordering::Equal));
assert_eq!(Value::String("b".to_string()).op_partial_cmp(&"a"), Some(Ordering::Greater));
assert_eq!(Value::String("a".to_string()).op_partial_cmp(&"b"), Some(Ordering::Less));
}
#[test]
fn test_primitive_cmp_value() {
println!("{:?}",20i64.op_partial_cmp(&10i64));
assert_eq!(10u64.op_partial_cmp(&Value::U64(10)), Some(Ordering::Equal));
assert_eq!(20u64.op_partial_cmp(&Value::U64(10)), Some(Ordering::Greater));
assert_eq!(10u64.op_partial_cmp(&Value::U64(20)), Some(Ordering::Less));
assert_eq!(10i64.op_partial_cmp(&Value::I64(10)), Some(Ordering::Equal));
assert_eq!(20i64.op_partial_cmp(&Value::I64(10)), Some(Ordering::Greater));
assert_eq!(10i64.op_partial_cmp(&Value::I64(20)), Some(Ordering::Less));
assert_eq!(10.0f64.op_partial_cmp(&Value::F64(10.0)), Some(Ordering::Equal));
assert_eq!(20.0f64.op_partial_cmp(&Value::F64(10.0)), Some(Ordering::Greater));
assert_eq!(10.0f64.op_partial_cmp(&Value::F64(20.0)), Some(Ordering::Less));
assert_eq!(true.op_partial_cmp(&Value::Bool(true)), Some(Ordering::Equal));
assert_eq!(true.op_partial_cmp(&Value::Bool(false)), Some(Ordering::Greater));
assert_eq!(false.op_partial_cmp(&Value::Bool(true)), Some(Ordering::Less));
assert_eq!(false.op_partial_cmp(&Value::Bool(false)), Some(Ordering::Equal));
assert_eq!("a".op_partial_cmp(&Value::String("a".to_string())), Some(Ordering::Equal));
assert_eq!("b".op_partial_cmp(&Value::String("a".to_string())), Some(Ordering::Greater));
assert_eq!("a".op_partial_cmp(&Value::String("b".to_string())), Some(Ordering::Less));
}
#[test]
fn test_string_cmp() {
assert_eq!("a".to_string().op_partial_cmp(&"a"), Some(Ordering::Equal));
assert_eq!("b".to_string().op_partial_cmp(&"a"), Some(Ordering::Greater));
assert_eq!("a".to_string().op_partial_cmp(&"b"), Some(Ordering::Less));
assert_eq!("a".to_string().op_partial_cmp(&"a".to_string()), Some(Ordering::Equal));
assert_eq!("b".to_string().op_partial_cmp(&"a".to_string()), Some(Ordering::Greater));
assert_eq!("a".to_string().op_partial_cmp(&"b".to_string()), Some(Ordering::Less));
let a_string = "a".to_string();
let b_string = "b".to_string();
assert_eq!((&a_string).op_partial_cmp(&"a"), Some(Ordering::Equal));
assert_eq!((&b_string).op_partial_cmp(&"a"), Some(Ordering::Greater));
assert_eq!((&a_string).op_partial_cmp(&"b"), Some(Ordering::Less));
assert_eq!((&a_string).op_partial_cmp(&"a".to_string()), Some(Ordering::Equal));
assert_eq!((&b_string).op_partial_cmp(&"a".to_string()), Some(Ordering::Greater));
assert_eq!((&a_string).op_partial_cmp(&"b".to_string()), Some(Ordering::Less));
assert_eq!((&a_string).op_partial_cmp(&&a_string), Some(Ordering::Equal));
assert_eq!((&b_string).op_partial_cmp(&&a_string), Some(Ordering::Greater));
assert_eq!((&a_string).op_partial_cmp(&&b_string), Some(Ordering::Less));
}
#[test]
fn test_numeric_cmp() {
assert_eq!(10u8.op_partial_cmp(&10u8), Some(Ordering::Equal));
assert_eq!(10u16.op_partial_cmp(&10u16), Some(Ordering::Equal));
assert_eq!(10u32.op_partial_cmp(&10u32), Some(Ordering::Equal));
assert_eq!(10u64.op_partial_cmp(&10u64), Some(Ordering::Equal));
assert_eq!(10i8.op_partial_cmp(&10i8), Some(Ordering::Equal));
assert_eq!(10i16.op_partial_cmp(&10i16), Some(Ordering::Equal));
assert_eq!(10i32.op_partial_cmp(&10i32), Some(Ordering::Equal));
assert_eq!(10i64.op_partial_cmp(&10i64), Some(Ordering::Equal));
assert_eq!(10isize.op_partial_cmp(&10isize), Some(Ordering::Equal));
assert_eq!(10usize.op_partial_cmp(&10usize), Some(Ordering::Equal));
assert_eq!(10.0f32.op_partial_cmp(&10.0f32), Some(Ordering::Equal));
assert_eq!(10.0f64.op_partial_cmp(&10.0f64), Some(Ordering::Equal));
}
#[test]
fn test_cross_type_cmp() {
let i64_val = 10i64;
let i64_ref = &i64_val;
assert_eq!(i64_ref.op_partial_cmp(&10.0f64), Some(Ordering::Equal));
assert_eq!(i64_ref.op_partial_cmp(&10u64), Some(Ordering::Equal));
let u64_val = 10u64;
let u64_ref = &u64_val;
assert_eq!(u64_ref.op_partial_cmp(&10i64), Some(Ordering::Equal));
assert_eq!(u64_ref.op_partial_cmp(&10.0f64), Some(Ordering::Equal));
let f64_val = 10.0f64;
let f64_ref = &f64_val;
assert_eq!(f64_ref.op_partial_cmp(&10i64), Some(Ordering::Equal));
assert_eq!(f64_ref.op_partial_cmp(&10u64), Some(Ordering::Equal));
}
#[test]
fn test_reference_variants() {
let val_i64 = 10i64;
let val_u64 = 10u64;
let val_f64 = 10.0f64;
let val_bool = true;
let val_str = "test";
let val_string = "test".to_string();
let value = Value::I64(10);
assert_eq!(Value::I64(10).op_partial_cmp(&val_i64), Some(Ordering::Equal));
assert_eq!(Value::U64(10).op_partial_cmp(&val_u64), Some(Ordering::Equal));
assert_eq!(Value::F64(10.0).op_partial_cmp(&val_f64), Some(Ordering::Equal));
assert_eq!(Value::Bool(true).op_partial_cmp(&val_bool), Some(Ordering::Equal));
assert_eq!(Value::String("test".to_string()).op_partial_cmp(&val_str), Some(Ordering::Equal));
assert_eq!(Value::I64(10).op_partial_cmp(&&val_i64), Some(Ordering::Equal));
assert_eq!(Value::U64(10).op_partial_cmp(&&val_u64), Some(Ordering::Equal));
assert_eq!(Value::F64(10.0).op_partial_cmp(&&val_f64), Some(Ordering::Equal));
assert_eq!(Value::Bool(true).op_partial_cmp(&&val_bool), Some(Ordering::Equal));
assert_eq!(Value::String("test".to_string()).op_partial_cmp(&&val_str), Some(Ordering::Equal));
assert_eq!((&value).op_partial_cmp(&val_i64), Some(Ordering::Equal));
assert_eq!((&value).op_partial_cmp(&&val_i64), Some(Ordering::Equal));
assert_eq!(val_i64.op_partial_cmp(&value), Some(Ordering::Equal));
assert_eq!(val_u64.op_partial_cmp(&Value::U64(10)), Some(Ordering::Equal));
assert_eq!(val_f64.op_partial_cmp(&Value::F64(10.0)), Some(Ordering::Equal));
assert_eq!(val_bool.op_partial_cmp(&Value::Bool(true)), Some(Ordering::Equal));
assert_eq!(val_str.op_partial_cmp(&Value::String("test".to_string())), Some(Ordering::Equal));
assert_eq!(val_i64.op_partial_cmp(&&value), Some(Ordering::Equal));
assert_eq!((&val_i64).op_partial_cmp(&value), Some(Ordering::Equal));
assert_eq!((&val_i64).op_partial_cmp(&&value), Some(Ordering::Equal));
assert_eq!(val_string.op_partial_cmp(&val_str), Some(Ordering::Equal));
assert_eq!(val_string.op_partial_cmp(&"test".to_string()), Some(Ordering::Equal));
assert_eq!((&val_string).op_partial_cmp(&val_str), Some(Ordering::Equal));
assert_eq!((&val_string).op_partial_cmp(&val_string), Some(Ordering::Equal));
assert_eq!((&val_string).op_partial_cmp(&&val_string), Some(Ordering::Equal));
assert_eq!((&&val_string).op_partial_cmp(&val_string), Some(Ordering::Equal));
assert_eq!((&&val_string).op_partial_cmp(&&val_string), Some(Ordering::Equal));
}
#[test]
fn test_bool_comparison() {
let result = false.op_partial_cmp(&Value::Bool(true));
println!("false.op_partial_cmp(&Value::Bool(true)) = {:?}", result);
let result2 = Value::Bool(true).op_partial_cmp(&false);
println!("Value::Bool(true).op_partial_cmp(&false) = {:?}", result2);
}
#[test]
fn test_primitive_cmp_value_debug() {
println!("true.op_partial_cmp(&Value::Bool(true)) = {:?}", true.op_partial_cmp(&Value::Bool(true)));
println!("true.op_partial_cmp(&Value::Bool(false)) = {:?}", true.op_partial_cmp(&Value::Bool(false)));
println!("false.op_partial_cmp(&Value::Bool(true)) = {:?}", false.op_partial_cmp(&Value::Bool(true)));
println!("false.op_partial_cmp(&Value::Bool(false)) = {:?}", false.op_partial_cmp(&Value::Bool(false)));
}
#[test]
fn test_number_cmp_value_debug() {
println!("10i64.op_partial_cmp(&Value::I64(10)) = {:?}", 10i64.op_partial_cmp(&Value::I64(10)));
println!("20i64.op_partial_cmp(&Value::I64(10)) = {:?}", 20i64.op_partial_cmp(&Value::I64(10)));
println!("10i64.op_partial_cmp(&Value::I64(20)) = {:?}", 10i64.op_partial_cmp(&Value::I64(20)));
println!("10u64.op_partial_cmp(&Value::U64(10)) = {:?}", 10u64.op_partial_cmp(&Value::U64(10)));
println!("20u64.op_partial_cmp(&Value::U64(10)) = {:?}", 20u64.op_partial_cmp(&Value::U64(10)));
println!("10u64.op_partial_cmp(&Value::U64(20)) = {:?}", 10u64.op_partial_cmp(&Value::U64(20)));
println!("10.0f64.op_partial_cmp(&Value::F64(10.0)) = {:?}", 10.0f64.op_partial_cmp(&Value::F64(10.0)));
println!("20.0f64.op_partial_cmp(&Value::F64(10.0)) = {:?}", 20.0f64.op_partial_cmp(&Value::F64(10.0)));
println!("10.0f64.op_partial_cmp(&Value::F64(20.0)) = {:?}", 10.0f64.op_partial_cmp(&Value::F64(20.0)));
}
#[test]
fn test_string_cmp_value_debug() {
println!("\"a\".op_partial_cmp(&Value::String(\"a\".to_string())) = {:?}", "a".op_partial_cmp(&Value::String("a".to_string())));
println!("\"b\".op_partial_cmp(&Value::String(\"a\".to_string())) = {:?}", "b".op_partial_cmp(&Value::String("a".to_string())));
println!("\"a\".op_partial_cmp(&Value::String(\"b\".to_string())) = {:?}", "a".op_partial_cmp(&Value::String("b".to_string())));
}
#[test]
fn test_bool_value_comparison_comprehensive() {
assert_eq!(Value::Bool(true).op_partial_cmp(&true), Some(Ordering::Equal));
assert_eq!(Value::Bool(true).op_partial_cmp(&false), Some(Ordering::Greater));
assert_eq!(Value::Bool(false).op_partial_cmp(&true), Some(Ordering::Less));
assert_eq!(Value::Bool(false).op_partial_cmp(&false), Some(Ordering::Equal));
assert_eq!(true.op_partial_cmp(&Value::Bool(true)), Some(Ordering::Equal));
assert_eq!(true.op_partial_cmp(&Value::Bool(false)), Some(Ordering::Greater));
assert_eq!(false.op_partial_cmp(&Value::Bool(true)), Some(Ordering::Less));
assert_eq!(false.op_partial_cmp(&Value::Bool(false)), Some(Ordering::Equal));
let true_value = Value::Bool(true);
let false_value = Value::Bool(false);
assert_eq!((&true_value).op_partial_cmp(&true), Some(Ordering::Equal));
assert_eq!((&true_value).op_partial_cmp(&false), Some(Ordering::Greater));
assert_eq!((&false_value).op_partial_cmp(&true), Some(Ordering::Less));
assert_eq!((&false_value).op_partial_cmp(&false), Some(Ordering::Equal));
assert_eq!(true.op_partial_cmp(&&true_value), Some(Ordering::Equal));
assert_eq!(true.op_partial_cmp(&&false_value), Some(Ordering::Greater));
assert_eq!(false.op_partial_cmp(&&true_value), Some(Ordering::Less));
assert_eq!(false.op_partial_cmp(&&false_value), Some(Ordering::Equal));
let true_bool = true;
let false_bool = false;
assert_eq!((&true_bool).op_partial_cmp(&true_value), Some(Ordering::Equal));
assert_eq!((&true_bool).op_partial_cmp(&false_value), Some(Ordering::Greater));
assert_eq!((&false_bool).op_partial_cmp(&true_value), Some(Ordering::Less));
assert_eq!((&false_bool).op_partial_cmp(&false_value), Some(Ordering::Equal));
assert_eq!((&true_bool).op_partial_cmp(&&true_value), Some(Ordering::Equal));
assert_eq!((&true_bool).op_partial_cmp(&&false_value), Some(Ordering::Greater));
assert_eq!((&false_bool).op_partial_cmp(&&true_value), Some(Ordering::Less));
assert_eq!((&false_bool).op_partial_cmp(&&false_value), Some(Ordering::Equal));
}