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

Skip to content

Commit 7c5f283

Browse files
lucasmouranorvig
authored andcommitted
Add test to csp.py (aimacode#326)
Add tests to the following methods from CSP class * result * goal_test * support_prunning * suppose * prune * choices * infer_assignement * restore * conflicted_vars
1 parent 43fced5 commit 7c5f283

File tree

1 file changed

+118
-0
lines changed

1 file changed

+118
-0
lines changed

tests/test_csp.py

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,129 @@ def test_csp_actions():
4343
state = {'A': '1', 'C': '2'}
4444
assert map_coloring_test.actions(state) == [('B', '3')]
4545

46+
state = (('A', '1'), ('B', '3'))
47+
assert map_coloring_test.actions(state) == [('C', '2')]
48+
4649
state = {'A': '1'}
4750
assert (map_coloring_test.actions(state) == [('C', '2'), ('C', '3')] or
4851
map_coloring_test.actions(state) == [('B', '2'), ('B', '3')])
4952

5053

54+
def test_csp_result():
55+
map_coloring_test = MapColoringCSP(list('123'), 'A: B C; B: C; C: ')
56+
57+
state = (('A', '1'), ('B', '3'))
58+
action = ('C', '2')
59+
60+
assert map_coloring_test.result(state, action) == (('A', '1'), ('B', '3'), ('C', '2'))
61+
62+
63+
def test_csp_goal_test():
64+
map_coloring_test = MapColoringCSP(list('123'), 'A: B C; B: C; C: ')
65+
state = (('A', '1'), ('B', '3'), ('C', '2'))
66+
assert map_coloring_test.goal_test(state) is True
67+
68+
state = (('A', '1'), ('C', '2'))
69+
assert map_coloring_test.goal_test(state) is False
70+
71+
72+
def test_csp_support_pruning():
73+
map_coloring_test = MapColoringCSP(list('123'), 'A: B C; B: C; C: ')
74+
map_coloring_test.support_pruning()
75+
assert map_coloring_test.curr_domains == {'A': ['1', '2', '3'], 'B': ['1', '2', '3'],
76+
'C': ['1', '2', '3']}
77+
78+
79+
def test_csp_suppose():
80+
map_coloring_test = MapColoringCSP(list('123'), 'A: B C; B: C; C: ')
81+
var = 'A'
82+
value = '1'
83+
84+
removals = map_coloring_test.suppose(var, value)
85+
86+
assert removals == [('A', '2'), ('A', '3')]
87+
assert map_coloring_test.curr_domains == {'A': ['1'], 'B': ['1', '2', '3'],
88+
'C': ['1', '2', '3']}
89+
90+
91+
def test_csp_prune():
92+
map_coloring_test = MapColoringCSP(list('123'), 'A: B C; B: C; C: ')
93+
removals = None
94+
var = 'A'
95+
value = '3'
96+
97+
map_coloring_test.support_pruning()
98+
map_coloring_test.prune(var, value, removals)
99+
assert map_coloring_test.curr_domains == {'A': ['1', '2'], 'B': ['1', '2', '3'],
100+
'C': ['1', '2', '3']}
101+
assert removals is None
102+
103+
map_coloring_test = MapColoringCSP(list('123'), 'A: B C; B: C; C: ')
104+
removals = [('A', '2')]
105+
map_coloring_test.support_pruning()
106+
map_coloring_test.prune(var, value, removals)
107+
assert map_coloring_test.curr_domains == {'A': ['1', '2'], 'B': ['1', '2', '3'],
108+
'C': ['1', '2', '3']}
109+
assert removals == [('A', '2'), ('A', '3')]
110+
111+
112+
def test_csp_choices():
113+
map_coloring_test = MapColoringCSP(list('123'), 'A: B C; B: C; C: ')
114+
var = 'A'
115+
assert map_coloring_test.choices(var) == ['1', '2', '3']
116+
117+
map_coloring_test.support_pruning()
118+
removals = None
119+
value = '3'
120+
map_coloring_test.prune(var, value, removals)
121+
assert map_coloring_test.choices(var) == ['1', '2']
122+
123+
124+
def test_csp_infer_assignement():
125+
map_coloring_test = MapColoringCSP(list('123'), 'A: B C; B: C; C: ')
126+
map_coloring_test.infer_assignment() == {}
127+
128+
var = 'A'
129+
value = '3'
130+
map_coloring_test.prune(var, value, None)
131+
value = '1'
132+
map_coloring_test.prune(var, value, None)
133+
134+
map_coloring_test.infer_assignment() == {'A': '2'}
135+
136+
137+
def test_csp_restore():
138+
map_coloring_test = MapColoringCSP(list('123'), 'A: B C; B: C; C: ')
139+
map_coloring_test.curr_domains = {'A': ['2', '3'], 'B': ['1'], 'C': ['2', '3']}
140+
removals = [('A', '1'), ('B', '2'), ('B', '3')]
141+
142+
map_coloring_test.restore(removals)
143+
144+
assert map_coloring_test.curr_domains == {'A': ['2', '3', '1'], 'B': ['1', '2', '3'],
145+
'C': ['2', '3']}
146+
147+
148+
def test_csp_conflicted_vars():
149+
map_coloring_test = MapColoringCSP(list('123'), 'A: B C; B: C; C: ')
150+
151+
current = {}
152+
var = 'A'
153+
val = '1'
154+
map_coloring_test.assign(var, val, current)
155+
156+
var = 'B'
157+
val = '3'
158+
map_coloring_test.assign(var, val, current)
159+
160+
var = 'C'
161+
val = '3'
162+
map_coloring_test.assign(var, val, current)
163+
164+
conflicted_vars = map_coloring_test.conflicted_vars(current)
165+
166+
assert (conflicted_vars == ['B', 'C'] or conflicted_vars == ['C', 'B'])
167+
168+
51169
def test_backtracking_search():
52170
assert backtracking_search(australia)
53171
assert backtracking_search(australia, select_unassigned_variable=mrv)

0 commit comments

Comments
 (0)