Exemplo n.º 1
0
def test_AlignHorizontal_nblock_checking(solver):
    x = constraint.AlignHorizontal(blocks=[], alignment='top')
    with pytest.raises(AssertionError):
        x.check()
    x = constraint.AlignHorizontal(blocks=['M1'], alignment='top')
    with pytest.raises(AssertionError):
        x.check()
Exemplo n.º 2
0
def test_ConstraintDB_incremental_checking(db):
    '''
    ConstraintDB can be used to run experiments
    using checkpoint() and revert() methods. There
    is an overhead so use sparingly
    '''
    # Experiment 1 : Success
    db.append(constraint.AlignHorizontal(blocks=['M1', 'M2', 'M3']))
    db.checkpoint()
    # Experiment 2 : Failure
    with pytest.raises(AssertionError):
        db.append(
            constraint.AlignHorizontal(blocks=['M3', 'M2'],
                                       alignment='bottom'))
    db.revert()
    # Experiment 3 : Success
    db.append(
        constraint.AlignHorizontal(blocks=['M4', 'M5'], alignment='bottom'))
    db.checkpoint()
    # Experiment 4: Failure
    with pytest.raises(AssertionError):
        db.append(
            constraint.AlignHorizontal(blocks=['M3', 'M2'],
                                       alignment='bottom'))
    db.revert()
    # Experiment 5: Success
    db.append(constraint.AlignHorizontal(blocks=['M2', 'M5']))
Exemplo n.º 3
0
def test_ConstraintDB_checking(db):
    db.append(constraint.AlignHorizontal(blocks=['M1', 'M2', 'M3']))
    db.append(
        constraint.AlignHorizontal(blocks=['M4', 'M5'], alignment='bottom'))
    with pytest.raises(AssertionError):
        db.append(
            constraint.AlignHorizontal(blocks=['M3', 'M2'],
                                       alignment='bottom'))
Exemplo n.º 4
0
def test_ConstraintDB_permissive():
    '''
    Check that it is possible to turn validation OFF
    NOT RECOMMENDED !! DO NOT DO THIS !!!
    '''
    db = constraint.ConstraintDB(validation=False)
    db.append(constraint.AlignHorizontal(blocks=['M1', 'M2']))
    db.append(constraint.AlignHorizontal(blocks=['M2', 'M1']))
Exemplo n.º 5
0
def test_AlignHorizontal_order_checking(solver):
    '''
    This is just a unittest of generated constraints

    Please use ConstraintDB to manage constraints
    (See test_ConstraintDB_checking() for example)
    '''
    x = constraint.AlignHorizontal(blocks=['M1', 'M2', 'M3'])
    solver.append(*x.check())
    assert solver.check() == z3.sat
    x = constraint.AlignHorizontal(blocks=['M4', 'M5'], alignment='bottom')
    solver.append(*x.check())
    assert solver.check() == z3.sat
    x = constraint.AlignHorizontal(blocks=['M3', 'M2'], alignment='bottom')
    solver.append(*x.check())
    with pytest.raises(AssertionError):
        assert solver.check() == z3.sat
Exemplo n.º 6
0
def test_ConstraintDB_nonincremental_revert(db):
    '''
    While it is possible to revert() back to a certain
    checkpoint() by name, needing to unroll multiple
    checkpoints can indicate suboptimal compiler design
    '''
    db.append(constraint.AlignHorizontal(blocks=['M1', 'M2']))
    idx = db.checkpoint()
    db.append(constraint.AlignHorizontal(blocks=['M1', 'M3']))
    db.checkpoint()
    db.append(constraint.AlignHorizontal(blocks=['M2', 'M3']))
    db.checkpoint()
    db.revert(idx)
    assert len(db) == 1
    assert len(db._commits) == 0
    if db._validation:
        assert 'M3' not in str(db._solver)
Exemplo n.º 7
0
def test_AlignHorizontal_input_sanitation(solver):
    x = constraint.AlignHorizontal(blocks=['M1', 'M2'], alignment='top')
    x = constraint.AlignHorizontal(blocks=['M1', 'M2', 'M3'], alignment='top')
    with pytest.raises(Exception):
        x = constraint.AlignHorizontal(blocks=['M1', 'M2', 'M3'],
                                       alignment='garbage')