| 
									
										
										
										
											2023-10-29 13:20:28 +01:00
										 |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2023-04-10 19:44:59 -04:00
										 |  |  | from .. import True_ | 
					
						
							| 
									
										
										
										
											2023-10-10 15:30:20 -05:00
										 |  |  | from ..logic import Received, Has, False_, And, Or | 
					
						
							| 
									
										
										
										
											2023-04-10 19:44:59 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-29 13:20:28 +01:00
										 |  |  | class TestSimplification(unittest.TestCase): | 
					
						
							|  |  |  |     def test_simplify_true_in_and(self): | 
					
						
							|  |  |  |         rules = { | 
					
						
							|  |  |  |             "Wood": True_(), | 
					
						
							|  |  |  |             "Rock": True_(), | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         summer = Received("Summer", 0, 1) | 
					
						
							|  |  |  |         self.assertEqual((Has("Wood", rules) & summer & Has("Rock", rules)).simplify(), | 
					
						
							|  |  |  |                          summer) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_simplify_false_in_or(self): | 
					
						
							|  |  |  |         rules = { | 
					
						
							|  |  |  |             "Wood": False_(), | 
					
						
							|  |  |  |             "Rock": False_(), | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         summer = Received("Summer", 0, 1) | 
					
						
							|  |  |  |         self.assertEqual((Has("Wood", rules) | summer | Has("Rock", rules)).simplify(), | 
					
						
							|  |  |  |                          summer) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_simplify_and_in_and(self): | 
					
						
							|  |  |  |         rule = And(And(Received('Summer', 0, 1), Received('Fall', 0, 1)), | 
					
						
							|  |  |  |                    And(Received('Winter', 0, 1), Received('Spring', 0, 1))) | 
					
						
							|  |  |  |         self.assertEqual(rule.simplify(), | 
					
						
							|  |  |  |                          And(Received('Summer', 0, 1), Received('Fall', 0, 1), | 
					
						
							|  |  |  |                              Received('Winter', 0, 1), Received('Spring', 0, 1))) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_simplify_duplicated_and(self): | 
					
						
							|  |  |  |         rule = And(And(Received('Summer', 0, 1), Received('Fall', 0, 1)), | 
					
						
							|  |  |  |                    And(Received('Summer', 0, 1), Received('Fall', 0, 1))) | 
					
						
							|  |  |  |         self.assertEqual(rule.simplify(), | 
					
						
							|  |  |  |                          And(Received('Summer', 0, 1), Received('Fall', 0, 1))) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_simplify_or_in_or(self): | 
					
						
							|  |  |  |         rule = Or(Or(Received('Summer', 0, 1), Received('Fall', 0, 1)), | 
					
						
							|  |  |  |                   Or(Received('Winter', 0, 1), Received('Spring', 0, 1))) | 
					
						
							|  |  |  |         self.assertEqual(rule.simplify(), | 
					
						
							|  |  |  |                          Or(Received('Summer', 0, 1), Received('Fall', 0, 1), Received('Winter', 0, 1), | 
					
						
							|  |  |  |                             Received('Spring', 0, 1))) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_simplify_duplicated_or(self): | 
					
						
							|  |  |  |         rule = And(Or(Received('Summer', 0, 1), Received('Fall', 0, 1)), | 
					
						
							|  |  |  |                    Or(Received('Summer', 0, 1), Received('Fall', 0, 1))) | 
					
						
							|  |  |  |         self.assertEqual(rule.simplify(), | 
					
						
							|  |  |  |                          Or(Received('Summer', 0, 1), Received('Fall', 0, 1))) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_simplify_true_in_or(self): | 
					
						
							|  |  |  |         rule = Or(True_(), Received('Summer', 0, 1)) | 
					
						
							|  |  |  |         self.assertEqual(rule.simplify(), True_()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_simplify_false_in_and(self): | 
					
						
							|  |  |  |         rule = And(False_(), Received('Summer', 0, 1)) | 
					
						
							|  |  |  |         self.assertEqual(rule.simplify(), False_()) |