use std::str::FromStr;
use positron::{gate::Gate, parser::Parsed};
#[test]
fn parse() {
let mut test_str = "a.b";
let parsed = Parsed::from_str(test_str).unwrap();
assert_eq!(
parsed.root_gate,
Gate::And(vec![
Gate::Value("a".to_string()),
Gate::Value("b".to_string())
])
);
assert!(parsed.variables.contains("a"));
assert!(parsed.variables.contains("b"));
test_str = "a+b";
let parsed = Parsed::from_str(test_str).unwrap();
assert_eq!(
parsed.root_gate,
Gate::Or(vec![
Gate::Value("a".to_string()),
Gate::Value("b".to_string())
])
);
assert!(parsed.variables.contains("a"));
assert!(parsed.variables.contains("b"));
test_str = "(a+b)'.(c+d)";
let parsed = Parsed::from_str(test_str).unwrap();
assert_eq!(
parsed.root_gate,
Gate::And(vec![
Gate::Not(vec![Gate::Or(vec![
Gate::Value("a".to_string()),
Gate::Value("b".to_string())
])]),
Gate::Or(vec![
Gate::Value("c".to_string()),
Gate::Value("d".to_string())
])
])
);
assert!(parsed.variables.contains("a"));
assert!(parsed.variables.contains("b"));
assert!(parsed.variables.contains("c"));
assert!(parsed.variables.contains("d"));
}