Esempio n. 1
0
def test_quantifier_syntax():
    b = BDD()
    [b.add_var(var) for var in ['x', 'y']]
    # constants
    u = b.add_expr('\E x: True')
    assert u == b.true, u
    u = b.add_expr('\E x, y: True')
    assert u == b.true, u
    u = b.add_expr('\E x: False')
    assert u == b.false, u
    u = b.add_expr('\A x: True')
    assert u == b.true, u
    u = b.add_expr('\A x: False')
    assert u == b.false, u
    u = b.add_expr('\A x, y: False')
    assert u == b.false, u
    # variables
    u = b.add_expr('\E x: x')
    assert u == b.true, u
    u = b.add_expr('\A x: x')
    assert u == b.false, u
    u = b.add_expr('\E x, y: x')
    assert u == b.true, u
    u = b.add_expr('\E x, y: y')
    assert u == b.true, u
    u = b.add_expr('\A x: y')
    assert u == b.var('y'), u
    u = b.add_expr('\A x: ! y')
    u_ = b.apply('not', b.var('y'))
    assert u == u_, (u, u_)
Esempio n. 2
0
def test_quantifier_syntax():
    b = BDD()
    [b.add_var(var) for var in ['x', 'y']]
    # constants
    u = b.add_expr('\E x: True')
    assert u == b.true, u
    u = b.add_expr('\E x, y: True')
    assert u == b.true, u
    u = b.add_expr('\E x: False')
    assert u == b.false, u
    u = b.add_expr('\A x: True')
    assert u == b.true, u
    u = b.add_expr('\A x: False')
    assert u == b.false, u
    u = b.add_expr('\A x, y: False')
    assert u == b.false, u
    # variables
    u = b.add_expr('\E x: x')
    assert u == b.true, u
    u = b.add_expr('\A x: x')
    assert u == b.false, u
    u = b.add_expr('\E x, y: x')
    assert u == b.true, u
    u = b.add_expr('\E x, y: y')
    assert u == b.true, u
    u = b.add_expr('\A x: y')
    assert u == b.var('y'), u
    u = b.add_expr('\A x: ! y')
    u_ = b.apply('not', b.var('y'))
    assert u == u_, (u, u_)
Esempio n. 3
0
def test_var():
    b = BDD()
    with nt.assert_raises(AssertionError):
        b.var('x')
    j = b.add_var('x')
    u = b.var('x')
    assert u > 0, u
    level, low, high = b.succ(u)
    assert level == j, (level, j)
    assert low == b.false, low
    assert high == b.true, high
Esempio n. 4
0
def test_rename_syntax():
    b = BDD()
    [b.add_var(var) for var in ['x', 'y', 'z', 'w']]
    # single substitution
    u = b.add_expr('\S y / x: True')
    assert u == b.true, u
    u = b.add_expr('\S y / x: False')
    assert u == b.false, u
    u = b.add_expr('\S y / x: x')
    u_ = b.add_expr('y')
    assert u == u_, (u, u_)
    u = b.add_expr('\S y / x: z')
    u_ = b.add_expr('z')
    assert u == u_, (u, u_)
    u = b.add_expr('\S y / x: x & z')
    u_ = b.add_expr('y & z')
    assert u == u_, (u, u_)
    # multiple substitution
    u = b.add_expr('\S y / x,  w / z: x & z')
    u_ = b.add_expr('y & w')
    assert u == u_, (u, u_)
    u = b.add_expr('\S y / x,  w / z: z | ! x')
    u_ = b.add_expr('w | ! y')
    assert u == u_, (u, u_)
Esempio n. 5
0
def test_rename_syntax():
    b = BDD()
    [b.add_var(var) for var in ['x', 'y', 'z', 'w']]
    # single substitution
    u = b.add_expr('\S y / x: True')
    assert u == b.true, u
    u = b.add_expr('\S y / x: False')
    assert u == b.false, u
    u = b.add_expr('\S y / x: x')
    u_ = b.add_expr('y')
    assert u == u_, (u, u_)
    u = b.add_expr('\S y / x: z')
    u_ = b.add_expr('z')
    assert u == u_, (u, u_)
    u = b.add_expr('\S y / x: x & z')
    u_ = b.add_expr('y & z')
    assert u == u_, (u, u_)
    # multiple substitution
    u = b.add_expr('\S y / x,  w / z: x & z')
    u_ = b.add_expr('y & w')
    assert u == u_, (u, u_)
    u = b.add_expr('\S y / x,  w / z: z | ! x')
    u_ = b.add_expr('w | ! y')
    assert u == u_, (u, u_)
Esempio n. 6
0
def test_add_var():
    b = BDD()
    #
    # automated level selection
    # first var
    j = b.add_var('x')
    assert len(b.vars) == 1, b.vars
    assert 'x' in b.vars, b.vars
    assert b.vars['x'] == 0, b.vars
    assert j == 0, j
    # second var
    j = b.add_var('y')
    assert len(b.vars) == 2, b.vars
    assert 'y' in b.vars, b.vars
    assert b.vars['y'] == 1, b.vars
    assert j == 1, j
    # third var
    j = b.add_var('z')
    assert len(b.vars) == 3, b.vars
    assert 'z' in b.vars, b.vars
    assert b.vars['z'] == 2, b.vars
    assert j == 2, j
    #
    # explicit level selection
    b = BDD()
    j = b.add_var('x', level=35)
    assert len(b.vars) == 1, b.vars
    assert 'x' in b.vars, b.vars
    assert b.vars['x'] == 35, b.vars
    assert j == 35, j
    j = b.add_var('y', level=5)
    assert len(b.vars) == 2, b.vars
    assert 'y' in b.vars, b.vars
    assert b.vars['y'] == 5, b.vars
    assert j == 5, j
    # attempt to add var at an existing level
    with nt.assert_raises(AssertionError):
        b.add_var('z', level=35)
    with nt.assert_raises(AssertionError):
        b.add_var('z', level=5)
    #
    # mixing automated and
    # explicit level selection
    b = BDD()
    b.add_var('x', level=2)
    b.add_var('y')
    assert len(b.vars) == 2, b.vars
    assert 'x' in b.vars, b.vars
    assert 'y' in b.vars, b.vars
    assert b.vars['x'] == 2, b.vars
    assert b.vars['y'] == 1, b.vars
    with nt.assert_raises(AssertionError):
        b.add_var('z')
    b.add_var('z', level=0)