use poi::prelude::*;
fn main() {
test_binary(And, |a, b| a && b);
test_binary(Or, |a, b| a || b);
test_binary(Eqb, |a, b| a == b);
test_binary(Xor, |a, b| a ^ b);
test_binary(Nand, |a, b| !(a && b));
test_binary(Nor, |a, b| !(a || b));
test_binary(Exc, |a, b| a && !b);
test_binary(Imply, |a, b| !a || b);
test_binary(Fstb, |a, _| a);
test_binary(Sndb, |_, b| b);
}
pub fn test_binary(sym: Symbol, f: fn(bool, bool) -> bool) {
let ref std = std();
let cases = &[
(false, false),
(false, true),
(true, false),
(true, true)
];
for case in cases {
let r = f(case.0, case.1);
let a = app(sym.clone(), (case.0, case.1)).eval(std).unwrap();
assert_eq!(a, r.into());
}
}