Пример #1
0
 def test_invert(self):
     c1, c2 = Dummy(True), Dummy(False)
     n1 = ConditionNode([c1, c2])
     n2 = ~n1
     # Get rid of the extra node added by negation.
     n2.collapse()
     self.assertIsNot(n1, n2)
     self.assertIsNot(n1.children[0], n2.children[0])
     self.assertIsNot(n1.children[1], n2.children[1])
     self.assertNotEqual(n1.connector, n2.connector)
     self.assertEqual(n1.evaluate(), not n2.evaluate())
Пример #2
0
 def test_add_third(self):
     c1, c2, c3 = Dummy(True), Dummy(True), Dummy(False)
     n = ConditionNode([c1, c2])
     n.add(c3, AND)
     self.assertEqual(n.children, [c1, c2, c3])
     self.assertEqual(n.connector, AND)
     # but when you change the connector...
     c4 = Dummy(False)
     n.add(c4, OR)
     self.assertEqual(len(n), 2)
     self.assertEqual(n.connector, OR)
     self.assertIs(n.children[1], c4)
     self.assertEqual(n.children[0].children, [c1, c2, c3])
     self.assertEqual(n.children[0].connector, AND)
Пример #3
0
 def test_negate(self):
     c1, c2 = Dummy(True), Dummy(False)
     n = ConditionNode([c1, c2])
     result = n.evaluate()
     n.negate()
     self.assertEqual(len(n), 1)
     self.assertEqual(n.connector, AND)
     self.assertEqual(n.children[0].children, [c1, c2])
     self.assertEqual(n.children[0].connector, OR)
     # We went from (c1 AND c2) to (!c1 or !c2)
     self.assertEqual(n.evaluate(), not result)
     self.assertIs(c1.v, False)
     self.assertIs(c2.v, True)
     n.negate()
     self.assertIs(c1.v, True)
     self.assertIs(c2.v, False)
     self.assertEqual(len(n), 1)
     self.assertEqual(n.connector, AND)
     self.assertEqual(len(n.children[0]), 1)
     # collapsing at this point should give us back the original node structure
     n.collapse()
     self.assertEqual(n.evaluate(), result)
     self.assertEqual(n.children, [c1, c2])
     self.assertEqual(n.connector, AND)
Пример #4
0
 def test_add_node_no_children(self):
     c1 = Dummy(True)
     n1 = ConditionNode([c1])
     n2 = ConditionNode([], OR)
     n1.add(n2, AND)
     self.assertEqual(n1.children, [c1, n2])
     self.assertEqual(n1.connector, AND)
     n3 = ConditionNode([c1])
     n3.add(n2, OR)
     self.assertEqual(n3.children, [c1])
     self.assertEqual(n3.connector, OR)
Пример #5
0
 def test_add_node_one_child(self):
     c1, c2 = Dummy(True), Dummy(True)
     n1 = ConditionNode([c2])
     n2 = ConditionNode([c1], OR)
     n1.add(n2, AND)
     self.assertEqual(n1.children, [c2, c1])
     self.assertEqual(n1.connector, AND)
     n3 = ConditionNode([c2])
     n3.add(n2, OR)
     self.assertEqual(n3.children, [c2, c1])
     self.assertEqual(n3.connector, OR)
Пример #6
0
 def test_add_node_many_children(self):
     c1, c2, c3 = Dummy(True), Dummy(True), Dummy(False)
     n1 = ConditionNode([c3])
     n2 = ConditionNode([c1, c2], OR)
     n1.add(n2, AND)
     self.assertEqual(n1.children, [c3, n2])
     self.assertEqual(n1.connector, AND)
     n3 = ConditionNode([c3])
     n3.add(n2, OR)
     self.assertEqual(n3.children, [c3, c1, c2])
     self.assertEqual(n3.connector, OR)
Пример #7
0
 def test_add_first(self):
     # Not a function I wrote, but I need to make sure they don't change how it works.
     n = ConditionNode()
     child = Dummy(True)
     n.add(child, OR)
     self.assertEqual(n.children, [child])
     self.assertEqual(n.connector, OR)
     # same thing again should do nothing...
     n.add(child, OR)
     self.assertEqual(n.children, [child])
     self.assertEqual(n.connector, OR)
     # even with different connector
     n.add(child, AND)
     self.assertEqual(n.children, [child])
     self.assertEqual(n.connector, AND)
Пример #8
0
 def test_collapse(self):
     c1, c2 = Dummy(True), Dummy(True)
     n2, n3 = ConditionNode(), ConditionNode(connector=OR)
     n4, n5 = ConditionNode([c1]), ConditionNode([c2], OR)
     n6, n7 = ConditionNode([c1, c1]), ConditionNode([c2, c2], OR)
     n1 = ConditionNode([n2, n3, n4, n5, n6, n7], OR)
     n1.collapse()
     self.assertEqual(n1.connector, OR)
     self.assertEqual(n1.children, [n6, c1, c2, c2, c2])
     # Now test the recursion of the last part
     n8 = ConditionNode([c1, c2, c1], OR)
     n9 = ConditionNode([ConditionNode([ConditionNode([n8])], OR)])
     self.assertEqual(n9.connector, AND)
     n9.collapse()
     self.assertEqual(n9.connector, OR)
     self.assertEqual(n9.children, [c1, c2, c1])
Пример #9
0
 def test_evaluate(self):
     n1 = ConditionNode()
     self.assertIs(n1.evaluate(), True)
     n1.connector = OR
     self.assertIs(n1.evaluate(), False)
     n2 = ConditionNode([Dummy(True)])
     self.assertIs(n2.evaluate(), True)
     n2.connector = OR
     self.assertIs(n2.evaluate(), True)
     n3 = ConditionNode([Dummy(False)])
     self.assertIs(n3.evaluate(), False)
     n3.connector = OR
     self.assertIs(n3.evaluate(), False)
     n4 = ConditionNode([Dummy(True), Dummy(False)])
     self.assertIs(n4.evaluate(), False)
     n4.connector = OR
     self.assertIs(n4.evaluate(), True)
     n5 = ConditionNode([Dummy(False), Dummy(True)])
     self.assertIs(n5.evaluate(), False)
     n5.connector = OR
     self.assertIs(n5.evaluate(), True)