use positron::{circuit::Circuit, parser::Parsed, truth::truth};
use std::{collections::HashMap, io, str::FromStr};
fn main() {
println!("positron");
println!("Enter expression: ");
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
let parsed = Parsed::from_str(input.trim()).unwrap();
println!("Should show truth or will you enter stuff ? true / false");
input.clear();
io::stdin().read_line(&mut input).unwrap();
let should_show_truth: bool = input.trim().parse().unwrap();
input.clear();
if should_show_truth {
let truth_entires = truth(parsed);
for truth_entry in truth_entires {
println!("--");
for (_key, val) in truth_entry.data {
print!(" {} ", val);
}
print!(" {} ", truth_entry.result);
println!("--");
}
return;
}
let mut data = HashMap::new();
for var in parsed.variables {
println!("Enter value for \"{}\" in true / false: ", var);
input.clear();
io::stdin().read_line(&mut input).unwrap();
data.insert(var, input.trim().parse().unwrap());
}
let circuit = Circuit {
gate: parsed.root_gate,
data,
};
let res = circuit.execute().unwrap();
println!("Result: {}", res);
}