public void RunsMachine() { var fun = ProgramBuilder.Create(p => p .Write(new byte[] { 1, 2, 1, 5, 1, Op.Add, 0, 1, Op.Print, 0 })); var col = new Collector(); Run(CreateContext(col, fun)); Assert.AreEqual(7, col.Collected.Dequeue()); }
public void LimitsDataStack() { var fun = ProgramBuilder.Create(p => { for (var i = 0; i < Constants.MAX_STACK_DEPTH + 1; i++) { p.Push(5); } }); var col = new Collector(); var ctx = CreateContext(col, fun); Assert.ThrowsException <BoundaryException>(() => { Run(ctx); }); Assert.AreEqual(Constants.MAX_STACK_DEPTH, ctx.Stack.Count); }
public void LimitsTicks() { var fun = ProgramBuilder.Create(p => { for (var i = 0; i < Constants.MAX_TICKS + 1; i++) { p.Execute(Op.NoOp); } }); var col = new Collector(); var ctx = CreateContext(col, fun); Assert.ThrowsException <BoundaryException>(() => { Run(ctx); }); Assert.AreEqual(Constants.MAX_TICKS, ctx.Ticks); }
public void RunsFunction() { var fun = ProgramBuilder.Create(p => p .Push(d => d.Push(1000).Execute(Op.Add)) .Push(Op.x) .Execute(Op.Define) .Push(long.MaxValue) .Execute(Op.Print) .Push(99) .Execute(Op.Print) .Push(7) .Execute(Op.x) .Execute(Op.Print) ); var col = new Collector(); Run(CreateContext(col, fun)); Assert.AreEqual(long.MaxValue, col.Collected.Dequeue()); Assert.AreEqual(99, col.Collected.Dequeue()); Assert.AreEqual(1007, col.Collected.Dequeue()); }
public void LimitsExeStack() { var fun = ProgramBuilder.Create(p => p .Push(d => d.Execute(Op.y).Push(10)) .Push(Op.x) .Execute(Op.Define) .Push(d => d.Execute(Op.x).Push(10)) .Push(Op.y) .Execute(Op.Define) .Execute(Op.x) ); var col = new Collector(); var ctx = CreateContext(col, fun); Assert.ThrowsException <BoundaryException>(() => { Run(ctx); }); Assert.AreEqual(Constants.MAX_EXE_DEPTH, ctx.Executions.Count); }