Пример #1
0
def test_true():
    zdd = cudd_zdd.ZDD()
    zdd.declare('x', 'y', 'z', 'w')
    u = zdd.true
    assert u.low is not None
    assert u.high is not None
    assert len(u) == 4, len(u)
Пример #2
0
def test_true_node():
    zdd = cudd_zdd.ZDD()
    zdd.declare('x', 'y')
    u = zdd.true_node
    assert u.low is None
    assert u.high is None
    assert len(u) == 0, len(u)
Пример #3
0
def test_c_disjunction():
    zdd = cudd_zdd.ZDD()
    zdd.declare('w', 'x', 'y')
    v = zdd.add_expr('~ w /\ x')
    w = zdd.add_expr('y')
    u = cudd_zdd._c_disjoin(v, w)
    u_ = zdd.add_expr('(~ w /\ x) \/ y')
    assert u == u_, len(u)
Пример #4
0
def test_c_conjunction():
    zdd = cudd_zdd.ZDD()
    zdd.declare('x', 'y', 'z')
    x = zdd.var('x')
    y = zdd.var('y')
    u = cudd_zdd._c_conjoin(x, y)
    u_ = zdd.add_expr('x /\ y')
    assert u == u_, len(u)
Пример #5
0
def main():
    zdd = cudd_zdd.ZDD()
    zdd.declare('x', 'y', 'z')
    u = zdd.add_expr('(x /\ y) \/ z')
    let = dict(y=zdd.add_expr('~ x'))
    v = zdd.let(let, u)
    v_ = zdd.add_expr('z')
    assert v == v_, (v, v_)
Пример #6
0
def test_support_cudd():
    # support implemented by CUDD
    zdd = cudd_zdd.ZDD()
    zdd.declare('x', 'y')
    zdd._add_bdd_var(0)
    zdd._add_bdd_var(1)
    u = zdd.add_expr('~ x')
    s = zdd._support_cudd(u)
    assert s == {'y'}, s  # `{'x'}` is expected
Пример #7
0
def test_dump():
    zdd = cudd_zdd.ZDD()
    zdd.declare('x', 'y', 'w')
    u = zdd.add_expr('~ w')
    fname = 'not_w.pdf'
    if os.path.isfile(fname):
        os.remove(fname)
    assert not os.path.isfile(fname)
    zdd.dump(fname, [u])
    assert os.path.isfile(fname)
Пример #8
0
def test_find_or_add():
    bdd = cudd_zdd.ZDD()
    bdd.declare('x', 'y', 'z')
    v = bdd.add_expr('~ x /\ y /\ ~ z')
    w = bdd.add_expr('~ x /\ ~ y /\ z')
    u = bdd.find_or_add('x', v, w)
    assert u.low == v, len(u)
    assert u.high == w, len(u)
    assert u.var == 'x', u.var
    assert u.level == 0, u.level
Пример #9
0
def test_cudd_cofactor():
    zdd = cudd_zdd.ZDD()
    zdd.declare('x', 'y')
    u = zdd.add_expr('x /\ ~ y')
    r = zdd._cofactor_cudd(u, 'y', False)
    r_ = zdd.add_expr('x /\ ~ y')
    assert r == r_, len(r)
    u = zdd.add_expr('x /\ y')
    r = zdd._cofactor_cudd(u, 'x', True)
    r_ = zdd.add_expr('~ x /\ y')  # no node at x
    assert r == r_
Пример #10
0
def test_conjunction():
    zdd = cudd_zdd.ZDD()
    zdd.declare('x', 'y', 'z')
    v = zdd.var('x')
    w = zdd.var('y')
    u = zdd._conjoin_root(v, w)
    u_ = zdd.add_expr('x /\ y')
    assert u == u_, len(u)
    u = zdd._conjoin_root(v, ~ w)
    u_ = zdd.add_expr('x /\ ~ y')
    assert u == u_, len(u)
Пример #11
0
def test_var():
    zdd = cudd_zdd.ZDD()
    zdd.declare('x', 'y', 'z')
    x = zdd.var('x')
    x_ = zdd._var_cudd('x')
    assert x == x_, len(x)
    y = zdd.var('y')
    y_ = zdd._var_cudd('y')
    assert y == y_, len(y)
    z = zdd.var('z')
    z_ = zdd._var_cudd('z')
    assert z == z_, len(z)
Пример #12
0
def test_dict_to_zdd():
    zdd = cudd_zdd.ZDD()
    zdd.declare('x', 'y', 'z')
    qvars = {'x', 'z'}
    u = cudd_zdd._dict_to_zdd(qvars, zdd)
    assert len(u) == 2, len(u)
    assert u.var == 'x', u.var
    assert u.low == u.high
    v = u.low
    assert v.var == 'z', v.var
    assert v.low == v.high
    assert v.low == zdd.true_node
Пример #13
0
def test_count():
    zdd = cudd_zdd.ZDD()
    zdd.declare('x', 'y')
    # FALSE
    u = zdd.false
    n = zdd.count(u, 2)
    assert n == 0, n
    # TRUE
    u = zdd.true
    n = zdd.count(u, 1)
    assert n == 2, n
    n = zdd.count(u, 2)
    assert n == 4, n
Пример #14
0
def test_bdd_to_zdd_copy():
    zdd = cudd_zdd.ZDD()
    zdd.declare('x', 'y', 'z')
    bdd = cudd.BDD()
    bdd.declare('x', 'y', 'z')
    u = bdd.add_expr('x')
    v = bdd.copy(u, zdd)
    x = zdd.var('x')
    assert v == x, len(v)
    print_size(v, 'v')
    # copy `y`
    u = bdd.var('y')
    y = bdd.copy(u, zdd)
    y_ = zdd.var('y')
    assert y == y_, (y, y_)
Пример #15
0
def test_len():
    zdd = cudd_zdd.ZDD()
    zdd.declare('x', 'y', 'z')
    # x
    x = zdd.var('x')
    assert len(x) == 3, len(x)
    # y
    y = zdd.var('y')
    assert len(y) == 3, len(y)
    # x /\ y /\ ~ z
    u = x & y & ~ zdd.var('z')
    assert len(u) == 2, len(u)
    # ~ x
    u = zdd.add_expr('~ x')
    assert len(u) == 2, len(u)
Пример #16
0
def test_c_exist():
    zdd = cudd_zdd.ZDD()
    zdd.declare('x', 'y', 'z')
    # \E x:  (x /\ ~ y) \/ ~ z
    u = zdd.add_expr('(x /\ ~ y) \/ ~ z')
    qvars = ['x']
    r = cudd_zdd._c_exist(qvars, u)
    r_ = zdd.exist(qvars, u)
    assert r == r_, len(r)
    # \E x:  x
    u = zdd.add_expr('x')
    qvars = ['x']
    r = cudd_zdd._c_exist(qvars, u)
    r_ = zdd.exist(qvars, u)
    assert r == r_, len(r)
Пример #17
0
def test_disjunction():
    zdd = cudd_zdd.ZDD()
    zdd.declare('w', 'x', 'y')
    # x \/ TRUE
    v = zdd.add_expr('x')
    w = zdd.true
    u = zdd._disjoin_root(v, w)
    assert u == w, len(u)
    # x \/ FALSE
    w = zdd.false
    u = zdd._disjoin_root(v, w)
    assert u == v, len(u)
    # x \/ y
    v = zdd.add_expr('x')
    w = zdd.add_expr('y')
    u = zdd._disjoin_root(v, w)
    u_ = zdd.add_expr('x \/ y')
    assert u == u_, len(u)
    # (~ w /\ x) \/ y
    v = zdd.add_expr('~ w /\ x')
    w = zdd.add_expr('y')
    u = zdd._disjoin_root(v, w)
    u_ = zdd.add_expr('(~ w /\ x) \/ y')
    assert u == u_, len(u)
Пример #18
0
def test_false():
    zdd = cudd_zdd.ZDD()
    u = zdd.false
    assert len(u) == 0, len(u)