1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6pub enum CollapsePlan {
7 Proceed,
8 StatesRequired,
9}
10
11impl CollapsePlan {
12 pub fn plan(state_count: usize) -> Self {
13 if state_count > 0 {
14 Self::Proceed
15 } else {
16 Self::StatesRequired
17 }
18 }
19
20 pub fn states_required_kind() -> &'static str {
22 "collapse_states_required"
23 }
24}
25
26pub fn collapse_has_source_states(state_count: usize) -> bool {
28 matches!(CollapsePlan::plan(state_count), CollapsePlan::Proceed)
29}
30
31pub fn collapse_states_required_kind() -> &'static str {
33 CollapsePlan::states_required_kind()
34}
35
36pub fn plan_collapse(state_count: usize) -> CollapsePlan {
37 CollapsePlan::plan(state_count)
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43
44 #[test]
45 fn collapse_plan_requires_states() {
46 assert_eq!(plan_collapse(0), CollapsePlan::StatesRequired);
47 assert_eq!(plan_collapse(2), CollapsePlan::Proceed);
48 assert!(!collapse_has_source_states(0));
49 assert!(collapse_has_source_states(1));
50 assert_eq!(collapse_states_required_kind(), "collapse_states_required");
51 }
52}