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

Skip to content

Commit bf15924

Browse files
lucasmouranorvig
authored andcommitted
Add more tests to csp.py (aimacode#328)
Add test for the following functions from csp.py * revise * AC3 * first_unassigned_variable * num_legal_values * mrv
1 parent 1b82e4d commit bf15924

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed

tests/test_csp.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,94 @@ def test_csp_conflicted_vars():
166166
assert (conflicted_vars == ['B', 'C'] or conflicted_vars == ['C', 'B'])
167167

168168

169+
def test_revise():
170+
neighbors = parse_neighbors('A: B; B: ')
171+
domains = {'A': [0], 'B': [4]}
172+
constraints = lambda X, x, Y, y: x % 2 == 0 and (x+y) == 4
173+
174+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
175+
csp.support_pruning()
176+
Xi = 'A'
177+
Xj = 'B'
178+
removals = []
179+
180+
assert revise(csp, Xi, Xj, removals) is False
181+
assert len(removals) == 0
182+
183+
domains = {'A': [0, 1, 2, 3, 4], 'B': [0, 1, 2, 3, 4]}
184+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
185+
csp.support_pruning()
186+
187+
assert revise(csp, Xi, Xj, removals) is True
188+
assert removals == [('A', 1), ('A', 3)]
189+
190+
191+
def test_AC3():
192+
neighbors = parse_neighbors('A: B; B: ')
193+
domains = {'A': [0, 1, 2, 3, 4], 'B': [0, 1, 2, 3, 4]}
194+
constraints = lambda X, x, Y, y: x % 2 == 0 and (x+y) == 4 and y % 2 != 0
195+
removals = []
196+
197+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
198+
199+
assert AC3(csp, removals=removals) is False
200+
201+
constraints = lambda X, x, Y, y: (x % 2) == 0 and (x+y) == 4
202+
removals = []
203+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
204+
205+
assert AC3(csp, removals=removals) is True
206+
assert (removals == [('A', 1), ('A', 3), ('B', 1), ('B', 3)] or
207+
removals == [('B', 1), ('B', 3), ('A', 1), ('A', 3)])
208+
209+
210+
def test_first_unassigned_variable():
211+
map_coloring_test = MapColoringCSP(list('123'), 'A: B C; B: C; C: ')
212+
assignment = {'A': '1', 'B': '2'}
213+
assert first_unassigned_variable(assignment, map_coloring_test) == 'C'
214+
215+
assignment = {'B': '1'}
216+
assert (first_unassigned_variable(assignment, map_coloring_test) == 'A' or
217+
first_unassigned_variable(assignment, map_coloring_test) == 'C')
218+
219+
220+
def test_num_legal_values():
221+
map_coloring_test = MapColoringCSP(list('123'), 'A: B C; B: C; C: ')
222+
map_coloring_test.support_pruning()
223+
var = 'A'
224+
assignment = {}
225+
226+
assert num_legal_values(map_coloring_test, var, assignment) == 3
227+
228+
map_coloring_test = MapColoringCSP(list('RGB'), 'A: B C; B: C; C: ')
229+
assignment = {'A': 'R', 'B': 'G'}
230+
var = 'C'
231+
232+
assert num_legal_values(map_coloring_test, var, assignment) == 1
233+
234+
235+
def test_mrv():
236+
neighbors = parse_neighbors('A: B; B: C; C: ')
237+
domains = {'A': [0, 1, 2, 3, 4], 'B': [4], 'C': [0, 1, 2, 3, 4]}
238+
constraints = lambda X, x, Y, y: x % 2 == 0 and (x+y) == 4
239+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
240+
assignment = {'A': 0}
241+
242+
assert mrv(assignment, csp) == 'B'
243+
244+
domains = {'A': [0, 1, 2, 3, 4], 'B': [0, 1, 2, 3, 4], 'C': [0, 1, 2, 3, 4]}
245+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
246+
247+
assert (mrv(assignment, csp) == 'B' or
248+
mrv(assignment, csp) == 'C')
249+
250+
domains = {'A': [0, 1, 2, 3, 4], 'B': [0, 1, 2, 3, 4, 5, 6], 'C': [0, 1, 2, 3, 4]}
251+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
252+
csp.support_pruning()
253+
254+
assert mrv(assignment, csp) == 'C'
255+
256+
169257
def test_backtracking_search():
170258
assert backtracking_search(australia)
171259
assert backtracking_search(australia, select_unassigned_variable=mrv)

0 commit comments

Comments
 (0)