Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f7d6bc5

Browse files
ad71norvig
authored andcommitted
Added missing tests (aimacode#854)
1 parent 9c6eb1c commit f7d6bc5

File tree

1 file changed

+26
-6
lines changed

1 file changed

+26
-6
lines changed

tests/test_logic.py

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,9 @@ def test_dpll():
131131
assert (dpll_satisfiable(A & ~B & C & (A | ~D) & (~E | ~D) & (C | ~D) & (~A | ~F) & (E | ~F)
132132
& (~D | ~F) & (B | ~C | D) & (A | ~E | F) & (~A | E | D))
133133
== {B: False, C: True, A: True, F: False, D: True, E: False})
134+
assert dpll_satisfiable(A & B & ~C & D) == {C: False, A: True, D: True, B: True}
135+
assert dpll_satisfiable((A | (B & C)) |'<=>'| ((A | B) & (A | C))) == {C: True, A: True} or {C: True, B: True}
136+
assert dpll_satisfiable(A |'<=>'| B) == {A: True, B: True}
134137
assert dpll_satisfiable(A & ~B) == {A: True, B: False}
135138
assert dpll_satisfiable(P & ~P) is False
136139

@@ -154,6 +157,9 @@ def test_find_unit_clause():
154157
def test_unify():
155158
assert unify(x, x, {}) == {}
156159
assert unify(x, 3, {}) == {x: 3}
160+
assert unify(x & 4 & y, 6 & y & 4, {}) == {x: 6, y: 4}
161+
assert unify(expr('A(x)'), expr('A(B)')) == {x: B}
162+
assert unify(expr('American(x) & Weapon(B)'), expr('American(A) & Weapon(y)')) == {x: A, y: B}
157163

158164

159165
def test_pl_fc_entails():
@@ -169,6 +175,9 @@ def test_tt_entails():
169175
assert tt_entails(P & Q, Q)
170176
assert not tt_entails(P | Q, Q)
171177
assert tt_entails(A & (B | C) & E & F & ~(P | Q), A & E & F & ~P & ~Q)
178+
assert not tt_entails(P |'<=>'| Q, Q)
179+
assert tt_entails((P |'==>'| Q) & P, Q)
180+
assert not tt_entails((P |'<=>'| Q) & ~P, Q)
172181

173182

174183
def test_prop_symbols():
@@ -222,30 +231,39 @@ def test_move_not_inwards():
222231

223232

224233
def test_distribute_and_over_or():
225-
def test_enatilment(s, has_and = False):
234+
def test_entailment(s, has_and = False):
226235
result = distribute_and_over_or(s)
227236
if has_and:
228237
assert result.op == '&'
229238
assert tt_entails(s, result)
230239
assert tt_entails(result, s)
231-
test_enatilment((A & B) | C, True)
232-
test_enatilment((A | B) & C, True)
233-
test_enatilment((A | B) | C, False)
234-
test_enatilment((A & B) | (C | D), True)
240+
test_entailment((A & B) | C, True)
241+
test_entailment((A | B) & C, True)
242+
test_entailment((A | B) | C, False)
243+
test_entailment((A & B) | (C | D), True)
244+
235245

236246
def test_to_cnf():
237247
assert (repr(to_cnf(wumpus_world_inference & ~expr('~P12'))) ==
238248
"((~P12 | B11) & (~P21 | B11) & (P12 | P21 | ~B11) & ~B11 & P12)")
239249
assert repr(to_cnf((P & Q) | (~P & ~Q))) == '((~P | P) & (~Q | P) & (~P | Q) & (~Q | Q))'
250+
assert repr(to_cnf('A <=> B')) == '((A | ~B) & (B | ~A))'
240251
assert repr(to_cnf("B <=> (P1 | P2)")) == '((~P1 | B) & (~P2 | B) & (P1 | P2 | ~B))'
252+
assert repr(to_cnf('A <=> (B & C)')) == '((A | ~B | ~C) & (B | ~A) & (C | ~A))'
241253
assert repr(to_cnf("a | (b & c) | d")) == '((b | a | d) & (c | a | d))'
242254
assert repr(to_cnf("A & (B | (D & E))")) == '(A & (D | B) & (E | B))'
243255
assert repr(to_cnf("A | (B | (C | (D & E)))")) == '((D | A | B | C) & (E | A | B | C))'
256+
assert repr(to_cnf('(A <=> ~B) ==> (C | ~D)')) == '((B | ~A | C | ~D) & (A | ~A | C | ~D) & (B | ~B | C | ~D) & (A | ~B | C | ~D))'
244257

245258

246259
def test_pl_resolution():
247-
# TODO: Add fast test cases
248260
assert pl_resolution(wumpus_kb, ~P11)
261+
assert pl_resolution(wumpus_kb, ~B11)
262+
assert not pl_resolution(wumpus_kb, P22)
263+
assert pl_resolution(horn_clauses_KB, A)
264+
assert pl_resolution(horn_clauses_KB, B)
265+
assert not pl_resolution(horn_clauses_KB, P)
266+
assert not pl_resolution(definite_clauses_KB, P)
249267

250268

251269
def test_standardize_variables():
@@ -302,8 +320,10 @@ def check_SAT(clauses, single_solution={}):
302320
check_SAT([A & B, A & C])
303321
check_SAT([A | B, P & Q, P & B])
304322
check_SAT([A & B, C | D, ~(D | P)], {A: True, B: True, C: True, D: False, P: False})
323+
check_SAT([A, B, ~C, D], {C: False, A: True, B: True, D: True})
305324
# Test WalkSat for problems without solution
306325
assert WalkSAT([A & ~A], 0.5, 100) is None
326+
assert WalkSAT([A & B, C | D, ~(D | B)], 0.5, 100) is None
307327
assert WalkSAT([A | B, ~A, ~(B | C), C | D, P | Q], 0.5, 100) is None
308328
assert WalkSAT([A | B, B & C, C | D, D & A, P, ~P], 0.5, 100) is None
309329

0 commit comments

Comments
 (0)