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"])
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")
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"])
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"])
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"])
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"])
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"])