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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy