use wasm4pm_compat::causality::CausalConsistency as CC;
use wasm4pm_compat::object_lifecycle::ObjectLifecyclePhase as Phase;
use wasm4pm_compat::temporal::TemporalOrder as TO;
#[test]
fn object_lifecycle_phases_are_constructed() {
let all = [
Phase::Created,
Phase::Active,
Phase::Modified,
Phase::Archived,
Phase::Deleted,
];
fn family(p: Phase) -> &'static str {
match p {
Phase::Created => "pre-active",
Phase::Active | Phase::Modified => "live",
Phase::Archived | Phase::Deleted => "terminal",
}
}
assert!(all.iter().copied().map(family).all(|f| !f.is_empty()));
let names: std::collections::BTreeSet<String> = all.iter().map(|p| format!("{p}")).collect();
assert_eq!(names.len(), 5, "five distinct lifecycle phases (Display)");
}
#[test]
fn causal_consistency_verdicts_are_constructed() {
let all = [
CC::Consistent,
CC::HasCycles,
CC::HasContradictions,
CC::Unknown,
];
fn label(c: CC) -> &'static str {
match c {
CC::Consistent => "consistent",
CC::HasCycles => "has-cycles",
CC::HasContradictions => "has-contradictions",
CC::Unknown => "unknown",
}
}
let s: std::collections::BTreeSet<&str> = all.iter().copied().map(label).collect();
assert_eq!(s.len(), 4, "four causal-consistency verdicts");
}
#[test]
fn temporal_orders_are_constructed() {
let all = [TO::Before, TO::After, TO::Concurrent, TO::Unknown];
fn label(t: TO) -> &'static str {
match t {
TO::Before => "before",
TO::After => "after",
TO::Concurrent => "concurrent",
TO::Unknown => "unknown",
}
}
let s: std::collections::BTreeSet<&str> = all.iter().copied().map(label).collect();
assert_eq!(s.len(), 4, "four temporal relations");
}