예제 #1
0
 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)
예제 #2
0
 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)
예제 #3
0
 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)
예제 #4
0
 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)