Example #1
0
        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]);
        }
Example #2
0
        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));
        }