Beispiel #1
0
 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)
Beispiel #2
0
 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)
Beispiel #3
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)
Beispiel #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)