def test_configure_dynamic_reordering(): bdd = _bdd.BDD() vrs = [ 'x', 'y', 'z', 'a', 'b', 'c', 'e', 'z1', 'z2', 'z3', 'y1', 'y2', 'y3' ] expr_1 = '(~ z \/ (c /\ b)) /\ e /\ (a /\ (~ x \/ y))' expr_2 = '(z1 /\ y1) \/ (z2 /\ y2) \/ (z3 /\ y3)' # w/o dynamic reordering bdd = _bdd.BDD() bdd.declare(*vrs) u = bdd.add_expr(expr_1) v = bdd.add_expr(expr_2) bdd.collect_garbage() n = len(bdd) assert n == 23, n # with dynamic reordering del u, v, bdd dd.bdd.REORDER_STARTS = 7 bdd = _bdd.BDD() bdd.declare(*vrs) bdd.configure(reordering=True) u = bdd.add_expr(expr_1) v = bdd.add_expr(expr_2) bdd.collect_garbage() n = len(bdd) assert n < 23, n
def test_collect_garbage(): bdd = _bdd.BDD() n = len(bdd) assert n == 1, n bdd.declare('x', 'y') u = bdd.add_expr('x \/ y') bdd.collect_garbage() n = len(bdd) assert n > 1, n del u bdd.collect_garbage() n = len(bdd) assert n == 1, n
def test_reorder_2(): bdd = _bdd.BDD() vrs = [ 'x', 'y', 'z', 'a', 'b', 'c', 'e', 'z1', 'z2', 'z3', 'y1', 'y2', 'y3' ] bdd = _bdd.BDD() bdd.declare(*vrs) expr_1 = '(~ z \/ (c /\ b)) /\ e /\ (a /\ (~ x \/ y))' # Figs. 6.24, 6.25 Baier 2008 expr_2 = '(z1 /\ y1) \/ (z2 /\ y2) \/ (z3 /\ y3)' u = bdd.add_expr(expr_1) v = bdd.add_expr(expr_2) bdd.collect_garbage() n = len(bdd) assert n == 23, n bdd.reorder() n_ = len(bdd) assert n > n_, (n, n_) bdd.assert_consistent()