From 35918ce36e091b7aa377d6240411cd190411891a Mon Sep 17 00:00:00 2001 From: Stefan Ellmauthaler Date: Wed, 23 Jun 2021 17:00:42 +0200 Subject: [PATCH] added ac to stmt relation Signed-off-by: Stefan Ellmauthaler --- src/adf.rs | 50 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/src/adf.rs b/src/adf.rs index 1d9d0e6..dd8be06 100644 --- a/src/adf.rs +++ b/src/adf.rs @@ -1,6 +1,7 @@ use std::{ collections::HashMap, num::ParseFloatError, + ops::Deref, str::{self, FromStr}, }; @@ -50,6 +51,25 @@ impl Adf { } } + pub fn init_statements(&mut self, stmts: Vec<&str>) -> usize { + for i in stmts.iter() { + self.add_statement(*i); + } + self.stmts.len() + } + + pub fn add_ac(&mut self, statement: &str, ac: &str) { + if let Some(stmt) = self.dict.get(statement) { + let stm = *stmt; + let ac_nmbr = self.parseformula(ac); + self.set_ac(stm, ac_nmbr) + } + } + + fn set_ac(&mut self, st: usize, ac: usize) { + self.stmts[st].ac = Some(ac); + } + fn parseformula(&mut self, ac: &str) -> usize { if let Some(split) = ac.find(',') { let (l, r) = ac.split_at(split); @@ -115,27 +135,37 @@ mod test { } #[test] - fn parseformula(){ + fn parseformula() { let mut adf = Adf::new(); adf.add_statement("a"); adf.add_statement("b"); adf.add_statement("c"); - assert_eq!(adf.parseformula("and(a,or(b,c))"),6); - assert_eq!(adf.parseformula("xor(a,b)"),11); - assert_eq!(adf.parseformula("or(c(f),b)"),3); // is b + assert_eq!(adf.parseformula("and(a,or(b,c))"), 6); + assert_eq!(adf.parseformula("xor(a,b)"), 11); + assert_eq!(adf.parseformula("or(c(f),b)"), 3); // is b } #[test] #[should_panic] - fn parseformula_panic(){ - let mut adf = Adf::new(); + fn parseformula_panic() { + let mut adf = Adf::new(); - adf.add_statement("a"); - adf.add_statement("b"); - adf.add_statement("c"); + adf.add_statement("a"); + adf.add_statement("b"); + adf.add_statement("c"); - adf.parseformula("and(a,or(b,d))"); + adf.parseformula("and(a,or(b,d))"); + } + + #[test] + fn init_statements() { + let mut adf = Adf::new(); + + let stmts: Vec<&str> = vec!["a", "b", "c", "extra long text type statement"]; + + assert_eq!(adf.init_statements(stmts), 4); + assert_eq!(adf.stmts[3].label, "extra long text type statement"); } }