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); }
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); }
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); }
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; }