@@ -254,6 +254,70 @@ def test_mrv():
254
254
assert mrv (assignment , csp ) == 'C'
255
255
256
256
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
+
257
321
def test_backtracking_search ():
258
322
assert backtracking_search (australia )
259
323
assert backtracking_search (australia , select_unassigned_variable = mrv )
0 commit comments