|
12 | 12 |
|
13 | 13 | import nnf |
14 | 14 |
|
15 | | -from nnf import Var, And, Or, amc, dimacs, dsharp, operators, tseitin |
| 15 | +from nnf import Var, And, Or, amc, dimacs, dsharp, operators, \ |
| 16 | + tseitin, complete_models |
16 | 17 |
|
17 | 18 | settings.register_profile('patient', deadline=2000, |
18 | 19 | suppress_health_check=(HealthCheck.too_slow,)) |
@@ -766,14 +767,24 @@ def test_tseitin(sentence: nnf.NNF): |
766 | 767 | assert T.is_CNF() |
767 | 768 |
|
768 | 769 | # Only do the following checks when we haven't simplified away some vars |
769 | | - assume(sentence.vars() <= T.vars()) |
| 770 | + # assume(sentence.vars() <= T.vars()) |
770 | 771 |
|
771 | 772 | # TODO: Once forgetting/projection is implemented, |
772 | 773 | # do this more complete check |
773 | 774 | # aux = filter(lambda x: 'aux' in str(x.name), T.vars()) |
774 | 775 | # assert T.forget(aux).equivalent(sentence) |
775 | 776 |
|
| 777 | + models = list(complete_models(T.models(), sentence.vars() | T.vars())) |
| 778 | + |
776 | 779 | for mt in T.models(): |
777 | 780 | assert sentence.satisfied_by(mt) |
778 | 781 |
|
779 | 782 | assert T.model_count() == sentence.model_count() |
| 783 | + |
| 784 | +@given(models()) |
| 785 | +def test_complete_models(model: nnf.And[nnf.Var]): |
| 786 | + t0, t1, t2 = [], ['test1'], ['test1', 'test2'] |
| 787 | + m = {v.name: v.true for v in model} |
| 788 | + assert 1 == len(list(complete_models([m], list(m.keys())+t0))) |
| 789 | + assert 2 == len(list(complete_models([m], list(m.keys())+t1))) |
| 790 | + assert 4 == len(list(complete_models([m], list(m.keys())+t2))) |
0 commit comments