rbatis-codegen 4.9.4

The Rust SQL Toolkit and ORM Library. An async, pure Rust SQL crate featuring compile-time Dynamic SQL gen system
Documentation
use rbatis_codegen::ops::{
    Add, BitAnd, BitOr, BitShl, BitShr, BitXor, Div, Mul, PartialEq, PartialOrd, Rem, Sub,
};
use rbs::Value;
use std::cmp::Ordering;

#[test]
fn test_value_reference_matrix() {
    let left = Value::I64(8);
    let right = Value::I64(2);

    assert_eq!((&&left).op_add(&&right), Value::I64(10));
    assert_eq!((&&left).op_sub(&&right), Value::I64(6));
    assert_eq!((&&left).op_mul(&&right), Value::I64(16));
    assert_eq!((&&left).op_div(&&right), Value::I64(4));
    assert_eq!((&&left).op_rem(&&right), Value::I64(0));
    assert!(!(&&left).op_bitand(&&right));
    assert!(!(&&left).op_bitor(&&right));
    assert_eq!((&&left).op_bitxor(&&right), Value::I64(10));
    assert_eq!((&&left).op_shl(&&right), Value::I64(32));
    assert_eq!((&&left).op_shr(&&right), Value::I64(2));
}

#[test]
fn test_primitive_reference_matrix() {
    let value = Value::I64(2);

    assert_eq!((&8i64).op_add(&&value), 10i64);
    assert_eq!((&8i64).op_sub(&&value), 6i64);
    assert_eq!((&8i64).op_mul(&&value), 16i64);
    assert_eq!((&8i64).op_div(&&value), 4i64);
    assert_eq!((&8i64).op_rem(&&value), 0i64);
    assert_eq!((&8i64).op_bitand(&&value), 0i64);
    assert_eq!((&8i64).op_bitor(&&value), 10i64);
    assert_eq!((&8i64).op_bitxor(&&value), 10i64);
    assert_eq!((&8i64).op_shl(&&value), 32i64);
    assert_eq!((&8i64).op_shr(&&value), 2i64);
}

#[test]
fn test_bool_reference_matrix() {
    let left = Value::Bool(true);
    let right = Value::Bool(false);

    assert!(!(&&left).op_bitand(&&right));
    assert!((&&left).op_bitor(&&right));
    assert_eq!((&&left).op_bitxor(&&right), Value::Bool(true));
    assert!(!(&true).op_bitand(&&right));
    assert!((&true).op_bitor(&&right));
    assert!((&true).op_bitxor(&&right));
}

#[test]
fn test_comparison_matrix() {
    assert!(1isize.op_eq(&1u8));
    assert!(1.0f32.op_eq(&1i64));
    assert!(!u64::MAX.op_eq(&-1i64));
    assert_eq!(1isize.op_partial_cmp(&1u8), Some(Ordering::Equal));
    assert_eq!(1.0f32.op_partial_cmp(&1i64), Some(Ordering::Equal));
    assert_eq!(true.op_partial_cmp(&false), Some(Ordering::Greater));

    let i32_value = Value::I32(10);
    let i64_value = Value::I64(10);
    let f64_value = Value::F64(10.0);
    assert!(i32_value.op_eq(&i64_value));
    assert!(i32_value.op_eq(&f64_value));
    assert_eq!(i32_value.op_partial_cmp(&i64_value), Some(Ordering::Equal));
    assert_eq!(i32_value.op_partial_cmp(&f64_value), Some(Ordering::Equal));

    assert!(Value::I64(10).op_eq(&10u32));
    assert_eq!(Value::I64(10).op_partial_cmp(&10u32), Some(Ordering::Equal));
    assert!(!Value::I64(-1).op_eq(&u64::MAX));
    assert_eq!(
        Value::I64(-1).op_partial_cmp(&u64::MAX),
        Some(Ordering::Less)
    );
    assert!(!Value::U64(u64::MAX).op_eq(&Value::I64(-1)));
    assert_eq!(
        Value::U64(u64::MAX).op_partial_cmp(&Value::I64(-1)),
        Some(Ordering::Greater)
    );

    let precise = Value::I64(9_007_199_254_740_993);
    let rounded = Value::I64(9_007_199_254_740_992);
    assert!(!precise.op_eq(&rounded));
    assert_eq!(precise.op_partial_cmp(&rounded), Some(Ordering::Greater));

    assert!(Value::Null.op_eq(&Value::Null));
    assert!(!Value::Null.op_eq(&Value::I32(0)));
    assert_eq!(
        Value::Null.op_partial_cmp(&Value::Null),
        Some(Ordering::Equal)
    );
    assert_eq!(Value::Null.op_partial_cmp(&Value::I32(0)), None);

    let nan = Value::F64(f64::NAN);
    assert!(!nan.op_eq(&nan));
    assert_eq!(nan.op_partial_cmp(&nan), None);
}