public void YieldingDelay() { var mi = new TestMachineInfo(); bool[] hit = new bool[3]; mi.AddInternalFunction("int yieldingDelay(int ms)", i => { var ms = i.ReadArg(0).Int16Value; Console.WriteLine($"RUN Y={i.YieldedValue}"); hit[i.YieldedValue] = true; if (i.YieldedValue == 0) { i.Yield(1); } else if (i.YieldedValue == 1) { i.Yield(2); } else { i.Yield(0); i.Push(ms * 1000); } }); var it = Run(@" void main () { auto x = yieldingDelay(3); assertAreEqual (3000, x); }", mi); Assert.IsTrue(hit[0]); Assert.IsFalse(hit[1]); Assert.IsFalse(hit[2]); it.Step(); Assert.IsTrue(hit[0]); Assert.IsTrue(hit[1]); Assert.IsFalse(hit[2]); it.Step(); Assert.IsTrue(hit[0]); Assert.IsTrue(hit[1]); Assert.IsTrue(hit[2]); }
public void Sizes() { var printer = new TestPrinter(); var mi = new TestMachineInfo(); var ec = new ExecutableContext(new Executable(mi), new Report(printer)); Interpreter.CompiledVariable ParseVariable(string code) { var exe = Compile(code, mi, printer); return(exe.Globals.Skip(1).First()); } var charV = ParseVariable("char v;"); Assert.AreEqual(1, charV.VariableType.GetByteSize(ec)); var intV = ParseVariable("int v;"); Assert.AreEqual(2, intV.VariableType.GetByteSize(ec)); var shortIntV = ParseVariable("short int v;"); Assert.AreEqual(2, shortIntV.VariableType.GetByteSize(ec)); var unsignedLongV = ParseVariable("unsigned long v;"); Assert.AreEqual(4, unsignedLongV.VariableType.GetByteSize(ec)); var unsignedLongLongV = ParseVariable("unsigned long long v;"); Assert.AreEqual(8, unsignedLongLongV.VariableType.GetByteSize(ec)); var intPV = ParseVariable("int *v;"); Assert.AreEqual(2, intPV.VariableType.GetByteSize(ec)); var longPV = ParseVariable("long *v;"); Assert.AreEqual(2, longPV.VariableType.GetByteSize(ec)); }