Exemplo n.º 1
0
        private ProcedureStructure CompileTest(Procedure proc)
        {
            ProcedureStructureBuilder g = new ProcedureStructureBuilder(proc);

            g.BuildNodes();
            g.DefineEdges();
            ProcedureStructure ps = g.CreateProcedureStructure();

            g.SetTimeStamps();

            DerivedSequenceBuilder gr = new DerivedSequenceBuilder(ps);

            return(ps);
        }
        public void BuildSingleNodeGraph()
        {
            CompileTest(delegate(ProcedureBuilder m)
            {
                m.Return();
            });

            DerivedSequenceBuilder seq = new DerivedSequenceBuilder(proc);
            Assert.AreEqual(3, proc.Nodes.Count);
            Assert.AreEqual(2, proc.DerivedGraphs.Count);

            Assert.AreEqual(3, proc.DerivedGraphs[0].Graph.Nodes.Count);
            Assert.AreEqual(1, proc.DerivedGraphs[0].Intervals.Count);
            Assert.AreEqual(1, proc.DerivedGraphs[1].Graph.Nodes.Count);
            Assert.AreEqual(1, proc.DerivedGraphs[1].Intervals.Count);
        }
Exemplo n.º 3
0
        public void BuildSingleNodeGraph()
        {
            CompileTest(delegate(ProcedureBuilder m)
            {
                m.Return();
            });

            DerivedSequenceBuilder seq = new DerivedSequenceBuilder(proc);

            Assert.AreEqual(3, proc.Nodes.Count);
            Assert.AreEqual(2, proc.DerivedGraphs.Count);

            Assert.AreEqual(3, proc.DerivedGraphs[0].Graph.Nodes.Count);
            Assert.AreEqual(1, proc.DerivedGraphs[0].Intervals.Count);
            Assert.AreEqual(1, proc.DerivedGraphs[1].Graph.Nodes.Count);
            Assert.AreEqual(1, proc.DerivedGraphs[1].Intervals.Count);
        }
        public void LoopTest()
        {
            CompileTest(delegate(ProcedureBuilder m)
            {
                m.Label("loop");
                m.SideEffect(m.Fn("foo", m.Int32(4)));
                m.BranchIf(m.LocalBool("f"), "loop");
                m.Return();
            });

            DerivedSequenceBuilder seq = new DerivedSequenceBuilder(proc);
            proc.Dump();

            Assert.AreEqual(4, proc.DerivedGraphs[0].Graph.Nodes.Count);
            Assert.AreEqual(2, proc.DerivedGraphs[0].Intervals.Count);
            Assert.AreEqual(2, proc.DerivedGraphs[1].Graph.Nodes.Count);
            Assert.AreEqual(1, proc.DerivedGraphs[1].Intervals.Count);
            Assert.AreEqual(1, proc.DerivedGraphs[2].Graph.Nodes.Count);
            Assert.AreEqual(1, proc.DerivedGraphs[2].Intervals.Count);
        }
Exemplo n.º 5
0
        public void LoopTest()
        {
            CompileTest(delegate(ProcedureBuilder m)
            {
                m.Label("loop");
                m.SideEffect(m.Fn("foo", m.Int32(4)));
                m.BranchIf(m.LocalBool("f"), "loop");
                m.Return();
            });

            DerivedSequenceBuilder seq = new DerivedSequenceBuilder(proc);

            proc.Dump();

            Assert.AreEqual(4, proc.DerivedGraphs[0].Graph.Nodes.Count);
            Assert.AreEqual(2, proc.DerivedGraphs[0].Intervals.Count);
            Assert.AreEqual(2, proc.DerivedGraphs[1].Graph.Nodes.Count);
            Assert.AreEqual(1, proc.DerivedGraphs[1].Intervals.Count);
            Assert.AreEqual(1, proc.DerivedGraphs[2].Graph.Nodes.Count);
            Assert.AreEqual(1, proc.DerivedGraphs[2].Intervals.Count);
        }
Exemplo n.º 6
0
        public void NonReducible()
        {
            CompileTest(delegate(ProcedureBuilder m)
            {
                m.BranchIf(m.Fn("foo"), "right");

                m.Label("left");
                m.SideEffect(m.Fn("Left"));
                m.Jump("right");

                m.Label("right");
                m.SideEffect(m.Fn("Right"));
                m.BranchIf(m.Fn("exitTest"), "left");

                m.Return();
            });
            DerivedSequenceBuilder seq = new DerivedSequenceBuilder(proc);

            Assert.AreEqual(2, proc.DerivedGraphs.Count, "Expected 2 graphs");
            Assert.AreEqual(6, proc.DerivedGraphs[0].Graph.Nodes.Count);
            Assert.AreEqual(3, proc.DerivedGraphs[1].Graph.Nodes.Count, "Expected 3 nodes in top level graph");
        }
        public void NonReducible()
        {
            CompileTest(delegate(ProcedureBuilder m)
            {
                m.BranchIf(m.Fn("foo"), "right");

                m.Label("left");
                m.SideEffect(m.Fn("Left"));
                m.Jump("right");

                m.Label("right");
                m.SideEffect(m.Fn("Right"));
                m.BranchIf(m.Fn("exitTest"), "left");

                m.Return();
            });
            DerivedSequenceBuilder seq = new DerivedSequenceBuilder(proc);
            Assert.AreEqual(2, proc.DerivedGraphs.Count, "Expected 2 graphs");
            Assert.AreEqual(6, proc.DerivedGraphs[0].Graph.Nodes.Count);
            Assert.AreEqual(3, proc.DerivedGraphs[1].Graph.Nodes.Count, "Expected 3 nodes in top level graph");
        }
 protected virtual void RunTest(ProcedureBuilder pm)
 {
     CompileTest(pm);
     DerivedSequenceBuilder gr = new DerivedSequenceBuilder(proc);
 }
Exemplo n.º 9
0
        private ProcedureStructure CompileTest(Procedure proc)
        {
            ProcedureStructureBuilder g = new ProcedureStructureBuilder(proc);
            g.BuildNodes();
            g.DefineEdges();
            ProcedureStructure ps = g.CreateProcedureStructure();
            g.SetTimeStamps();

            DerivedSequenceBuilder gr = new DerivedSequenceBuilder(ps);
            return ps;
        }
Exemplo n.º 10
0
 protected virtual void RunTest(ProcedureBuilder pm)
 {
     CompileTest(pm);
     DerivedSequenceBuilder gr = new DerivedSequenceBuilder(proc);
 }