def setUp(self): """ Setup function for clause/literal unit tests. Initialize variables needed throughout the tests. """ print() self.formulas = """ ![X]:(a(X) ~| ~a=b) ![X]:(a(X)|b(X)|?[X,Y]:(p(X,f(Y))<~>q(g(a),X))) ![X]:(a(X) <= ~a=b) ((((![X]:a(X))|b(X))|(?[X]:(?[Y]:p(X,f(Y)))))~&q(g(a),X)) ![X]:(a(X)|$true) """ lex = Lexer(self.formulas) self.f1 = parseFormula(lex) self.f2 = parseFormula(lex) self.f3 = parseFormula(lex) self.f4 = parseFormula(lex) self.f5 = parseFormula(lex) self.simple_ops = set(["", "!", "?", "~", "&", "|", "=>", "<=>"]) self.nnf_ops = set(["", "!", "?", "&", "|"]) self.covformulas = """ (a|$true) ($true|a) (a|$false) ($false|a) (a|a) (a&$true) ($true&a) (a&$false) ($false&a) (a&a) (a=>$true) ($true=>a) (a=>$false) ($false=>a) (a=>a) (a<=>$true) ($true<=>a) (a<=>$false) ($false<=>a) (a<=>a) ![X]:(a<=>a) ?[X]:(a<=>a) a<=>b """ self.testformulas = """
def testSimplification(self): """ Test that simplification works. """ f, m = formulaOpSimplify(self.f1) f, m = formulaSimplify(f) self.checkSimplificationResult(f) f, m = formulaOpSimplify(self.f2) f, m = formulaSimplify(f) self.checkSimplificationResult(f) f, m = formulaOpSimplify(self.f3) f, m = formulaSimplify(f) self.checkSimplificationResult(f) f, m = formulaOpSimplify(self.f4) f, m = formulaSimplify(f) self.checkSimplificationResult(f) f, m = formulaOpSimplify(self.f5) f, m = formulaSimplify(f) self.checkSimplificationResult(f) lex = Lexer(self.covformulas) while not lex.TestTok(Token.EOFToken): f = parseFormula(lex) f, m = formulaOpSimplify(f) f, m = formulaSimplify(f) self.checkSimplificationResult(f)
def testRenaming(self): """ Test variable renaming """ lex = Lexer("![X]:(p(X)|![X]:(q(X)&?[X]:r(X)))") f = parseFormula(lex) v1 = f.collectVars() self.assertEqual(v1, set(["X"])) v2 = f.collectFreeVars() self.assertEqual(v2, set()) f1 = formulaVarRename(f) print(f, f1) v1 = f1.collectVars() self.assertEqual(len(v1), 3) v2 = f1.collectFreeVars() self.assertEqual(v2, set())
def testMiniScope(self): """ Test Miniscoping. """ lex = Lexer(""" ![X]:(p(X)|q(a)) ?[X]:(p(a)&q(X)) ![X]:(p(X)&q(X)) ?[X]:(p(X)|q(X)) ![X]:(p(X)|q(X)) ![X,Y]:?[Z]:(p(Z)|q(X)) """) res = [True, True, True, True, False, True] while not lex.TestTok(Token.EOFToken): expected = res.pop(0) f = parseFormula(lex) f1, m = formulaMiniScope(f) print(f, f1, m, expected) self.assertEqual(expected, m) if m: self.assertTrue(not f1.isQuantified())
def testNNF(self): """ Test NNF transformation """ f, m = formulaOpSimplify(self.f1) f, m = formulaSimplify(f) f, m = formulaNNF(f, 1) self.checkNNFResult(f) f, m = formulaOpSimplify(self.f2) f, m = formulaSimplify(f) f, m = formulaNNF(f, 1) self.checkNNFResult(f) f, m = formulaOpSimplify(self.f3) f, m = formulaSimplify(f) f, m = formulaNNF(f, 1) self.checkNNFResult(f) f, m = formulaOpSimplify(self.f4) f, m = formulaSimplify(f) f, m = formulaNNF(f, 1) self.checkNNFResult(f) f, m = formulaOpSimplify(self.f5) f, m = formulaSimplify(f) f, m = formulaNNF(f, 1) self.checkNNFResult(f) lex = Lexer(self.covformulas) while not lex.TestTok(Token.EOFToken): f = parseFormula(lex) f, m = formulaOpSimplify(f) f, m = formulaSimplify(f) f, m = formulaNNF(f, 1) self.checkNNFResult(f)