use qubit_function::{
BoxFunctionOnce,
FunctionOnce,
Predicate,
RcPredicate,
};
#[test]
fn test_box_function_once_debug_display() {
let double = BoxFunctionOnce::new(|x: &i32| x * 2);
let debug_str = format!("{:?}", double);
assert!(debug_str.contains("BoxFunctionOnce"));
assert!(debug_str.contains("name"));
assert!(debug_str.contains("function"));
let display_str = format!("{}", double);
assert_eq!(display_str, "BoxFunctionOnce");
let named_double =
BoxFunctionOnce::new_with_name("double", |x: &i32| x * 2);
let named_debug_str = format!("{:?}", named_double);
assert!(named_debug_str.contains("BoxFunctionOnce"));
assert!(named_debug_str.contains("name"));
assert!(named_debug_str.contains("function"));
let named_display_str = format!("{}", named_double);
assert_eq!(named_display_str, "BoxFunctionOnce(double)");
}
#[test]
fn test_box_function_once_name_methods() {
let mut double =
BoxFunctionOnce::new_with_name("double_func_once", |x: &i32| x * 2);
assert_eq!(double.name(), Some("double_func_once"));
double.set_name("modified_double_once");
assert_eq!(double.name(), Some("modified_double_once"));
assert_eq!(double.apply(&5), 10);
}
#[test]
fn test_box_conditional_function_once_debug_display() {
let double = BoxFunctionOnce::new(|x: &i32| x * 2);
let conditional = double.when(|x: &i32| *x > 0);
let debug_str = format!("{:?}", conditional);
assert!(debug_str.contains("BoxConditionalFunctionOnce"));
assert!(debug_str.contains("name"));
assert!(debug_str.contains("function"));
assert!(debug_str.contains("predicate"));
let display_str = format!("{}", conditional);
assert!(display_str.starts_with("BoxConditionalFunctionOnce("));
assert!(display_str.contains("BoxFunctionOnce"));
assert!(display_str.contains("BoxPredicate"));
assert!(display_str.ends_with(")"));
let triple =
BoxFunctionOnce::new_with_name("triple_func_once", |x: &i32| x * 3);
let named_conditional = triple.when(|x: &i32| *x % 2 == 0);
let named_debug_str = format!("{:?}", named_conditional);
assert!(named_debug_str.contains("BoxConditionalFunctionOnce"));
assert!(named_debug_str.contains("name"));
assert!(named_debug_str.contains("function"));
assert!(named_debug_str.contains("predicate"));
let named_display_str = format!("{}", named_conditional);
assert!(named_display_str.starts_with("BoxConditionalFunctionOnce("));
assert!(named_display_str.contains("BoxFunctionOnce(triple_func_once)"));
assert!(named_display_str.contains("BoxPredicate"));
assert!(named_display_str.ends_with(")"));
}