use wasm4pm_compat::petri::{
InitialFinalMarkingPair, InstanceCreationKind, Marking, MultipleInstanceSpec, PetriRefusal,
};
#[test]
fn token_in_both_initial_and_final_is_unsafe() {
let pair = InitialFinalMarkingPair::new(
Marking::new([("p".to_string(), 1)]),
Marking::new([("p".to_string(), 1)]),
);
assert_eq!(pair.validate(), Err(PetriRefusal::UnsafeNet));
let safe = InitialFinalMarkingPair::new(
Marking::new([("i".to_string(), 1)]),
Marking::new([("o".to_string(), 1)]),
);
assert_eq!(
safe.validate(),
Ok(()),
"disjoint initial/final markings are safe"
);
}
#[test]
fn degenerate_instance_bounds_are_invalid() {
let zero = MultipleInstanceSpec::new(0, Some(3), None, InstanceCreationKind::Static);
assert_eq!(zero.validate(), Err(PetriRefusal::InvalidInstanceBounds));
let inverted = MultipleInstanceSpec::new(5, Some(2), None, InstanceCreationKind::Dynamic);
assert_eq!(
inverted.validate(),
Err(PetriRefusal::InvalidInstanceBounds)
);
let ok = MultipleInstanceSpec::new(1, Some(3), None, InstanceCreationKind::Static);
assert_eq!(ok.validate(), Ok(()), "1..=3 is a valid instance bound");
}