int main() { LogicFunction f_not("not",1,not_table), f_and2("and2",2,and2_table), f_and3("and3",3,and3_table), f_or2("or2",2,or2_table), f_or3("or3",3,or3_table), f_xor2("xor2",2,xor2_table), f_xor3("xor3",3,xor3_table), f_implies("implies", 2, impl_table); LogicFunction f_incomplete("incomplete",3, incl_table); // Basic table tests function_test(&f_not); function_test(&f_and2); function_test(&f_and3); function_test(&f_or2); function_test(&f_or3); function_test(&f_xor2); function_test(&f_xor3); function_test(&f_implies); function_test(&f_incomplete); // Combinatorial tests { printf("Testing combinatorial not (P and Q)\n"); char inputs[2]; LogicProcessor p_not(&f_not), p_and(&f_and2); p_and.setInput(0,inputs); p_and.setInput(1,inputs + 1); p_not.setInput(0,&p_and); processor_test(&p_not, 2, inputs); } { printf("Testing combinatorial P and not (Q or not R)\n"); // A && !(B || !C) char inputs[3]; LogicProcessor p_not0(&f_not), p_not1(&f_not), p_or(&f_or2), p_and(&f_and2); p_not0.setInput(0,inputs+2); p_or.setInput(0,inputs+1); p_or.setInput(1,&p_not0); p_not1.setInput(0,&p_or); p_and.setInput(0,inputs); p_and.setInput(1, &p_not1); processor_test(&p_and, 3, inputs); } { SymmetryFunction_test(std::cout); } }
static Term eval2(Int fi, Term t1, Term t2 USES_REGS) { arith2_op f = fi; switch (f) { case op_plus: return p_plus(t1, t2 PASS_REGS); case op_minus: return p_minus(t1, t2 PASS_REGS); case op_times: return p_times(t1, t2 PASS_REGS); case op_div: return p_div(t1, t2 PASS_REGS); case op_idiv: return p_div2(t1, t2 PASS_REGS); case op_and: return p_and(t1, t2 PASS_REGS); case op_or: return p_or(t1, t2 PASS_REGS); case op_sll: return p_sll(t1, t2 PASS_REGS); case op_slr: return p_slr(t1, t2 PASS_REGS); case op_mod: return p_mod(t1, t2 PASS_REGS); case op_rem: return p_rem(t1, t2 PASS_REGS); case op_fdiv: return p_fdiv(t1, t2 PASS_REGS); case op_xor: return p_xor(t1, t2 PASS_REGS); case op_atan2: return p_atan2(t1, t2 PASS_REGS); case op_power: return p_exp(t1, t2 PASS_REGS); case op_power2: return p_power(t1, t2 PASS_REGS); case op_gcd: return p_gcd(t1, t2 PASS_REGS); case op_min: return p_min(t1, t2); case op_max: return p_max(t1, t2); case op_rdiv: return p_rdiv(t1, t2 PASS_REGS); } RERROR(); }