public void Constructor_CompareNestedLoopWithCounter()
        {
            var tacContainer = Utils.GetNestedLoopWithCounterInTAC();
            var cfg          = new ControlFlowGraph(tacContainer);

            var genKillVisitor = new GenKillVisitor();
            var itaOriginal    = new ReachingDefinitionsITA(cfg.GetCFGWithSortedVertices(),
                                                            genKillVisitor.GenerateReachingDefinitionForBlocks(cfg.SourceBasicBlocks));
            var itaSorted = new ReachingDefinitionsITA(cfg,
                                                       genKillVisitor.GenerateReachingDefinitionForBlocks(cfg.SourceBasicBlocks));

            Assert.AreEqual(itaOriginal.ToString(), itaSorted.ToString());
        }
        public void Constructor_CompareIfWithNestedLoopAndNestedIf()
        {
            var tacContainer = new ThreeAddressCode();

            // basic block #0
            Utils.AddAssignmentNode(tacContainer, null, "t1", "a", "<", "5");
            Utils.AddIfGotoNode(tacContainer, null, "L1", "t1");
            // basic block #1
            Utils.AddAssignmentNode(tacContainer, null, "t2", "a", ">", "10");
            Utils.AddIfGotoNode(tacContainer, null, "L3", "t2");
            // basic block #2
            Utils.AddGotoNode(tacContainer, null, "L4");
            // basic block #3
            Utils.AddAssignmentNode(tacContainer, "L3", "t3", "a", "-", "10");
            Utils.AddAssignmentNode(tacContainer, null, "a", "t3");
            // basic block #4
            Utils.AddGotoNode(tacContainer, "L4", "L2");
            // basic block #5
            Utils.AddAssignmentNode(tacContainer, "L1", "j", "1");
            // basic block #6
            Utils.AddAssignmentNode(tacContainer, "L5", "t4", "a", "+", "1");
            Utils.AddAssignmentNode(tacContainer, null, "a", "t4");
            Utils.AddAssignmentNode(tacContainer, null, "j", "j", "+", "1");
            Utils.AddAssignmentNode(tacContainer, null, "t5", "j", "<", "10");
            Utils.AddIfGotoNode(tacContainer, null, "L5", "t5");
            // basic block #7
            Utils.AddAssignmentNode(tacContainer, "L2", "p", "2");

            var cfg = new ControlFlowGraph(tacContainer);

            var genKillVisitor = new GenKillVisitor();
            var itaOriginal    = new ReachingDefinitionsITA(cfg.GetCFGWithSortedVertices(),
                                                            genKillVisitor.GenerateReachingDefinitionForBlocks(cfg.SourceBasicBlocks));
            var itaSorted = new ReachingDefinitionsITA(cfg,
                                                       genKillVisitor.GenerateReachingDefinitionForBlocks(cfg.SourceBasicBlocks));

            Assert.AreEqual(itaOriginal.ToString(), itaSorted.ToString());
        }