public void TeeLocal_Compiled()
    {
        var exports = CompilerTestBase <int> .CreateInstance(
            new LocalGet(0),
            new LocalTee(0),
            new End());

        Assert.AreEqual(3, exports.Test(3));
        Assert.AreEqual(-1, exports.Test(-1));
    }
        public void Int32Add_Compiled()
        {
            var exports = CompilerTestBase <int> .CreateInstance(
                new LocalGet(0),
                new Int32Constant(1),
                new Int32Add(),
                new End());

            Assert.AreEqual(1, exports.Test(0));
            Assert.AreEqual(6, exports.Test(5));
        }
Exemple #3
0
        public void Float32Subtract_Compiled()
        {
            var exports = CompilerTestBase <float> .CreateInstance(
                new LocalGet(0),
                new Float32Constant(1),
                new Float32Subtract(),
                new End());

            Assert.AreEqual(-1, exports.Test(0));
            Assert.AreEqual(4, exports.Test(5));
        }
Exemple #4
0
    public void GetLocal_Compiled_Parameter_OutOfRange()
    {
        var exception = Assert.ThrowsException <ModuleLoadException>(
            () => CompilerTestBase <int> .CreateInstance(
                new Int32Constant(42),
                new LocalSet(1),
                new End()
                ));

        Assert.AreEqual("At offset 39: Attempt to set local at index 1 but only 1 local was defined.", exception.Message);
    }
Exemple #5
0
        public void Float64Subtract_Compiled()
        {
            var exports = CompilerTestBase <double> .CreateInstance(
                new GetLocal(0),
                new Float64Constant(1),
                new Float64Subtract(),
                new End());

            Assert.AreEqual(-1, exports.Test(0));
            Assert.AreEqual(4, exports.Test(5));
        }
Exemple #6
0
        public void Int64Add_Compiled()
        {
            var exports = CompilerTestBase <long> .CreateInstance(
                new GetLocal(0),
                new Int64Constant(1),
                new Int64Add(),
                new End());

            Assert.AreEqual(1, exports.Test(0));
            Assert.AreEqual(6, exports.Test(5));
        }
Exemple #7
0
        public void Float64Add_Compiled()
        {
            var exports = CompilerTestBase <double> .CreateInstance(
                new LocalGet(0),
                new Float64Constant(1),
                new Float64Add(),
                new End());

            Assert.AreEqual(1, exports.Test(0));
            Assert.AreEqual(6, exports.Test(5));
        }
        public void Float32Add_Compiled()
        {
            var exports = CompilerTestBase <float> .CreateInstance(
                new GetLocal(0),
                new Float32Constant(1),
                new Float32Add(),
                new End());

            Assert.AreEqual(1, exports.Test(0));
            Assert.AreEqual(6, exports.Test(5));
        }
Exemple #9
0
    public void Float32Absolute_Compiled()
    {
        var exports = CompilerTestBase <float> .CreateInstance(
            new LocalGet(0),
            new Float32Absolute(),
            new End());

        foreach (var value in new[] { 1f, -1f, -(float)Math.PI, (float)Math.PI })
        {
            Assert.AreEqual(Math.Abs(value), exports.Test(value));
        }
    }
        public void Float32Negate_Compiled()
        {
            var exports = CompilerTestBase <float> .CreateInstance(
                new GetLocal(0),
                new Float32Negate(),
                new End());

            foreach (var value in Samples.Single)
            {
                Assert.AreEqual(-value, exports.Test(value));
            }
        }
        public void Float64Nearest_Compiled()
        {
            var exports = CompilerTestBase <double> .CreateInstance(
                new GetLocal(0),
                new Float64Nearest(),
                new End());

            foreach (var value in new[] { 1f, -1f, -Math.PI, Math.PI })
            {
                Assert.AreEqual(Math.Round(value, MidpointRounding.ToEven), exports.Test(value));
            }
        }
        public void Float32SquareRoot_Compiled()
        {
            var exports = CompilerTestBase <float> .CreateInstance(
                new GetLocal(0),
                new Float32SquareRoot(),
                new End());

            foreach (var value in Samples.Single)
            {
                Assert.AreEqual((float)Math.Sqrt(value), exports.Test(value));
            }
        }
Exemple #13
0
        public void Float64Multiply_Compiled()
        {
            var exports = CompilerTestBase <double> .CreateInstance(
                new GetLocal(0),
                new Float64Constant(3),
                new Float64Multiply(),
                new End());

            Assert.AreEqual(0, exports.Test(0));
            Assert.AreEqual(9, exports.Test(3));
            Assert.AreEqual(-6, exports.Test(-2));
        }
        public void Float32Divide_Compiled()
        {
            var exports = CompilerTestBase <float> .CreateInstance(
                new LocalGet(0),
                new Float32Constant(3),
                new Float32Divide(),
                new End());

            Assert.AreEqual(0, exports.Test(0));
            Assert.AreEqual(3, exports.Test(9));
            Assert.AreEqual(-2, exports.Test(-6));
        }
        public void Float32Nearest_Compiled()
        {
            var exports = CompilerTestBase <float> .CreateInstance(
                new GetLocal(0),
                new Float32Nearest(),
                new End());

            foreach (var value in Samples.Single)
            {
                Assert.AreEqual((float)Math.Round(value, MidpointRounding.ToEven), exports.Test(value));
            }
        }
Exemple #16
0
    public void Float32Truncate_Compiled()
    {
        var exports = CompilerTestBase <float> .CreateInstance(
            new LocalGet(0),
            new Float32Truncate(),
            new End());

        foreach (var value in Samples.Single)
        {
            Assert.AreEqual((float)Math.Truncate(value), exports.Test(value));
        }
    }
        public void Float64Negate_Compiled()
        {
            var exports = CompilerTestBase <double> .CreateInstance(
                new LocalGet(0),
                new Float64Negate(),
                new End());

            foreach (var value in Samples.Double)
            {
                Assert.AreEqual(-value, exports.Test(value));
            }
        }
Exemple #18
0
    public void Float64Floor_Compiled()
    {
        var exports = CompilerTestBase <double> .CreateInstance(
            new LocalGet(0),
            new Float64Floor(),
            new End());

        foreach (var value in new[] { 1f, -1f, -Math.PI, Math.PI })
        {
            Assert.AreEqual(Math.Floor(value), exports.Test(value));
        }
    }
Exemple #19
0
        public void Int32EqualZero_Compiled()
        {
            var exports = CompilerTestBase <int> .CreateInstance(
                new GetLocal(0),
                new Int32EqualZero(),
                new End());

            foreach (var value in Samples.Int32)
            {
                Assert.AreEqual(value == 0, exports.Test(value) != 0);
            }
        }
        public void Int32ShiftLeft_Compiled()
        {
            const int amount = 0xF;

            var exports = CompilerTestBase<int>.CreateInstance(
                new GetLocal(0),
                new Int32Constant(amount),
                new Int32ShiftLeft(),
                new End());

            foreach (var value in new[] { 0x00, 0x01, 0x02, 0x0F, 0xF0, 0xFF, })
                Assert.AreEqual(value << amount, exports.Test(value));
        }
Exemple #21
0
        public void If_Compiled()
        {
            var exports = CompilerTestBase <int> .CreateInstance(
                new LocalGet(0),
                new If(),
                new Int32Constant(3),
                new Return(),
                new End(),
                new Int32Constant(2),
                new End());

            Assert.AreEqual(2, exports.Test(0));
            Assert.AreEqual(3, exports.Test(1));
        }
Exemple #22
0
    public void Int32ShiftRightSigned_Compiled()
    {
        const int amount = 0xF;

        var exports = CompilerTestBase <int> .CreateInstance(
            new LocalGet(0),
            new Int32Constant(amount),
            new Int32ShiftRightSigned(),
            new End());

        foreach (var value in new[] { 0x00, 0x0F, 0xF0, 0xFF, })
        {
            Assert.AreEqual(value >> amount, exports.Test(value));
        }
    }
Exemple #23
0
        public void BranchIf_Compiled()
        {
            var exports = CompilerTestBase <int> .CreateInstance(
                new Block(BlockType.Empty),
                new LocalGet(0),
                new BranchIf(0),
                new Int32Constant(2),
                new Return(),
                new End(),
                new Int32Constant(1),
                new End());

            Assert.AreEqual(2, exports.Test(0));
            Assert.AreEqual(1, exports.Test(1));
        }
        public void Int32Or_Compiled()
        {
            const int comparand = 0xF;

            var exports = CompilerTestBase <int> .CreateInstance(
                new GetLocal(0),
                new Int32Constant(comparand),
                new Int32Or(),
                new End());

            foreach (var value in new[] { 0x00, 0x0F, 0xF0, 0xFF, })
            {
                Assert.AreEqual(value | comparand, exports.Test(value));
            }
        }
        public void Int32RemainderSigned_Compiled()
        {
            const int divisor = 0xF;

            var exports = CompilerTestBase <int> .CreateInstance(
                new GetLocal(0),
                new Int32Constant(divisor),
                new Int32RemainderSigned(),
                new End());

            foreach (var value in new[] { 0x00, 0x0F, 0xF0, 0xFF, })
            {
                Assert.AreEqual(value % divisor, exports.Test(value));
            }
        }
Exemple #26
0
        public void Int64DivideSigned_Compiled()
        {
            const int divisor = 2;

            var exports = CompilerTestBase <long> .CreateInstance(
                new GetLocal(0),
                new Int64Constant(divisor),
                new Int64DivideSigned(),
                new End());

            foreach (var value in new long[] { 0, 1, 2, 3, 4, 5, })
            {
                Assert.AreEqual(value / divisor, exports.Test(value));
            }
        }
Exemple #27
0
        public void Int32DivideUnsigned_Compiled()
        {
            const uint divisor = 2;

            var exports = CompilerTestBase <int> .CreateInstance(
                new LocalGet(0),
                new Int32Constant(divisor),
                new Int32DivideUnsigned(),
                new End());

            foreach (var value in new uint[] { 0, 1, 2, 3, 4, 5, })
            {
                Assert.AreEqual(value / divisor, (uint)exports.Test((int)value));
            }
        }
        public void Int64ExclusiveOr_Compiled()
        {
            const int or = 0xF;

            var exports = CompilerTestBase <long> .CreateInstance(
                new GetLocal(0),
                new Int64Constant(or),
                new Int64ExclusiveOr(),
                new End());

            foreach (var value in new long[] { 0x00, 0x0F, 0xF0, 0xFF, })
            {
                Assert.AreEqual(value ^ or, exports.Test(value));
            }
        }
        public void Int64Subtract_Compiled()
        {
            const int comparand = 0x8;

            var exports = CompilerTestBase <long> .CreateInstance(
                new LocalGet(0),
                new Int64Constant(comparand),
                new Int64Subtract(),
                new End());

            foreach (var value in new long[] { 0x00, 0x0F, 0xF0, 0xFF, })
            {
                Assert.AreEqual(value - comparand, exports.Test(value));
            }
        }
Exemple #30
0
        public void Int64And_Compiled()
        {
            const int and = 0xF;

            var exports = CompilerTestBase <long> .CreateInstance(
                new GetLocal(0),
                new Int64Constant(and),
                new Int64And(),
                new End());

            foreach (var value in new long[] { 0x00, 0x0F, 0xF0, 0xFF, })
            {
                Assert.AreEqual(value & and, exports.Test(value));
            }
        }