@@ -43,11 +43,129 @@ def test_csp_actions():
43
43
state = {'A' : '1' , 'C' : '2' }
44
44
assert map_coloring_test .actions (state ) == [('B' , '3' )]
45
45
46
+ state = (('A' , '1' ), ('B' , '3' ))
47
+ assert map_coloring_test .actions (state ) == [('C' , '2' )]
48
+
46
49
state = {'A' : '1' }
47
50
assert (map_coloring_test .actions (state ) == [('C' , '2' ), ('C' , '3' )] or
48
51
map_coloring_test .actions (state ) == [('B' , '2' ), ('B' , '3' )])
49
52
50
53
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
+
51
169
def test_backtracking_search ():
52
170
assert backtracking_search (australia )
53
171
assert backtracking_search (australia , select_unassigned_variable = mrv )
0 commit comments