relmath-rs 0.7.0

Relation-first mathematics and scientific computing in Rust.
Documentation
//! Integration tests for workflow reachability.

use relmath::{BinaryRelation, UnaryRelation};

#[test]
fn computes_workflow_reachability() {
    let step = BinaryRelation::from_pairs([
        ("Draft", "Review"),
        ("Review", "Approved"),
        ("Review", "Rejected"),
    ]);

    let states = UnaryRelation::from_values(["Draft", "Review", "Approved", "Rejected"]);
    let reachable = step.reflexive_transitive_closure(&states);
    let draft = UnaryRelation::singleton("Draft");

    assert!(reachable.contains(&"Draft", &"Draft"));
    assert!(reachable.contains(&"Draft", &"Review"));
    assert!(reachable.contains(&"Draft", &"Approved"));
    assert!(reachable.contains(&"Draft", &"Rejected"));

    let from_draft = reachable.image(&draft);
    assert!(from_draft.contains(&"Draft"));
    assert!(from_draft.contains(&"Review"));
    assert!(from_draft.contains(&"Approved"));
    assert!(from_draft.contains(&"Rejected"));
}