use rbatis_codegen::ops::PartialOrd;
use rbs::Value;
use std::cmp::Ordering;
#[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)
);
}