1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
mod ast; mod parser; mod machine; pub type Machine<T> = machine::Machine<T>; #[cfg(test)] mod tests { use super::*; fn execute_test(grammar : &str, subjects : &Vec<&str>, expected : &Vec<bool>) { let machine_result = Machine::<String>::new(&grammar); assert!(machine_result.is_ok()); let mut machine = machine_result.ok().unwrap(); assert!(subjects.len() == expected.len()); for i in 0..expected.len() { let result = machine.execute(subjects[i].to_string().into_bytes()); let fail = result.is_err(); println!("{}", subjects[i]); println!("{:?}", result); assert!(!fail == expected[i]); } } #[test] fn add_multiply_variable_expression() { let grammar = " main { main:1 '+' main:2 / main:2 '*' main:3 / 'n' } "; let subjects = vec!["n", "n+n", "n*n", "n+n+n", "n*n*n", "n+n*n", "n*n+n"]; let expected = vec![true, true, true, true, true, true, true]; execute_test(grammar, &subjects, &expected); } }