public void TestStackFrameArguments2_ArgumentsToTheFunctionCallShouldBeStoredInTheStackFrame_AndBeAvailableWithinTheFunction() { // Arrange var tacs = new Tacs() { Tac.Init(0), Tac.Assign("13", "t0"), Tac.Assign("17", "t1"), Tac.Assign("23", "t2"), Tac.BeginCall("print", 3, "t4"), Tac.Param("t0"), Tac.Param("t1"), Tac.Param("t2"), Tac.Call("print", "t4"), Tac.Halt(), Tac.BeginFunc("print", 3), Tac.PrintVariable("arg0"), Tac.PrintVariable("arg1"), Tac.PrintVariable("arg2"), Tac.EndFunc("print") }; var output = new CodeGenerator().Generate(tacs); // Act var tinyOut = new TinyMachine(ExePath, TestFilePath).Execute(output); // Assert Assert.That(tinyOut, Is.EqualTo(new[] { "13", "17", "23" }), tinyOut.ToString()); }
public void TestStackFrameCommandLineArguments_TheInitialStackFrameIsSetUp_SoThatCommandLineArguments_FallInTheArgumentSlotsOfTheInitalStackFrame() { // Arrange var tacs = new Tacs() { Tac.Init(3), Tac.BeginCall("main", 3, "t0"), Tac.Param("arg0"), Tac.Param("arg1"), Tac.Param("arg2"), Tac.Call("main", "t0"), Tac.BeginCall("print", 1, "t1"), Tac.Param("t0"), Tac.Call("print", "t1"), Tac.Halt(), Tac.BeginFunc("print", 1), Tac.PrintVariable("arg0"), Tac.EndFunc("print"), Tac.BeginFunc("main", 3), Tac.PrintVariable("arg0"), Tac.PrintVariable("arg1"), Tac.PrintVariable("arg2"), Tac.Assign("13", "t0"), Tac.Return("t0"), Tac.EndFunc("main") }; var output = new CodeGenerator().Generate(tacs); // Act var tinyOut = new TinyMachine(ExePath, TestFilePath).Execute(output, "29 31 37"); // Assert Assert.That(tinyOut, Is.EqualTo(new[] { "29", "31", "37", "13" }), tinyOut.ToString()); }
public void TestStackFrameReturnValue_TheValueReturnedFromTheFunction_ShouldBeStoredInTheStackFrame_AnIsAutomaticallyAssignedToTheReturnVariable() { // Arrange var tacs = new Tacs() { Tac.Init(0), Tac.BeginCall("returnthirteen", 0, "t0"), Tac.Call("returnthirteen", "t0"), Tac.PrintVariable("t0"), Tac.Halt(), Tac.BeginFunc("returnthirteen", 0), Tac.Assign("13", "t0"), Tac.Return("t0"), Tac.EndFunc("returnthirteen") }; var output = new CodeGenerator().Generate(tacs); // Act var tinyOut = new TinyMachine(ExePath, TestFilePath).Execute(output); // Assert Assert.That(tinyOut, Is.EqualTo(new[] { "13" }), tinyOut.ToString()); }