def testNestedNode(self): n1=bdd.Node('x1',bdd.Node.T,bdd.Node.F) n2=bdd.Node('x1',bdd.Node.F,bdd.Node.T) n3=bdd.Node('x1',bdd.Node.T,bdd.Node.F) cn1=bdd.Node('x2',n1,n2) cn2=bdd.Node('x2',n2,n1) cn3=bdd.Node('x2',n3,n2) self.assertEqual(cn1,cn1) self.assertNotEqual(cn1,cn2) self.assertEqual(cn1,cn3) self.assertEqual(bdd.countLogicalNodes(cn1),5) self.assertEqual(bdd.countPhysicalNodes(cn1),5) self.assertEqual(hash(cn1),hash(cn3)) self.assertEqual(cn1,eval(repr(cn1))) self.assertEqual(bdd.evaluate(cn1,'x2',True),n1) self.assertEqual(bdd.evaluate(cn1,'x2',False),n2) self.assertEqual(bdd.evaluate(bdd.evaluate(cn1,'x1',True),'x2',True),bdd.Node.T) self.assertEqual(bdd.evaluate(bdd.evaluate(cn1,'x1',True),'x2',False),bdd.Node.F) self.assertEqual(bdd.evaluate(bdd.evaluate(cn1,'x1',False),'x2',True),bdd.Node.F) self.assertEqual(bdd.evaluate(bdd.evaluate(cn1,'x1',False),'x2',False),bdd.Node.T) self.assertEqual(bdd.evaluate(bdd.evaluate(cn1,'x2',True),'x1',True),bdd.Node.T) self.assertEqual(bdd.evaluate(bdd.evaluate(cn1,'x2',False),'x1',True),bdd.Node.F) self.assertEqual(bdd.evaluate(bdd.evaluate(cn1,'x2',True),'x1',False),bdd.Node.F) self.assertEqual(bdd.evaluate(bdd.evaluate(cn1,'x2',False),'x1',False),bdd.Node.T) self.assertEqual(bdd.restrict(cn1,{'x1' : True, 'x2' : True}), bdd.Node.T) self.assertEqual(bdd.restrict(cn1,{'x1' : True, 'x2' : False}), bdd.Node.F) self.assertEqual(bdd.restrict(cn1,{'x1' : False, 'x2' : True}), bdd.Node.F) self.assertEqual(bdd.restrict(cn1,{'x1' : False, 'x2' : False}), bdd.Node.T) self.assertEqual(bdd.restrict(cn1,{'x1' : False, 'x2' : False}), bdd.Node.T) cn4=bdd.Node('x1',bdd.Node('x1',bdd.Node.T,bdd.Node.F),bdd.Node('x1',bdd.Node.T,bdd.Node.F)) self.assertEqual(bdd.evaluate(cn4,'x1',True),bdd.Node.T) self.assertEqual(bdd.evaluate(cn4,'x1',False),bdd.Node.F) self.assertEqual(bdd.evaluate(bdd.negate(cn4),'x1',True),bdd.Node.F) self.assertEqual(bdd.evaluate(bdd.negate(cn4),'x1',False),bdd.Node.T) self.assertEqual(bdd.countPhysicalNodes(cn4),5) self.assertEqual(bdd.countLogicalNodes(cn4),4) self.assertEqual(bdd.countPhysicalNodes(bdd.restrict(cn4,{})),4) self.assertEqual(bdd.removeRedundant(cn4),bdd.Node('x1',bdd.Node.T,bdd.Node.F)) self.assertEqual(bdd.negate(n1),n2) self.assertEqual(bdd.negate(n2),n1) self.assertEqual(bdd.negate(bdd.negate(cn1)),cn1) self.assertNotEqual(bdd.negate(cn1),cn1)
def testSingleNode(self): n1=bdd.Node('x1',bdd.Node.T,bdd.Node.F) self.assertFalse(bdd.isTerminal(n1)) self.assertEqual(bdd.countPhysicalNodes(n1),3) self.assertEqual(bdd.countLogicalNodes(n1),3) self.assertEqual(n1,n1) self.assertEqual(n1,eval(repr(n1))) self.assertEqual(hash(n1),hash(eval(repr(n1)))) self.assertEqual(bdd.evaluate(n1,'x1',True),bdd.Node.T) self.assertEqual(bdd.evaluate(n1,'x1',False),bdd.Node.F) self.assertEqual(bdd.evaluate(n1,'not x1',True),n1) n2=bdd.Node('x2',bdd.Node.T,bdd.Node.F) self.assertNotEqual(n1,n2) n3=bdd.Node('x1',bdd.Node.T,bdd.Node.T) self.assertNotEqual(n1,n3) self.assertEqual(bdd.countPhysicalNodes(n3),2) self.assertEqual(bdd.countLogicalNodes(n3),2) n4=bdd.Node('x1',bdd.Node.F,bdd.Node.T) self.assertNotEqual(n1,n4) n5=bdd.Node('x1',bdd.Node.F,bdd.Node.F) self.assertNotEqual(n1,n5)
def testSingleNode(self): n1 = bdd.Node('x1', bdd.Node.T, bdd.Node.F) self.assertFalse(bdd.isTerminal(n1)) self.assertEqual(bdd.countPhysicalNodes(n1), 3) self.assertEqual(bdd.countLogicalNodes(n1), 3) self.assertEqual(n1, n1) self.assertEqual(n1, eval(repr(n1))) self.assertEqual(hash(n1), hash(eval(repr(n1)))) self.assertEqual(bdd.evaluate(n1, 'x1', True), bdd.Node.T) self.assertEqual(bdd.evaluate(n1, 'x1', False), bdd.Node.F) self.assertEqual(bdd.evaluate(n1, 'not x1', True), n1) n2 = bdd.Node('x2', bdd.Node.T, bdd.Node.F) self.assertNotEqual(n1, n2) n3 = bdd.Node('x1', bdd.Node.T, bdd.Node.T) self.assertNotEqual(n1, n3) self.assertEqual(bdd.countPhysicalNodes(n3), 2) self.assertEqual(bdd.countLogicalNodes(n3), 2) n4 = bdd.Node('x1', bdd.Node.F, bdd.Node.T) self.assertNotEqual(n1, n4) n5 = bdd.Node('x1', bdd.Node.F, bdd.Node.F) self.assertNotEqual(n1, n5)
def testNestedNode(self): n1 = bdd.Node('x1', bdd.Node.T, bdd.Node.F) n2 = bdd.Node('x1', bdd.Node.F, bdd.Node.T) n3 = bdd.Node('x1', bdd.Node.T, bdd.Node.F) cn1 = bdd.Node('x2', n1, n2) cn2 = bdd.Node('x2', n2, n1) cn3 = bdd.Node('x2', n3, n2) self.assertEqual(cn1, cn1) self.assertNotEqual(cn1, cn2) self.assertEqual(cn1, cn3) self.assertEqual(bdd.countLogicalNodes(cn1), 5) self.assertEqual(bdd.countPhysicalNodes(cn1), 5) self.assertEqual(hash(cn1), hash(cn3)) self.assertEqual(cn1, eval(repr(cn1))) self.assertEqual(bdd.evaluate(cn1, 'x2', True), n1) self.assertEqual(bdd.evaluate(cn1, 'x2', False), n2) self.assertEqual( bdd.evaluate(bdd.evaluate(cn1, 'x1', True), 'x2', True), bdd.Node.T) self.assertEqual( bdd.evaluate(bdd.evaluate(cn1, 'x1', True), 'x2', False), bdd.Node.F) self.assertEqual( bdd.evaluate(bdd.evaluate(cn1, 'x1', False), 'x2', True), bdd.Node.F) self.assertEqual( bdd.evaluate(bdd.evaluate(cn1, 'x1', False), 'x2', False), bdd.Node.T) self.assertEqual( bdd.evaluate(bdd.evaluate(cn1, 'x2', True), 'x1', True), bdd.Node.T) self.assertEqual( bdd.evaluate(bdd.evaluate(cn1, 'x2', False), 'x1', True), bdd.Node.F) self.assertEqual( bdd.evaluate(bdd.evaluate(cn1, 'x2', True), 'x1', False), bdd.Node.F) self.assertEqual( bdd.evaluate(bdd.evaluate(cn1, 'x2', False), 'x1', False), bdd.Node.T) self.assertEqual(bdd.restrict(cn1, { 'x1': True, 'x2': True }), bdd.Node.T) self.assertEqual(bdd.restrict(cn1, { 'x1': True, 'x2': False }), bdd.Node.F) self.assertEqual(bdd.restrict(cn1, { 'x1': False, 'x2': True }), bdd.Node.F) self.assertEqual(bdd.restrict(cn1, { 'x1': False, 'x2': False }), bdd.Node.T) self.assertEqual(bdd.restrict(cn1, { 'x1': False, 'x2': False }), bdd.Node.T) cn4 = bdd.Node('x1', bdd.Node('x1', bdd.Node.T, bdd.Node.F), bdd.Node('x1', bdd.Node.T, bdd.Node.F)) self.assertEqual(bdd.evaluate(cn4, 'x1', True), bdd.Node.T) self.assertEqual(bdd.evaluate(cn4, 'x1', False), bdd.Node.F) self.assertEqual(bdd.evaluate(bdd.negate(cn4), 'x1', True), bdd.Node.F) self.assertEqual(bdd.evaluate(bdd.negate(cn4), 'x1', False), bdd.Node.T) self.assertEqual(bdd.countPhysicalNodes(cn4), 5) self.assertEqual(bdd.countLogicalNodes(cn4), 4) self.assertEqual(bdd.countPhysicalNodes(bdd.restrict(cn4, {})), 4) self.assertEqual(bdd.removeRedundant(cn4), bdd.Node('x1', bdd.Node.T, bdd.Node.F)) self.assertEqual(bdd.negate(n1), n2) self.assertEqual(bdd.negate(n2), n1) self.assertEqual(bdd.negate(bdd.negate(cn1)), cn1) self.assertNotEqual(bdd.negate(cn1), cn1)