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

Skip to content

Commit c82fddc

Browse files
JaakTepandiantmarakis
authored andcommitted
Update test_csp.py (issue #287) (#1073)
Cover or use at least once in tests classes, methods, and non-debugging functions of csp.py (version 18.04.2019). Issue #287.
1 parent cd6e65d commit c82fddc

File tree

1 file changed

+124
-0
lines changed

1 file changed

+124
-0
lines changed

tests/test_csp.py

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,5 +437,129 @@ def test_tree_csp_solver():
437437
(tcs['NT'] == 'B' and tcs['WA'] == 'R' and tcs['Q'] == 'R' and tcs['NSW'] == 'B' and tcs['V'] == 'R')
438438

439439

440+
def test_different_values_constraint():
441+
assert different_values_constraint('A', 1, 'B', 2) == True
442+
assert different_values_constraint('A', 1, 'B', 1) == False
443+
444+
445+
def test_flatten():
446+
sequence = [[0, 1, 2], [4, 5]]
447+
assert flatten(sequence) == [0, 1, 2, 4, 5]
448+
449+
450+
def test_sudoku():
451+
h = Sudoku(easy1)
452+
assert backtracking_search(h, select_unassigned_variable=mrv, inference=forward_checking) is not None
453+
g = Sudoku(harder1)
454+
assert backtracking_search(g, select_unassigned_variable=mrv, inference=forward_checking) is not None
455+
456+
457+
def test_make_arc_consistent():
458+
neighbors = parse_neighbors('A: B; B: ')
459+
domains = {'A': [0], 'B': [3]}
460+
constraints = lambda X, x, Y, y: x % 2 == 0 and (x + y) == 4
461+
462+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
463+
csp.support_pruning()
464+
Xi = 'A'
465+
Xj = 'B'
466+
467+
assert make_arc_consistent(Xi, Xj, csp) == []
468+
469+
domains = {'A': [0], 'B': [4]}
470+
constraints = lambda X, x, Y, y: x % 2 == 0 and (x + y) == 4
471+
472+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
473+
csp.support_pruning()
474+
Xi = 'A'
475+
Xj = 'B'
476+
477+
assert make_arc_consistent(Xi, Xj, csp) == [0]
478+
479+
domains = {'A': [0, 1, 2, 3, 4], 'B': [0, 1, 2, 3, 4]}
480+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
481+
csp.support_pruning()
482+
483+
assert make_arc_consistent(Xi, Xj, csp) == [0, 2, 4]
484+
485+
def test_assign_value():
486+
neighbors = parse_neighbors('A: B; B: ')
487+
domains = {'A': [0, 1, 2, 3, 4], 'B': [0, 1, 2, 3, 4]}
488+
constraints = lambda X, x, Y, y: x % 2 == 0 and (x + y) == 4
489+
Xi = 'A'
490+
Xj = 'B'
491+
492+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
493+
csp.support_pruning()
494+
495+
assignment = {'A': 1}
496+
assert assign_value(Xi, Xj, csp, assignment) is None
497+
498+
assignment = {'A': 2}
499+
assert assign_value(Xi, Xj, csp, assignment) == 2
500+
501+
constraints = lambda X, x, Y, y: (x + y) == 4
502+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
503+
csp.support_pruning()
504+
505+
assignment = {'A': 1}
506+
assert assign_value(Xi, Xj, csp, assignment) == 3
507+
508+
def test_no_inference():
509+
neighbors = parse_neighbors('A: B; B: ')
510+
domains = {'A': [0, 1, 2, 3, 4], 'B': [0, 1, 2, 3, 4, 5]}
511+
constraints = lambda X, x, Y, y: (x + y) < 8
512+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
513+
514+
var = 'B'
515+
value = 3
516+
assignment = {'A': 1}
517+
assert no_inference(csp, var, value, assignment, None) == True
518+
519+
520+
def test_mac():
521+
neighbors = parse_neighbors('A: B; B: ')
522+
domains = {'A': [0], 'B': [0]}
523+
constraints = lambda X, x, Y, y: x % 2 == 0
524+
var = 'B'
525+
value = 0
526+
assignment = {'A': 0}
527+
528+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
529+
assert mac(csp, var, value, assignment, None) == True
530+
531+
neighbors = parse_neighbors('A: B; B: ')
532+
domains = {'A': [0, 1, 2, 3, 4], 'B': [0, 1, 2, 3, 4]}
533+
constraints = lambda X, x, Y, y: x % 2 == 0 and (x + y) == 4 and y % 2 != 0
534+
var = 'B'
535+
value = 3
536+
assignment = {'A': 1}
537+
538+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
539+
assert mac(csp, var, value, assignment, None) == False
540+
541+
constraints = lambda X, x, Y, y: x % 2 != 0 and (x + y) == 6 and y % 2 != 0
542+
csp = CSP(variables=None, domains=domains, neighbors=neighbors, constraints=constraints)
543+
assert mac(csp, var, value, assignment, None) == True
544+
545+
def test_queen_constraint():
546+
assert queen_constraint(0, 1, 0, 1) == True
547+
assert queen_constraint(2, 1, 4, 2) == True
548+
assert queen_constraint(2, 1, 3, 2) == False
549+
550+
551+
def test_zebra():
552+
z = Zebra()
553+
algorithm=min_conflicts
554+
# would take very long
555+
ans = algorithm(z, max_steps=10000)
556+
assert ans is None or ans == {'Red': 3, 'Yellow': 1, 'Blue': 2, 'Green': 5, 'Ivory': 4, 'Dog': 4, 'Fox': 1, 'Snails': 3, 'Horse': 2, 'Zebra': 5, 'OJ': 4, 'Tea': 2, 'Coffee': 5, 'Milk': 3, 'Water': 1, 'Englishman': 3, 'Spaniard': 4, 'Norwegian': 1, 'Ukranian': 2, 'Japanese': 5, 'Kools': 1, 'Chesterfields': 2, 'Winston': 3, 'LuckyStrike': 4, 'Parliaments': 5}
557+
558+
# restrict search space
559+
z.domains = {'Red': [3, 4], 'Yellow': [1, 2], 'Blue': [1, 2], 'Green': [4, 5], 'Ivory': [4, 5], 'Dog': [4, 5], 'Fox': [1, 2], 'Snails': [3], 'Horse': [2], 'Zebra': [5], 'OJ': [1, 2, 3, 4, 5], 'Tea': [1, 2, 3, 4, 5], 'Coffee': [1, 2, 3, 4, 5], 'Milk': [3], 'Water': [1, 2, 3, 4, 5], 'Englishman': [1, 2, 3, 4, 5], 'Spaniard': [1, 2, 3, 4, 5], 'Norwegian': [1], 'Ukranian': [1, 2, 3, 4, 5], 'Japanese': [1, 2, 3, 4, 5], 'Kools': [1, 2, 3, 4, 5], 'Chesterfields': [1, 2, 3, 4, 5], 'Winston': [1, 2, 3, 4, 5], 'LuckyStrike': [1, 2, 3, 4, 5], 'Parliaments': [1, 2, 3, 4, 5]}
560+
ans = algorithm(z, max_steps=10000)
561+
assert ans == {'Red': 3, 'Yellow': 1, 'Blue': 2, 'Green': 5, 'Ivory': 4, 'Dog': 4, 'Fox': 1, 'Snails': 3, 'Horse': 2, 'Zebra': 5, 'OJ': 4, 'Tea': 2, 'Coffee': 5, 'Milk': 3, 'Water': 1, 'Englishman': 3, 'Spaniard': 4, 'Norwegian': 1, 'Ukranian': 2, 'Japanese': 5, 'Kools': 1, 'Chesterfields': 2, 'Winston': 3, 'LuckyStrike': 4, 'Parliaments': 5}
562+
563+
440564
if __name__ == "__main__":
441565
pytest.main()

0 commit comments

Comments
 (0)