libpetri_verification/environment.rs
1/// How environment places should be treated during verification.
2/// Controls how environment places (external event sources) are treated
3/// during formal analysis.
4#[derive(Debug, Clone, PartialEq, Eq)]
5pub enum EnvironmentAnalysisMode {
6 /// Environment places are always considered to have tokens available.
7 /// Transitions reading from environment places are always enabled.
8 AlwaysAvailable,
9 /// Environment places are treated as having at most `max_tokens` tokens.
10 /// Explores states where 0..=max_tokens tokens are injected.
11 Bounded { max_tokens: usize },
12 /// Environment places are treated as regular places (no special handling).
13 Ignore,
14}
15
16/// Creates an `AlwaysAvailable` environment mode.
17pub fn always_available() -> EnvironmentAnalysisMode {
18 EnvironmentAnalysisMode::AlwaysAvailable
19}
20
21/// Creates a `Bounded` environment mode with the given max token count.
22pub fn bounded(max_tokens: usize) -> EnvironmentAnalysisMode {
23 EnvironmentAnalysisMode::Bounded { max_tokens }
24}
25
26/// Creates an `Ignore` environment mode (treats env places as regular).
27pub fn ignore() -> EnvironmentAnalysisMode {
28 EnvironmentAnalysisMode::Ignore
29}
30
31#[cfg(test)]
32mod tests {
33 use super::*;
34
35 #[test]
36 fn mode_constructors() {
37 assert_eq!(always_available(), EnvironmentAnalysisMode::AlwaysAvailable);
38 assert_eq!(
39 bounded(3),
40 EnvironmentAnalysisMode::Bounded { max_tokens: 3 }
41 );
42 assert_eq!(ignore(), EnvironmentAnalysisMode::Ignore);
43 }
44}