use qubit_function::testers::tester::{
RcTester,
Tester,
};
struct RcAlwaysTrue;
impl Tester for RcAlwaysTrue {
fn test(&self) -> bool {
true
}
}
#[test]
fn test_rc_tester_observable_behavior() {
let type_name = std::any::type_name::<RcTester>();
assert!(type_name.contains("RcTester"), "{type_name}");
}
#[test]
fn test_rc_tester_not_operator_observable_behavior() {
let owned_negated = !RcTester::new(|| true);
assert!(!owned_negated.test());
let original = RcTester::new(|| true);
let borrowed_negated = !&original;
assert!(!borrowed_negated.test());
assert!(original.test());
}
#[test]
fn test_rc_tester_name_and_diagnostics() {
let original = RcTester::new_with_name("ready", || true);
let renamed = original.clone().with_name("renamed");
assert_eq!(original.name(), Some("ready"));
assert_eq!(renamed.name(), Some("renamed"));
assert_eq!(
format!("{original:?}"),
"RcTester { name: Some(\"ready\") }"
);
assert_eq!(format!("{original}"), "RcTester(ready)");
}
#[test]
fn test_rc_tester_and_semantic_trait() {
let first = RcTester::new(|| true);
let combined = first.and(RcAlwaysTrue);
assert!(combined.test());
assert!(first.test());
}