[Test]public void testMakeSureThatJsrWhichCallsItselfDoesNotRecurseForever() { Block main = new Block("main"); Block sub = new Block("sub"); main.addOp(new JMP(0, sub)); main.addOp(new JMP(0, sub)); sub.addOp(new RetSub(1)); sub.addNextBlock(main); Stack2Turing converter = new Stack2Turing(main); converter.translate(); // Assert no exceptions and that we don't get into infinite recursion }
[Test]public void testJSRMultiBlock() { Block main = new Block("main"); Block sub = new Block("sub"); Block sub1 = new Block("sub1"); Block sub2 = new Block("sub2"); sub.addNextBlock(sub1); sub1.addNextBlock(sub2); main.addOp(new JMP(0, sub)); Stack2Turing converter = new Stack2Turing(main); converter.translate(); // Assert no exceptions }
public void testDiamondBlockArrangment() { Block root = new Block("root"); Block branchA = new Block("branchA"); Block branchB = new Block("branchB"); Block joined = new Block("joined"); root.addNextBlock(branchA); root.addNextBlock(branchB); branchA.addNextBlock(joined); branchB.addNextBlock(joined); root.addOp(new Load(-1, var("this"))); root.addOp(new Load(-1, var("root"))); branchA.addOp(new Load(-1, var("A"))); branchB.addOp(new Load(-1, var("B"))); joined.addOp(new Load(-1, var("joined"))); joined.addOp(new Invoke(-1, null, "m", "(System.Int32, System.Int32, System.Int32)System.Void", new ArrayList<Type>(){ClrType.Int32, ClrType.Int32, ClrType.Int32}, false, ClrType.Void)); IList<Operation> operations = new Stack2Turing(root).translate(); Assert.AreEqual(2, operations.Count); MethodInvokation mB = (MethodInvokation)operations[0]; MethodInvokation mA = (MethodInvokation)operations[1]; // since we use hash order is non-deterministic if (mB.getParameters()[1].ToString().StartsWith("A")) { MethodInvokation temp = mB; mB = mA; mA = temp; } Assert.AreEqual("[ 0:root{System.Object}, 1:A{System.Object}, 2:joined{System.Object} ]", mA.getParameters().ToString()); Assert.AreEqual("this{System.Object}", mA.getMethodThis().ToString()); Assert.AreEqual("[ 0:root{System.Object}, 1:B{System.Object}, 2:joined{System.Object} ]", mB.getParameters().ToString()); Assert.AreEqual("this{System.Object}", mB.getMethodThis().ToString()); }