rs_state_machine 2.0.0

A business-oriented state machine library
Documentation
use crate::core::transition::Transition;

#[test]
pub fn should_compare_partially() {
    let transition = Transition::new("INPUT".to_string(), "EVENT".to_string(), "OUTPUT".to_string());
    
    assert!(transition.partial_compare(None, None, None));
    assert!(transition.partial_compare(None, None, Some(&"OUTPUT".to_string())));
    assert!(transition.partial_compare(None, Some(&"EVENT".to_string()), None));
    assert!(transition.partial_compare(Some(&"INPUT".to_string()), None, None));
    assert!(transition.partial_compare(Some(&"INPUT".to_string()), Some(&"EVENT".to_string()), None));
    assert!(transition.partial_compare(None, Some(&"EVENT".to_string()), Some(&"OUTPUT".to_string())));
    assert!(transition.partial_compare(Some(&"INPUT".to_string()), None, Some(&"OUTPUT".to_string())));
    assert!(transition.partial_compare(Some(&"INPUT".to_string()), Some(&"EVENT".to_string()), Some(&"OUTPUT".to_string())));

    assert!(!transition.partial_compare(None, None, Some(&"OTHER".to_string())));
    assert!(!transition.partial_compare(None, Some(&"OTHER".to_string()), None));
    assert!(!transition.partial_compare(Some(&"OTHER".to_string()), None, None));
}

#[test]
pub fn should_allow_without_guard() {
    let transition = Transition::new("INPUT".to_string(), "EVENT".to_string(), "OUTPUT".to_string());
    assert!(transition.is_allowed());
}

#[test]
pub fn should_guard() {
    let mut transition = Transition::new("INPUT".to_string(), "EVENT".to_string(), "OUTPUT".to_string());
    transition.guard = Some(|| true);
    assert!(transition.is_allowed());

    transition.guard = Some(|| false);
    assert!(!transition.is_allowed());
}