def test_issue75(): """Reference: https://github.com/cjdrake/pyeda/issues/75""" b, x = map(exprvar, "bx") f_out = ~(b | ~x) f_out_dnf = f_out.to_dnf() assert f_out.equivalent(f_out_dnf) f_out_r, = espresso_exprs(f_out_dnf) assert f_out.equivalent(f_out_r)
def test_espresso(): A = bitvec('a', 16) B = bitvec('b', 16) S, C = ripple_carry_add(A, B) s0, s1, s2, s3 = espresso_exprs(S[0].to_dnf(), S[1].to_dnf(), S[2].to_dnf(), S[3].to_dnf()) assert s0.equivalent(S[0]) assert s1.equivalent(S[1]) assert s2.equivalent(S[2]) assert s3.equivalent(S[3]) X = bitvec('x', 4) f1 = truthtable(X, "0000011111------") f2 = truthtable(X, "0001111100------") f1m, f2m = espresso_tts(f1, f2) truthtable2expr(f1).equivalent(f1m) truthtable2expr(f2).equivalent(f2m)
def test_espresso(): assert espresso.FTYPE == 1 assert espresso.DTYPE == 2 assert espresso.RTYPE == 4 A = exprvars('a', 16) B = exprvars('b', 16) S, C = ripple_carry_add(A, B) s0, s1, s2, s3 = espresso_exprs(S[0].to_dnf(), S[1].to_dnf(), S[2].to_dnf(), S[3].to_dnf()) assert s0.equivalent(S[0]) assert s1.equivalent(S[1]) assert s2.equivalent(S[2]) assert s3.equivalent(S[3]) X = exprvars('x', 4) f1 = truthtable(X, "0000011111------") f2 = truthtable(X, "0001111100------") f1m, f2m = espresso_tts(f1, f2) truthtable2expr(f1).equivalent(f1m) truthtable2expr(f2).equivalent(f2m)
def _minimize(function): dnf = function.to_dnf() if dnf.is_zero() or dnf.is_one(): return dnf return minimization.espresso_exprs(dnf)[0]