From 833e3c56b89b3df39fa0945f522f4f07c2f46713 Mon Sep 17 00:00:00 2001 From: AlexanderHD27 Date: Wed, 11 Jun 2025 00:03:20 +0200 Subject: [PATCH] Added Range number and fsm union --- docs/configotron-whiteboard.xopp | Bin 798795 -> 874321 bytes src/configotron/fsm/component_builder.rs | 300 ++++++++++++++++++++++- src/configotron/fsm/display.rs | 23 +- src/configotron/fsm/mod.rs | 43 +++- 4 files changed, 349 insertions(+), 17 deletions(-) diff --git a/docs/configotron-whiteboard.xopp b/docs/configotron-whiteboard.xopp index ca8c0cb0513a1967addb421bfee65bebb4034a04..f393ca22a59e74555608bf9a781658285751a991 100644 GIT binary patch delta 97291 zcmV(#K;*y6;4smyHGqTxgaU*Egam{Iga(8Mgb0KQgbK6^x!Hf=?ah*8S%Txrtz5wZ zK%a+?UJRPEG(|{h;)lC$J8GWc7KN&ZM--(Y1YXc?R%Q$y<~FFQzD&erJDMOO09Pfn z1N@w_p=UR?&qbPR<=n8i}?Sfp%k;itdCw98n}} zp#2!egT#Boj-r1xv_ zzyJ5&pptCOb$SR%Z=I-c7MNi5=#a^?fXK0fxwUuZ-^-W0+6xFLM@sqsTv*QQXc1

)Hz-1^a}H=VzA?+Y2FoBW#vou^9&& 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

8lL+kmnT@5t&h&r# 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�e-691W!xDf+$!4GnrpeuZh!Jv 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�i_N1K%#$U=H|n#dOrqBF0@M{{5iof@!Hf_tLwbD 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 Result { scaffold.builder.add_link(&scaffold.last_side, &scaffold.error_state, Action::None, mask_any_number())?; scaffold.builder.add_link(&scaffold.goal_state, &scaffold.error_state, Action::None, mask_any_number())?; + scaffold.builder.set_state_type(&scaffold.start_state, StateType::Error); + let fsm = scaffold.builder.finish(&scaffold.error_state, Action::None, &scaffold.start_state)?; Ok(fsm) } -pub fn build_fsm_lower_bound(max: u32) -> Result { - let mut scaffold = build_fsm_bound_selecton(max, StateType::Error)?; +pub fn build_fsm_lower_bound(min: u32) -> Result { + let mut scaffold = build_fsm_bound_selecton(min, StateType::Error)?; - let last_digit = (max % 10) as u8; + let last_digit = (min % 10) as u8; scaffold.builder.add_link(&scaffold.last_main, &scaffold.goal_state, Action::None, mask_number_range(last_digit, 9))?; scaffold.builder.add_link(&scaffold.last_side, &scaffold.goal_state, Action::None, mask_any_number())?; scaffold.builder.add_link(&scaffold.goal_state, &scaffold.goal_state, Action::None, mask_any_number())?; @@ -90,21 +94,113 @@ pub fn build_fsm_lower_bound(max: u32) -> Result { Ok(fsm) } +fn fsm_cartesian_product(fsm1: &FiniteStateMachine, fsm2: &FiniteStateMachine, state_type_operator: F, action_operator: G) -> Result +where F: Fn(StateType, StateType) -> StateType, G: Fn(Action, Action) -> Action { + let mut builder = FSMBuilder::new(); + + let mut states_matrix: HashMap<(StateRef, StateRef), StateRef> = HashMap::new(); + + // Create all States (Q1 x Q2) + for ( + (state_ref1, state1), + (state_ref2, state2) + ) in itertools::iproduct!(&fsm1.states, &fsm2.states) { + let name = format!("{}_{}", state1.name, state2.name); + states_matrix.insert((*state_ref1, *state_ref2), builder.add_named_state(name, state_type_operator(state1.state_type, state2.state_type))); + } + + // Adding Transitions + for ( + (state_ref1, state1), + (state_ref2, state2) + ) in itertools::iproduct!(&fsm1.states, &fsm2.states) { + let current_ref = match states_matrix.get(&(*state_ref1, *state_ref2)) { + Some(r) => r.clone(), + None => return Err(format!("State pair ({:?}, {:?}) not found in states_matrix [internal]", state_ref1, state_ref2)), + }; + + for ch in 0..128 { + let (next_state1, action1) = state1.transition[ch]; + let (next_state2, action2) = state2.transition[ch]; + let new_ref = match states_matrix.get(&(next_state1, next_state2)) { + Some(r) => r.clone(), + None => return Err(format!("State pair ({:?}, {:?}) not found in states_matrix [internal]", next_state1, next_state2)), + }; + + builder.add_link(¤t_ref, &new_ref, action_operator(action1, action2), 1 << ch)?; + } + }; + + let start_state = if let Some(s) = states_matrix.get(&(fsm1.start, fsm2.start)) { + s + } else { + return Err("Start state pair not found in states_matrix [internal]".to_string()); + }; + + Ok(builder.finish_without_default(start_state)?) +} + +pub fn union_fsm(fsm1: &FiniteStateMachine, fsm2: &FiniteStateMachine) -> Result { + fsm_cartesian_product(fsm1, fsm2, + |t1, t2| { + use StateType::{Terminal, Error, None}; + match (t1, t2) { + (Error, _) => Error, + (_, Error) => Error, + + (Terminal, Terminal) => Terminal, + (Terminal, None) => None, + + (None, Terminal) => None, + (None, None) => None, + } + }, + |a1, a2| { + use Action::{Add, Pop, Submit, None}; + match (a1, a2) { + (None, _) => None, + (_, None) => None, + + (Add, Add) => Add, + (Pop, Pop) => Pop, + (Submit, Submit) => Submit, + + (_, _) => None + } + } + ) +} + +pub fn build_fsm_in_bound(min: u32, max: u32) -> Result { + if min > max { + return Err(String::from("Lower bound must be <= Upper bound")); + } + + let lower_fsm = build_fsm_lower_bound(min)?; + let upper_fsm = build_fsm_upper_bound(max)?; + + Ok(union_fsm(&lower_fsm, &upper_fsm)?) +} + #[cfg(test)] mod test { - use crate::configotron::fsm::{component_builder::build_fsm_upper_bound, display::{debug_dump_fsm_graph}, run_fsm, StateType}; + use crate::configotron::fsm::{component_builder::{build_fsm_in_bound, build_fsm_upper_bound, union_fsm}, display::debug_dump_fsm_graph, masks::mask_char, run_fsm, StateType}; use crate::configotron::fsm::component_builder::build_fsm_lower_bound; +use crate::configotron::fsm::{FSMBuilder, Action}; + + static TEST_NUMBERS: &[u32] = &[1256, 1, 9999, 1000, 0, 10, 42, 123, 500, 2024, 751394]; #[test] fn upper_bound() { - - let test_vec: Vec = vec![1256, 1, 9999, 1000, 0, 10, 42, 123, 500, 2024, 751394]; - - for max in test_vec { + for &max in TEST_NUMBERS { let fsm = build_fsm_upper_bound(max); assert!(fsm.is_ok(), "{:?}", if let Err(e) = fsm { e } else { String::new() }); - + if let Ok(machine) = fsm { + assert_eq!(StateType::Error, run_fsm(&machine, &"".to_string()), "Empty String"); + assert_eq!(StateType::Error, run_fsm(&machine, &"this-is-not-a-number".to_string()), "Text"); + assert_eq!(StateType::Error, run_fsm(&machine, &"13373 is a nice number".to_string()), "Number + Text"); + debug_dump_fsm_graph(&machine, format!(".debug/upper_bound{}.svg", max)); for i in 0..=max*10 { @@ -125,14 +221,15 @@ mod test { #[test] fn lower_bound() { - let test_vec: Vec = vec![1256, 1, 9999, 1000, 0, 10, 42, 123, 500, 2024, 751394]; - - for max in test_vec { + for &max in TEST_NUMBERS { let fsm = build_fsm_lower_bound(max); assert!(fsm.is_ok(), "{:?}", if let Err(e) = fsm { e } else { String::new() }); if let Ok(machine) = fsm { debug_dump_fsm_graph(&machine, format!(".debug/lower_bound{}.svg", max)); + assert_eq!(StateType::Error, run_fsm(&machine, &"".to_string()), "Empty String"); + assert_eq!(StateType::Error, run_fsm(&machine, &"this-is-not-a-number".to_string()), "Text"); + assert_eq!(StateType::Error, run_fsm(&machine, &"13373 is a nice number".to_string()), "Number + Text"); for i in 0..=max*10 { let input_string = i.to_string(); @@ -147,4 +244,183 @@ mod test { } } } + + #[test] + fn union_fsm_test() { + // FSM A: + // States: z0, z1, z2, z3 + // Start: z0 + // + // Types: + // - Terminal: z2 + // - Error: z0, z1, z3 + // + // Transitions: + // z0 -a-> z0 + // z0 -b-> z1 + // z1 -a-> z2 + // default: z3 + // + // Language: /a+ba/ + + let mut builder_a = FSMBuilder::new(); + let z0 = builder_a.add_named_state("z0".to_string(), StateType::Error); + let z1 = builder_a.add_named_state("z1".to_string(), StateType::Error); + let z2 = builder_a.add_named_state("z2".to_string(), StateType::Terminal); + let z3 = builder_a.add_named_state("z3".to_string(), StateType::Error); + + builder_a.add_link(&z0, &z0, Action::None, mask_char('a')).unwrap(); + builder_a.add_link(&z0, &z1, Action::None, mask_char('b')).unwrap(); + builder_a.add_link(&z1, &z2, Action::None, mask_char('a')).unwrap(); + let fsm_a_res = builder_a.finish(&z3, Action::None, &z0); + let fsm_a_res_clone = fsm_a_res.clone(); + + let accepted_a = ["ba", "aba", "aaba", "aaaba", "aaaaba", "aaaaaba"]; + let rejected_a = ["a", "b", "ab", "aab", "abb", "baba", "", "bb", "aaa", "bab"]; + + // Test FSM A with different inputs + if let Ok(fsm_a) = fsm_a_res { + debug_dump_fsm_graph(&fsm_a, ".debug/union_a.svg".to_string()); + + // Accepts "ba", "aba", "aaba", "aaaba", etc. + for input in &accepted_a { + let res = run_fsm(&fsm_a, &input.to_string()); + assert_eq!(res, StateType::Terminal, "FSM A should accept '{}'", input); + } + + // Rejects "a", "b", "ab", "aab", "abb", "baba", "", "bb", "aaa", "bab" + for input in &rejected_a { + let res = run_fsm(&fsm_a, &input.to_string()); + assert_eq!(res, StateType::Error, "FSM A should reject '{}'", input); + } + } + + // FSM B: + // States: z0, z1, z2, z3 + // Start: z0 + // + // Types: + // - Terminal: z2 + // - Error: z0, z1, z2, z3 + // + // Transitions: + // z0 -a-> z1 + // z1 -b-> z2 + // z2 -a-> z2 + // default: z3 + // + // Language: /aba*/ + + let mut builder_a = FSMBuilder::new(); + let z0 = builder_a.add_named_state("z0".to_string(), StateType::Error); + let z1 = builder_a.add_named_state("z1".to_string(), StateType::Error); + let z2 = builder_a.add_named_state("z2".to_string(), StateType::Terminal); + let z3 = builder_a.add_named_state("z3".to_string(), StateType::Terminal); + let z4 = builder_a.add_named_state("z4".to_string(), StateType::Error); + + builder_a.add_link(&z0, &z1, Action::None, mask_char('a')).unwrap(); + builder_a.add_link(&z1, &z2, Action::None, mask_char('b')).unwrap(); + builder_a.add_link(&z2, &z3, Action::None, mask_char('a')).unwrap(); + builder_a.add_link(&z3, &z3, Action::None, mask_char('a')).unwrap(); + let fsm_b_res = builder_a.finish(&z4, Action::None, &z0); + let fsm_b_res_clone = fsm_b_res.clone(); + + let accepted_b = ["ab", "aba", "abaa", "abaaa", "abaaaa", "abaaaaa"]; + let rejected_b = ["a", "b", "ba", "aab", "abb", "baba", "", "bb", "aaa"]; + + // Test FSM B with different inputs + if let Ok(fsm_b) = fsm_b_res { + debug_dump_fsm_graph(&fsm_b, ".debug/union_b.svg".to_string()); + // Accepts "ab", "aba", "abaa", "abaaa", etc. + for input in &accepted_b { + let res = run_fsm(&fsm_b, &input.to_string()); + assert_eq!(res, StateType::Terminal, "FSM B should accept '{}'", input); + } + + // Rejects "a", "b", "ba", "aab", "abb", "baba", "", "bb", "aaa" + for input in &rejected_b { + let res = run_fsm(&fsm_b, &input.to_string()); + assert_eq!(res, StateType::Error, "FSM B should reject '{}'", input); + } + } + + let fsm_a= fsm_a_res_clone.unwrap(); + let fsm_b = fsm_b_res_clone.unwrap(); + + let fsm_res = union_fsm(&fsm_a, &fsm_b); + assert!(fsm_res.is_ok()); + + if let Ok(fsm) = fsm_res { + assert_eq!(StateType::Error, run_fsm(&fsm, &"".to_string()), "Empty String"); + assert_eq!(StateType::Error, run_fsm(&fsm, &"this-is-not-a-number".to_string()), "Text"); + assert_eq!(StateType::Error, run_fsm(&fsm, &"13373 is a nice number".to_string()), "Number + Text"); + + debug_dump_fsm_graph(&fsm, ".debug/union_res.svg".to_string()); + let all_rejected = rejected_a.iter() + .chain(rejected_b.iter()) + .chain(accepted_a.iter()) + .chain(accepted_b.iter()); + for i in all_rejected { + let input = i.to_string(); + + let res_a = run_fsm(&fsm_a, &input); + let res_b = run_fsm(&fsm_b, &input); + let res = run_fsm(&fsm, &input); + + let expected = match (res_a, res_b) { + (StateType::Terminal, StateType::Terminal) => StateType::Terminal, + (_, _) => StateType::Error, + }; + + assert_eq!(res, expected, "For input {} Union FSM output '{:?}', got '{:?}' (A: {:?}, B: {:?})", input, expected, res, res_a, res_b); + } + } + + } + + #[test] + fn in_bound() { + + assert!(build_fsm_in_bound(2, 1).is_err()); + + let test_number_pairs = vec![ + (0, 0), + (0, 1), + (1, 10), + (5, 15), + (10, 100), + (42, 123), + (100, 1000), + (500, 2024), + (751394, 751400), + (1, 9999), + (0, 9999), + ]; + + for (min, max) in test_number_pairs { + if min > max { + continue; + } + + let fsm_result = build_fsm_in_bound(min, max); + assert!(fsm_result.is_ok()); + println!("Testing {}..{}", min, max); + + if let Ok(fsm) = fsm_result { + debug_dump_fsm_graph(&fsm, format!(".debug/in_bound/{}_{}.svg", min, max)); + for i in 0..=max*10 { + let input_string = i.to_string(); + let expected = if i >= min && i <= max { + StateType::Terminal + } else { + StateType::Error + }; + + let res = run_fsm(&fsm, &input_string); + + assert_eq!(res, expected, "Expecet '{:?}' (got '{:?}') for {} (Range: {}..{})", expected, res, i, min, max); + } + } + } + } } \ No newline at end of file diff --git a/src/configotron/fsm/display.rs b/src/configotron/fsm/display.rs index f691400..1ebe265 100644 --- a/src/configotron/fsm/display.rs +++ b/src/configotron/fsm/display.rs @@ -131,6 +131,27 @@ pub fn create_graphviz_graph(fsm: &FiniteStateMachine) -> Graph { })); } } + + stmts.push( + Stmt::Node(Node { + id: NodeId(Id::Plain("Start".to_string()), None), + attributes: vec![ + Attribute(Id::Plain("shape".to_string()), Id::Plain("plain".to_string())), + Attribute(Id::Plain("label".to_string()), Id::Plain("\" \"".to_string())), + ] + }) + ); + + stmts.push( + Stmt::Edge(Edge { + ty: EdgeTy::Pair( + Vertex::N(NodeId(Id::Plain("Start".to_string()), None)), + Vertex::N(NodeId(format_id(&fsm.start), None)) + ), + attributes: vec![] + }) + ); + Graph::DiGraph { id: Id::Plain("FSM".to_string()), strict: true, stmts: stmts } } @@ -157,8 +178,6 @@ mod test { use graphviz_rust::{printer::{DotPrinter, PrinterContext}}; use crate::configotron::fsm::{display::{create_graphviz_graph, debug_dump_fsm_graph, mask_to_string}, masks::{mask_all, mask_char, mask_char_range}, Action, FSMBuilder, StateType}; -use std::fs::File; -use std::io::Write; #[test] fn mask_to_string_test() { diff --git a/src/configotron/fsm/mod.rs b/src/configotron/fsm/mod.rs index 3f81e80..80c1b81 100644 --- a/src/configotron/fsm/mod.rs +++ b/src/configotron/fsm/mod.rs @@ -37,6 +37,7 @@ impl fmt::Display for Action { pub type TransitionArray = [T; 128]; pub type UnfinishedTransitionArray = [Option; 128]; +pub type StateTransition = TransitionArray<(StateRef, Action)>; /// /// Represents a State in consolidate State machine State @@ -44,9 +45,10 @@ pub type UnfinishedTransitionArray = [Option; 128]; /// The `transition` field contains the outgoing transitions for this state, /// where each entry corresponds to a possible input symbol. /// Its expected to have ONLY valid StateRefs +#[derive(Clone, Debug)] pub struct State { name: String, - transition: TransitionArray<(StateRef, Action)>, + transition: StateTransition, state_type: StateType } @@ -54,6 +56,7 @@ pub struct State { /// Represents a finished compleate consolidate State machine /// /// `start` is expected to be a valid refernces in the `states` Hashmap +#[derive(Clone, Debug)] pub struct FiniteStateMachine { states: HashMap, start: StateRef @@ -77,7 +80,7 @@ impl FSMBuilder { FSMBuilder { states: HashMap::new() } } - pub fn finish (&self, default_state: &StateRef, default_action: Action, start_state: &StateRef) -> Result { + pub fn finish(&self, default_state: &StateRef, default_action: Action, start_state: &StateRef) -> Result { if self.states.len() < 1 { return Err("State Machine must have at least one state!"); } @@ -105,7 +108,41 @@ impl FSMBuilder { // 2. Elimate all unsed states let used_states = Self::get_used_states(&filled_states, start_state); - + filled_states.retain(|id, _| used_states.contains(id)); + + Ok(FiniteStateMachine { states: filled_states, start: *start_state }) + } + + pub fn finish_without_default(&self, start_state: &StateRef) -> Result { + if self.states.len() < 1 { + return Err("State Machine must have at least one state!"); + } + + if !self.states.contains_key(start_state) { + return Err("Start state is not in the State Set!"); + } + + // 1. Check for any vacant transitions + for (_, state) in self.states.iter() { + for trans in state.transition.iter() { + if trans.is_none() { + return Err("Not all transitions are filled!"); + } + } + } + + // 2. All transitions are filled, so build the FSM + let mut filled_states: HashMap = HashMap::new(); + for (id, state) in self.states.iter() { + filled_states.insert(*id, State { + name: state.name.clone(), + state_type: state.state_type, + transition: std::array::from_fn(|i| state.transition[i].clone().unwrap()), + }); + } + + // 3. Eliminate all unused states + let used_states = Self::get_used_states(&filled_states, start_state); filled_states.retain(|id, _| used_states.contains(id)); Ok(FiniteStateMachine { states: filled_states, start: *start_state })