Example #1
0
 def testAliasingDictValueMove(self):
     d = utils.AliasingDict()
     v = self.prog.NewVariable()
     d["alias"] = v
     d.add_alias("alias", "name")
     self.assertEqual(d["name"], v)
     self.assertEqual(d["alias"], d["name"])
Example #2
0
 def testNonemptyAliasingDictRealiasing(self):
     d = utils.AliasingDict()
     d.add_alias("alias", "name")
     d["name"] = "hello"
     d["name2"] = "world"
     self.assertRaises(AssertionError, lambda: d.add_alias("name2", "name"))
     d.add_alias("alias", "name")
Example #3
0
 def testAliasingDictTransitive(self):
     d = utils.AliasingDict()
     d.add_alias("alias1", "name")
     d.add_alias("alias2", "alias1")
     d["name"] = self.prog.NewVariable()
     self.assertEqual(1, len(d))
     self.assertEqual(d["name"], d["alias1"])
     self.assertEqual(d["alias1"], d["alias2"])
Example #4
0
 def testAliasingDictTransitiveValueMove(self):
     d = utils.AliasingDict()
     d.add_alias("alias2", "name")
     v = self.prog.NewVariable()
     d["alias1"] = v
     d.add_alias("alias1", "alias2")
     self.assertEqual(d["name"], v)
     self.assertEqual(d["alias2"], d["name"])
     self.assertEqual(d["alias1"], d["alias2"])
Example #5
0
 def testAliasingDictRealiasing(self):
   d = utils.AliasingDict()
   d.add_alias("alias1", "name")
   d.add_alias("alias2", "name")
   self.assertRaises(AssertionError,
                     lambda: d.add_alias("name", "other_name"))
   self.assertRaises(AssertionError,
                     lambda: d.add_alias("alias1", "other_name"))
   d.add_alias("alias1", "name")
   d.add_alias("alias2", "alias1")
   d.add_alias("alias1", "alias2")
   # Check that the name, alias1, and alias2 still all refer to the same key
   var = self.prog.NewVariable()
   d["alias1"] = var
   self.assertEquals(1, len(d))
   self.assertEquals(var, d["name"])
   self.assertEquals(var, d["alias1"])
   self.assertEquals(var, d["alias2"])
Example #6
0
 def testAliasingDict(self):
     d = utils.AliasingDict()
     # To avoid surprising behavior, we require desired dict functionality to be
     # explicitly overridden
     self.assertRaises(NotImplementedError, lambda: d.viewitems)
     d.add_alias("alias", "name")
     self.assertNotIn("alias", d)
     self.assertNotIn("name", d)
     var1 = self.prog.NewVariable("var1")
     d["alias"] = var1
     self.assertIn("name", d)
     self.assertIn("alias", d)
     self.assertEquals(var1, d["name"])
     self.assertEquals(d["name"], d["alias"])
     self.assertEquals(d["alias"], d.get("alias"))
     self.assertEquals(d["name"], d.get("name"))
     self.assertEquals(None, d.get("other_name"))
     var2 = self.prog.NewVariable("var2")
     d["name"] = var2
     self.assertEquals(var2, d["name"])
     self.assertEquals(d["name"], d["alias"])
Example #7
0
 def testAliasingDictRealiasing(self):
     d = utils.AliasingDict()
     d.add_alias("alias1", "name")
     d.add_alias("alias2", "name")
     self.assertRaises(AssertionError,
                       lambda: d.add_alias("name", "other_name"))
     try:
         d.add_alias("alias1", "other_name")
     except utils.AliasingDictConflictError as e:
         self.assertEqual(e.existing_name, "name")
     else:
         self.fail("AliasingDictConflictError not raised")
     d.add_alias("alias1", "name")
     d.add_alias("alias2", "alias1")
     d.add_alias("alias1", "alias2")
     # Check that the name, alias1, and alias2 still all refer to the same key
     var = self.prog.NewVariable()
     d["alias1"] = var
     self.assertEqual(1, len(d))
     self.assertEqual(var, d["name"])
     self.assertEqual(var, d["alias1"])
     self.assertEqual(var, d["alias2"])