示例#1
0
文件: test_expr.py 项目: e42s/pyeda
def test_depth():
    assert (a | b).depth == 1
    assert (a | (b & c)).depth == 2
    assert (a | (b & (c | d))).depth == 3

    assert (a & b).depth == 1
    assert (a & (b | c)).depth == 2
    assert (a & (b | (c & d))).depth == 3

    assert Not(a | b).depth == 2
    assert Not(a | (b & c)).depth == 3
    assert Not(a | (b & (c | d))).depth == 4

    assert Xor(a, b, c).depth == 1
    assert Xor(a, b, c | d).depth == 2
    assert Xor(a, b, c | Xor(d, e)).depth == 3

    assert Equal(a, b, c).depth == 1
    assert Equal(a, b, c | d).depth == 2
    assert Equal(a, b, c | Xor(d, e)).depth == 3

    assert Implies(p, q).depth == 1
    assert Implies(p, a | b).depth == 2
    assert Implies(p, Xor(a, b)).depth == 2

    assert ITE(s, a, b).depth == 1
    assert ITE(s, a | b, b).depth == 2
    assert ITE(s, a | b, Xor(a, b)).depth == 2
示例#2
0
def test_expr2dimacssat():
    assert_raises(ValueError, expr2dimacssat, Xor(0, a, simplify=False))
    ret = expr2dimacssat(Xor(a, ~b))
    assert ret in {'p satx 2\nxor(-2 1)', 'p satx 2\nxor(1 -2)'}
    ret = expr2dimacssat(Xor(a, Equal(b, ~c)))
    assert ret in {
        'p satex 3\nxor(=(2 -3) 1)', 'p satex 3\nxor(1 =(2 -3))',
        'p satex 3\nxor(=(-3 2) 1)', 'p satex 3\nxor(1 =(-3 2))'
    }
    ret = expr2dimacssat(Equal(a, ~b))
    assert ret in {'p sate 2\n=(1 -2)', 'p sate 2\n=(-2 1)'}
    ret = expr2dimacssat(And(a, ~b))
    assert ret in {'p sat 2\n*(1 -2)', 'p sat 2\n*(-2 1)'}
    ret = expr2dimacssat(Or(a, ~b))
    assert ret in {'p sat 2\n+(1 -2)', 'p sat 2\n+(-2 1)'}
    ret = expr2dimacssat(Not(a | ~b))
    assert ret in {'p sat 2\n-(+(1 -2))', 'p sat 2\n-(+(-2 1))'}
示例#3
0
def test_basic():
    a, b, c, d, p, q, s = map(exprvar, 'abcdpqs')
    assert expr("a & ~b | b & ~c").equivalent(a & ~b | b & ~c)
    assert expr("p => q").equivalent(~p | q)
    assert expr("a <=> b").equivalent(~a & ~b | a & b)
    assert expr("s ? a : b").equivalent(s & a | ~s & b)
    assert expr("Not(a)").equivalent(Not(a))
    assert expr("Or(a, b, c)").equivalent(Or(a, b, c))
    assert expr("And(a, b, c)").equivalent(And(a, b, c))
    assert expr("Xor(a, b, c)").equivalent(Xor(a, b, c))
    assert expr("Xnor(a, b, c)").equivalent(Xnor(a, b, c))
    assert expr("Equal(a, b, c)").equivalent(Equal(a, b, c))
    assert expr("Unequal(a, b, c)").equivalent(Unequal(a, b, c))
    assert expr("Implies(p, q)").equivalent(Implies(p, q))
    assert expr("ITE(s, a, b)").equivalent(ITE(s, a, b))
    assert expr("Nor(a, b, c)").equivalent(Nor(a, b, c))
    assert expr("Nand(a, b, c)").equivalent(Nand(a, b, c))
    assert expr("OneHot0(a, b, c)").equivalent(OneHot0(a, b, c))
    assert expr("OneHot(a, b, c)").equivalent(OneHot(a, b, c))
    assert expr("Majority(a, b, c)").equivalent(Majority(a, b, c))
    assert expr("AchillesHeel(a, b, c, d)").equivalent(AchillesHeel(
        a, b, c, d))
示例#4
0
def test_equal():
    assert Equal() is One
    assert Equal(a) is One

    assert Equal(0, 0) is One
    assert Equal(0, 1) is Zero
    assert Equal(1, 0) is Zero
    assert Equal(1, 1) is One

    assert Equal(0, 0, 0) is One
    assert Equal(0, 0, 1) is Zero
    assert Equal(0, 1, 0) is Zero
    assert Equal(0, 1, 1) is Zero
    assert Equal(1, 0, 0) is Zero
    assert Equal(1, 0, 1) is Zero
    assert Equal(1, 1, 0) is Zero
    assert Equal(1, 1, 1) is One

    assert Equal(a, 0) is ~a
    assert Equal(1, a) is a
    assert Equal(~a, a) is Zero

    assert str(Equal(a, 0, simplify=False)) == "Equal(a, 0)"
    assert str(Equal(1, a, simplify=False)) == "Equal(1, a)"
    assert str(Equal(~a, a, simplify=False)) == "Equal(~a, a)"
示例#5
0
文件: test_expr.py 项目: e42s/pyeda
def test_equal():
    # Function
    assert Equal(~a, b).support == {a, b}

    # Expression
    assert Equal() is EXPRONE
    assert Equal(a) is EXPRONE

    assert Equal(0, 0) is EXPRONE
    assert Equal(0, 1) is EXPRZERO
    assert Equal(1, 0) is EXPRZERO
    assert Equal(1, 1) is EXPRONE

    assert Equal(0, 0, 0) is EXPRONE
    assert Equal(0, 0, 1) is EXPRZERO
    assert Equal(0, 1, 0) is EXPRZERO
    assert Equal(0, 1, 1) is EXPRZERO
    assert Equal(1, 0, 0) is EXPRZERO
    assert Equal(1, 0, 1) is EXPRZERO
    assert Equal(1, 1, 0) is EXPRZERO
    assert Equal(1, 1, 1) is EXPRONE

    assert Equal(0, a) == ~a
    assert Equal(a, 0) == ~a
    assert Equal(1, a) == a
    assert Equal(a, 1) == a

    assert Equal(a, a) is EXPRONE
    assert Equal(a, ~a) is EXPRZERO
    assert Equal(~a, a) is EXPRZERO

    assert Equal(a, b,
                 c).to_nnf(conj=False).equivalent(~a & ~b & ~c | a & b & c)
    assert Equal(a, b,
                 c).to_nnf(conj=True).equivalent(~a & ~b & ~c | a & b & c)
示例#6
0
def test_equal():
    # Function
    assert Equal(~a, b).support == {a, b}

    # Expression
    assert Equal() is One
    assert Equal(a) is One

    assert Equal(0, 0) is One
    assert Equal(0, 1) is Zero
    assert Equal(1, 0) is Zero
    assert Equal(1, 1) is One

    assert Equal(0, 0, 0) is One
    assert Equal(0, 0, 1) is Zero
    assert Equal(0, 1, 0) is Zero
    assert Equal(0, 1, 1) is Zero
    assert Equal(1, 0, 0) is Zero
    assert Equal(1, 0, 1) is Zero
    assert Equal(1, 1, 0) is Zero
    assert Equal(1, 1, 1) is One

    assert Equal(0, a) == ~a
    assert Equal(a, 0) is ~a
    assert Equal(1, a) is a
    assert Equal(a, 1) is a

    assert Equal(a, a) is One
    assert Equal(a, ~a) is Zero
    assert Equal(~a, a) is Zero

    assert Equal(a, b, c).to_nnf().equivalent(~a & ~b & ~c | a & b & c)