def testFalse(self): self.assertEqual(bdd.Node.F,bdd.Node.F) self.assertNotEqual(bdd.Node.F,bdd.Node.T) self.assertEqual(bdd.Node.F,eval(repr(bdd.Node.F))) self.assertEqual(bdd.evaluate(bdd.Node.F,'a variable',False),bdd.Node.F) self.assertEqual(bdd.evaluate(bdd.Node.F,'a variable',True),bdd.Node.F) self.assertTrue(bdd.isTerminal(bdd.Node.F)) self.assertEqual(bdd.getTerminal(False),bdd.Node.F) self.assertEqual(bdd.getTerminal([]),bdd.Node.F) self.assertEqual(bdd.negate(bdd.Node.F),bdd.Node.T)
def testFalse(self): self.assertEqual(bdd.Node.F, bdd.Node.F) self.assertNotEqual(bdd.Node.F, bdd.Node.T) self.assertEqual(bdd.Node.F, eval(repr(bdd.Node.F))) self.assertEqual(bdd.evaluate(bdd.Node.F, 'a variable', False), bdd.Node.F) self.assertEqual(bdd.evaluate(bdd.Node.F, 'a variable', True), bdd.Node.F) self.assertTrue(bdd.isTerminal(bdd.Node.F)) self.assertEqual(bdd.getTerminal(False), bdd.Node.F) self.assertEqual(bdd.getTerminal([]), bdd.Node.F) self.assertEqual(bdd.negate(bdd.Node.F), bdd.Node.T)
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 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)