use qubit_function::Predicate;
#[cfg(test)]
mod always_predicates_tests {
use qubit_function::Predicate;
use qubit_function::predicates::ArcPredicate;
use qubit_function::predicates::BoxPredicate;
use qubit_function::predicates::RcPredicate;
#[test]
fn test_box_always_true() {
let pred = BoxPredicate::<i32>::always_true();
assert!(pred.test(&5));
assert!(pred.test(&-5));
assert!(pred.test(&0));
}
#[test]
fn test_box_always_false() {
let pred = BoxPredicate::<i32>::always_false();
assert!(!pred.test(&5));
assert!(!pred.test(&-5));
assert!(!pred.test(&0));
}
#[test]
fn test_rc_always_true() {
let pred = RcPredicate::<i32>::always_true();
assert!(pred.test(&5));
assert!(pred.test(&-5));
assert!(pred.test(&0));
}
#[test]
fn test_rc_always_false() {
let pred = RcPredicate::<i32>::always_false();
assert!(!pred.test(&5));
assert!(!pred.test(&-5));
assert!(!pred.test(&0));
}
#[test]
fn test_arc_always_true() {
let pred = ArcPredicate::<i32>::always_true();
assert!(pred.test(&5));
assert!(pred.test(&-5));
assert!(pred.test(&0));
}
#[test]
fn test_arc_always_false() {
let pred = ArcPredicate::<i32>::always_false();
assert!(!pred.test(&5));
assert!(!pred.test(&-5));
assert!(!pred.test(&0));
}
#[test]
fn test_always_true_with_composition() {
let always = BoxPredicate::<i32>::always_true();
let is_positive = |x: &i32| *x > 0;
let and_result = always.and(is_positive);
assert!(and_result.test(&5));
assert!(!and_result.test(&-5));
}
#[test]
fn test_always_false_with_composition() {
let never = BoxPredicate::<i32>::always_false();
let is_positive = |x: &i32| *x > 0;
let or_result = never.or(is_positive);
assert!(or_result.test(&5));
assert!(!or_result.test(&-5));
}
#[test]
fn test_new_with_name() {
let mut pred = BoxPredicate::new_with_name("positive", |x: &i32| *x > 0);
assert_eq!(pred.name(), Some("positive"));
assert!(pred.test(&5));
pred.set_name("updated");
assert_eq!(pred.name(), Some("updated"));
}
#[test]
fn test_rc_new_with_name() {
let mut pred = RcPredicate::new_with_name("positive", |x: &i32| *x > 0);
assert_eq!(pred.name(), Some("positive"));
assert!(pred.test(&5));
pred.set_name("updated");
assert_eq!(pred.name(), Some("updated"));
}
#[test]
fn test_arc_new_with_name() {
let mut pred = ArcPredicate::new_with_name("positive", |x: &i32| *x > 0);
assert_eq!(pred.name(), Some("positive"));
assert!(pred.test(&5));
pred.set_name("updated");
assert_eq!(pred.name(), Some("updated"));
}
}