def testMergeOneVariable(self): p = cfg.Program() n0 = p.NewCFGNode("n0") u = p.NewVariable([0], [], n0) self.assertIs(cfg_utils.merge_variables(p, n0, [u]), u) self.assertIs(cfg_utils.merge_variables(p, n0, [u, u]), u) self.assertIs(cfg_utils.merge_variables(p, n0, [u, u, u]), u)
def test_merge_one_variable(self): p = cfg.Program() n0 = p.NewCFGNode("n0") u = p.NewVariable([0], [], n0) self.assertIsNot(cfg_utils.merge_variables(p, n0, [u]), u) self.assertIsNot(cfg_utils.merge_variables(p, n0, [u, u, u]), u) self.assertCountEqual( cfg_utils.merge_variables(p, n0, [u, u, u]).data, u.data)
def test_merge_variables(self): p = cfg.Program() n0, n1, n2 = p.NewCFGNode("n0"), p.NewCFGNode("n1"), p.NewCFGNode("n2") u = p.NewVariable() u1 = u.AddBinding(0, source_set=[], where=n0) v = p.NewVariable() v.AddBinding(1, source_set=[], where=n1) v.AddBinding(2, source_set=[], where=n1) w = p.NewVariable() w.AddBinding(1, source_set=[u1], where=n1) w.AddBinding(3, source_set=[], where=n1) vw = cfg_utils.merge_variables(p, n2, [v, w]) self.assertCountEqual(vw.data, [1, 2, 3]) val1, = [v for v in vw.bindings if v.data == 1] self.assertTrue(val1.HasSource(u1))
def test_merge_zero_variables(self): p = cfg.Program() n0 = p.NewCFGNode("n0") self.assertIsInstance(cfg_utils.merge_variables(p, n0, []), cfg.Variable)
def join_variables(self, node, variables): return cfg_utils.merge_variables(self.program, node, variables)