#![cfg(test)]
mod builder_tests {
use std::ops::Bound;
use common_range_tools::{
DefaultValues, GetBeginEnd, Mrs,
builder::{AnyIncDecCpCmp, CpCmp, IncDecCpCmp, NumberIncDecCpCmp},
};
#[test]
fn vaild_constaint_tests_i32() {
let mut t = NumberIncDecCpCmp::defaults();
assert!(!t.is_invalid_set(&1, &2));
assert!(t.is_invalid_set(&2, &1));
t.set_max(1);
assert!(t.is_invalid_set(&1, &2));
assert!(!t.is_invalid_set(&1, &1));
t.set_min(0);
assert!(t.is_invalid_set(&-1, &1));
assert!(!t.is_invalid_set(&0, &1));
assert_eq!(t.cp_v(&1), 1);
}
#[test]
fn value_inc_dec_cmp_tests() {
let mut t: AnyIncDecCpCmp<i32> = AnyIncDecCpCmp::new(i32::MIN, i32::MAX);
assert!(t.lt(&1, &2));
matches!(t.inc(&1, &1), Some(2));
matches!(t.inc(&1, &0), None);
matches!(t.dec(&1, &1), Some(0));
matches!(t.inc(&1, &0), None);
assert_eq!(t.max(), i32::MAX);
assert_eq!(t.min(), i32::MIN);
assert_eq!(t.max_ref(), &i32::MAX);
assert_eq!(t.min_ref(), &i32::MIN);
t.set_max(3);
assert_eq!(t.max_ref(), &3);
t.set_min(0);
assert_eq!(t.min_ref(), &0);
assert_eq!(t.cp(&1), 1);
}
#[test]
fn vaild_constaint_tests_u8() {
let mut t = NumberIncDecCpCmp::defaults();
assert!(!t.is_invalid_set(&1_u8, &2));
assert!(t.is_invalid_set(&2, &1));
t.set_max(1);
assert!(t.is_invalid_set(&1, &2));
assert!(!t.is_invalid_set(&1, &1));
t.set_min(1);
assert!(t.is_invalid_set(&0, &1));
assert!(!t.is_invalid_set(&1, &1));
}
#[test]
fn vaild_constaint_tests_f32() {
let mut t = NumberIncDecCpCmp::defaults();
assert!(!t.is_invalid_set(&1.0, &2.0));
assert!(t.is_invalid_set(&2.0, &1.0));
t.set_max(1.0);
assert!(t.is_invalid_set(&1.0, &2.0));
assert!(!t.is_invalid_set(&1.0, &1.0));
t.set_min(1.0);
assert!(t.is_invalid_set(&0.0, &1.0));
assert!(!t.is_invalid_set(&1.0, &1.0));
}
#[test]
fn inc_dec_behavior_i32() {
let l = NumberIncDecCpCmp::defaults();
assert_eq!(l.inc(&1, &2), Some(3)); assert_eq!(l.inc(&1, &0), None); assert_eq!(l.inc(&0, &-2), None); assert_eq!(l.inc(&i32::MAX, &1), None);
assert_eq!(l.dec(&1, &2), Some(-1)); assert_eq!(l.dec(&0, &0), None); assert_eq!(l.dec(&0, &-2), None); assert_eq!(l.dec(&i32::MIN, &1), None); }
#[test]
fn inc_dec_behavior_u32() {
let l = NumberIncDecCpCmp::defaults();
assert_eq!(l.inc(&1_u32, &2_u32), Some(3)); assert_eq!(l.inc(&0_u32, &0), None); assert_eq!(l.inc(&u32::MAX, &1), None);
assert_eq!(l.dec(&3_u32, &2), Some(1)); assert_eq!(l.dec(&3_u32, &0), None); assert_eq!(l.dec(&u32::MIN, &1), None); }
#[test]
fn inc_dec_behavior_f32() {
let l = NumberIncDecCpCmp::defaults();
assert_eq!(l.inc(&0.2, &0.5), Some(0.7));
assert_eq!(l.inc(&1.7, &-0.5), None);
assert_eq!(l.inc(&f32::INFINITY, &0.5), None);
assert_eq!(l.inc(&f32::INFINITY, &f32::INFINITY), None);
assert_eq!(l.inc(&1.0, &f32::INFINITY), Some(f32::INFINITY));
assert_eq!(l.inc(&1.0, &f32::NEG_INFINITY), None);
assert_eq!(l.dec(&0.5, &0.5), Some(-0.0));
assert_eq!(l.dec(&1.7, &-0.5), None);
assert_eq!(l.dec(&f32::INFINITY, &0.5), None);
assert_eq!(l.dec(&f32::INFINITY, &f32::INFINITY), None);
assert_eq!(l.dec(&1.0, &f32::INFINITY), Some(f32::NEG_INFINITY));
assert_eq!(l.dec(&1.0, &f32::NEG_INFINITY), None);
assert_eq!(l.cp_v(&1.0), 1.0);
}
#[test]
fn misc_tests_u8() {
let t = NumberIncDecCpCmp::defaults();
assert_eq!(u8::MAX, t.max());
assert_eq!(u8::MIN, t.min());
assert_eq!(1_u8, t.cp(&1));
assert_eq!(1_u8, t.default_step());
assert_eq!(1_u8, t.default_rebound());
assert!(t.lt(&0_u8, &2));
}
#[test]
fn misc_tests_i32() {
let t = NumberIncDecCpCmp::defaults();
assert_eq!(i32::MAX, t.max());
assert_eq!(i32::MIN, t.min());
assert_eq!(1, t.cp(&1));
assert_eq!(1, t.default_step());
assert_eq!(1, t.default_rebound());
assert!(t.lt(&0, &2));
}
#[test]
fn misc_tests_f32() {
let t = NumberIncDecCpCmp::defaults();
assert_eq!(f32::MAX, t.max());
assert_eq!(f32::MIN, t.min());
assert_eq!(1.0, t.cp(&1.0));
assert_eq!(1.0, t.default_step());
assert_eq!(1.0, t.default_rebound());
assert_eq!(Mrs::new(1, 2).to_tuple(), (1, 2));
assert!(t.lt(&0.0, &2.0));
}
#[test]
fn inc_dec_compare_all() {
let l = NumberIncDecCpCmp::defaults();
assert!(l.lt(&1, &2));
assert!(l.le(&1, &2));
assert!(l.eq(&2, &2));
assert!(l.gt(&4, &3));
assert!(l.ge(&4, &3));
assert!(l.ne(&4, &3));
assert!(!l.ne(&4, &4));
assert!(!l.eq(&3, &4));
assert!(!l.le(&6, &5));
assert!(!l.ge(&4, &5));
assert!(!l.lt(&4, &3));
assert!(!l.gt(&4, &5));
assert!(l.contains(&1, &3, &1));
assert!(!l.contains(&1, &2, &0));
assert!(!l.contains(&0, &0, &1));
assert!(!l.contains(&0, &0, &2));
assert!(l.overlap(&1, &2, &0, &1));
assert!(!l.overlap(&1, &2, &0, &0));
}
#[test]
fn test_rebound_start_and_end() {
let l = NumberIncDecCpCmp::defaults();
assert_eq!(l.rebound_start(Bound::Excluded(&1), &1), Some(2));
assert_eq!(l.rebound_start(Bound::Included(&1), &1), Some(1));
assert_eq!(l.rebound_start(Bound::Unbounded, &1), Some(i32::MIN));
assert_eq!(l.rebound_start(Bound::Excluded(&i32::MAX), &1), None);
assert_eq!(l.rebound_end(Bound::Excluded(&1), &1), Some(0));
assert_eq!(l.rebound_end(Bound::Included(&1), &1), Some(1));
assert_eq!(l.rebound_end(Bound::Unbounded, &1), Some(i32::MAX));
assert_eq!(l.rebound_end(Bound::Excluded(&i32::MIN), &1), None);
}
}