@@ -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+
51169def test_backtracking_search ():
52170 assert backtracking_search (australia )
53171 assert backtracking_search (australia , select_unassigned_variable = mrv )
0 commit comments