Skip to content

Commit a574f97

Browse files
committed
Add new tests to test_csp.py
1 parent 28c4948 commit a574f97

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

tests/test_csp.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,70 @@ def test_mrv():
254254
assert mrv(assignment, csp) == 'C'
255255

256256

257+
def test_unordered_domain_values():
258+
map_coloring_test = MapColoringCSP(list('123'), 'A: B C; B: C; C: ')
259+
assignment = None
260+
assert unordered_domain_values('A', assignment, map_coloring_test) == ['1', '2', '3']
261+
262+
263+
def test_lcv():
264+
neighbors = parse_neighbors('A: B; B: C; C: ')
265+
domains = {'A': [0, 1, 2, 3, 4], 'B': [0, 1, 2, 3, 4, 5], 'C': [0, 1, 2, 3, 4]}
266+
constraints = lambda X, x, Y, y: x % 2 == 0 and (x+y) == 4
267+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
268+
assignment = {'A': 0}
269+
270+
var = 'B'
271+
272+
assert lcv(var, assignment, csp) == [4, 0, 1, 2, 3, 5]
273+
assignment = {'A': 1, 'C': 3}
274+
275+
constraints = lambda X, x, Y, y: (x + y) % 2 == 0 and (x + y) < 5
276+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
277+
278+
assert lcv(var, assignment, csp) == [1, 3, 0, 2, 4, 5]
279+
280+
281+
def test_forward_checking():
282+
neighbors = parse_neighbors('A: B; B: C; C: ')
283+
domains = {'A': [0, 1, 2, 3, 4], 'B': [0, 1, 2, 3, 4, 5], 'C': [0, 1, 2, 3, 4]}
284+
constraints = lambda X, x, Y, y: (x + y) % 2 == 0 and (x + y) < 8
285+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
286+
287+
csp.support_pruning()
288+
A_curr_domains = csp.curr_domains['A']
289+
C_curr_domains = csp.curr_domains['C']
290+
291+
var = 'B'
292+
value = 3
293+
assignment = {'A': 1, 'C': '3'}
294+
assert forward_checking(csp, var, value, assignment, None) == True
295+
assert csp.curr_domains['A'] == A_curr_domains
296+
assert csp.curr_domains['C'] == C_curr_domains
297+
298+
assignment = {'C': 3}
299+
300+
assert forward_checking(csp, var, value, assignment, None) == True
301+
assert csp.curr_domains['A'] == [1, 3]
302+
303+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
304+
csp.support_pruning()
305+
306+
assignment = {}
307+
assert forward_checking(csp, var, value, assignment, None) == True
308+
assert csp.curr_domains['A'] == [1, 3]
309+
assert csp.curr_domains['C'] == [1, 3]
310+
311+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
312+
domains = {'A': [0, 1, 2, 3, 4], 'B': [0, 1, 2, 3, 4, 7], 'C': [0, 1, 2, 3, 4]}
313+
csp.support_pruning()
314+
315+
value = 7
316+
assignment = {}
317+
assert forward_checking(csp, var, value, assignment, None) == False
318+
assert (csp.curr_domains['A'] == [] or csp.curr_domains['C'] == [])
319+
320+
257321
def test_backtracking_search():
258322
assert backtracking_search(australia)
259323
assert backtracking_search(australia, select_unassigned_variable=mrv)

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