Ejemplo n.º 1
0
        public void Loop_Compiled()
        {
            var exports = CompilerTestBase2 <int> .CreateInstance(
                new Block(BlockType.Empty),
                new Loop(BlockType.Empty),

                new GetLocal(0),
                new Int32Constant(1),
                new Int32Add(),
                new SetLocal(0),

                new GetLocal(1),
                new Int32Constant(1),
                new Int32Add(),
                new SetLocal(1),

                new GetLocal(1),
                new If(BlockType.Empty),
                new Branch(2),
                new Else(),
                new Branch(1),
                new End(),                 //if

                new End(),                 //loop
                new End(),                 //block
                new GetLocal(0),
                new End());

            Assert.AreEqual(11, exports.Test(10, -2));
            Assert.AreEqual(12, exports.Test(10, -1));
            Assert.AreEqual(11, exports.Test(10, 0));
        }
Ejemplo n.º 2
0
    public void Float64Minimum_Compiled()
    {
        var exports = CompilerTestBase2 <double> .CreateInstance(
            new LocalGet(0),
            new LocalGet(1),
            new Float64Minimum(),
            new End());

        var values = new[]
        {
            0d,
            1d,
            -1d,
            -Math.PI,
            Math.PI,
            double.NaN,
            double.NegativeInfinity,
            double.PositiveInfinity,
            double.Epsilon,
            -double.Epsilon,
        };

        foreach (var comparand in values)
        {
            foreach (var value in values)
            {
                Assert.AreEqual(Math.Min(comparand, value), exports.Test(comparand, value));
            }

            foreach (var value in values)
            {
                Assert.AreEqual(Math.Min(value, comparand), exports.Test(value, comparand));
            }
        }
    }
    public void Float32Maximum_Compiled()
    {
        var exports = CompilerTestBase2 <float> .CreateInstance(
            new LocalGet(0),
            new LocalGet(1),
            new Float32Maximum(),
            new End());

        var values = new[]
        {
            0f,
            1f,
            -1f,
            -(float)Math.PI,
            (float)Math.PI,
            float.NaN,
            float.NegativeInfinity,
            float.PositiveInfinity,
            float.Epsilon,
            -float.Epsilon,
        };

        foreach (var comparand in values)
        {
            foreach (var value in values)
            {
                Assert.AreEqual(Math.Max(comparand, value), exports.Test(comparand, value));
            }

            foreach (var value in values)
            {
                Assert.AreEqual(Math.Max(value, comparand), exports.Test(value, comparand));
            }
        }
    }
        public void Float64CopySign_Compiled()
        {
            var exports = CompilerTestBase2 <double> .CreateInstance(
                new GetLocal(0),
                new GetLocal(1),
                new Float64CopySign(),
                new End());

            Assert.AreEqual(1, exports.Test(1, +2));
            Assert.AreEqual(-1, exports.Test(1, -2));
            Assert.AreEqual(-double.PositiveInfinity, exports.Test(double.PositiveInfinity, -2));
            Assert.AreEqual(-double.NaN, exports.Test(double.NaN, -2));
        }
    public void Float32CopySign_Compiled()
    {
        var exports = CompilerTestBase2 <float> .CreateInstance(
            new LocalGet(0),
            new LocalGet(1),
            new Float32CopySign(),
            new End());

        Assert.AreEqual(1, exports.Test(1, +2));
        Assert.AreEqual(-1, exports.Test(1, -2));
        Assert.AreEqual(-float.PositiveInfinity, exports.Test(float.PositiveInfinity, -2));
        Assert.AreEqual(-float.NaN, exports.Test(float.NaN, -2));
    }
Ejemplo n.º 6
0
        public void Int64RotateRight_Compiled()
        {
            var exports = CompilerTestBase2 <long> .CreateInstance(
                new GetLocal(0),
                new GetLocal(1),
                new Int64RotateRight(),
                new End());

            //Test cases from https://github.com/WebAssembly/spec/blob/f1b89dfaf379060c7e35eb90b7daeb14d4ade3f7/test/core/i64.wast
            Assert.AreEqual(unchecked ((long)0x8000000000000000), exports.Test(1, 1));
            Assert.AreEqual(1, exports.Test(1, 0));
            Assert.AreEqual(-1, exports.Test(-1, 1));
            Assert.AreEqual(1, exports.Test(1, 64));
            Assert.AreEqual(0x55e6cc3b01234567, exports.Test(unchecked ((long)0xabcd987602468ace), 1));
            Assert.AreEqual(0x0fe000000dc00000, exports.Test(unchecked ((long)0xfe000000dc000000), 4));
            Assert.AreEqual(0x6891a77ab3c04d5e, exports.Test(unchecked ((long)0xabcd1234ef567809), 53));
            Assert.AreEqual(0x57a2469deacf0139, exports.Test(unchecked ((long)0xabd1234ef567809c), 63));
            Assert.AreEqual(0x6891a77ab3c04d5e, exports.Test(unchecked ((long)0xabcd1234ef567809), 0xf5));
            Assert.AreEqual(unchecked ((long)0x94a77ab3c04d5e6b), exports.Test(unchecked ((long)0xabcd7294ef567809), unchecked ((long)0xffffffffffffffed)));
            Assert.AreEqual(0x57a2469deacf0139, exports.Test(unchecked ((long)0xabd1234ef567809c), unchecked ((long)0x800000000000003f)));
            Assert.AreEqual(2, exports.Test(1, 63));
            Assert.AreEqual(1, exports.Test(unchecked ((long)0x8000000000000000), 63));
        }
        public void Int32RotateLeft_Compiled()
        {
            var exports = CompilerTestBase2 <int> .CreateInstance(
                new LocalGet(0),
                new LocalGet(1),
                new Int32RotateLeft(),
                new End());

            //Test cases from https://github.com/WebAssembly/spec/blob/f1b89dfaf379060c7e35eb90b7daeb14d4ade3f7/test/core/i32.wast
            Assert.AreEqual(2, exports.Test(1, 1));
            Assert.AreEqual(1, exports.Test(1, 0));
            Assert.AreEqual(-1, exports.Test(-1, 1));
            Assert.AreEqual(1, exports.Test(1, 32));
            Assert.AreEqual(0x579b30ed, exports.Test(unchecked ((int)0xabcd9876), 1));
            Assert.AreEqual(unchecked ((int)0xe00dc00f), exports.Test(unchecked ((int)0xfe00dc00), 4));
            Assert.AreEqual(0x183a5c76, exports.Test(unchecked ((int)0xb0c1d2e3), 5));
            Assert.AreEqual(0x00100000, exports.Test(0x00008000, 37));
            Assert.AreEqual(0x183a5c76, exports.Test(unchecked ((int)0xb0c1d2e3), 0xff05));
            Assert.AreEqual(0x579beed3, exports.Test(0x769abcdf, unchecked ((int)0xffffffed)));
            Assert.AreEqual(0x579beed3, exports.Test(0x769abcdf, unchecked ((int)0x8000000d)));
            Assert.AreEqual(unchecked ((int)0x80000000), exports.Test(1, 31));
            Assert.AreEqual(1, exports.Test(unchecked ((int)0x80000000), 1));
        }
    public void Int32RotateRight_Compiled()
    {
        var exports = CompilerTestBase2 <int> .CreateInstance(
            new LocalGet(0),
            new LocalGet(1),
            new Int32RotateRight(),
            new End());

        //Test cases from https://github.com/WebAssembly/spec/blob/f1b89dfaf379060c7e35eb90b7daeb14d4ade3f7/test/core/i32.wast
        Assert.AreEqual(unchecked ((int)0x80000000), exports.Test(1, 1));
        Assert.AreEqual(1, exports.Test(1, 0));
        Assert.AreEqual(-1, exports.Test(-1, 1));
        Assert.AreEqual(1, exports.Test(1, 32));
        Assert.AreEqual(0x7f806600, exports.Test(unchecked ((int)0xff00cc00), 1));
        Assert.AreEqual(0x00008000, exports.Test(0x00080000, 4));
        Assert.AreEqual(0x1d860e97, exports.Test(unchecked ((int)0xb0c1d2e3), 5));
        Assert.AreEqual(0x00000400, exports.Test(0x00008000, 37));
        Assert.AreEqual(0x1d860e97, exports.Test(unchecked ((int)0xb0c1d2e3), 0xff05));
        Assert.AreEqual(unchecked ((int)0xe6fbb4d5), exports.Test(0x769abcdf, unchecked ((int)0xffffffed)));
        Assert.AreEqual(unchecked ((int)0xe6fbb4d5), exports.Test(0x769abcdf, unchecked ((int)0x8000000d)));
        Assert.AreEqual(2, exports.Test(1, 31));
        Assert.AreEqual(1, exports.Test(unchecked ((int)0x80000000), 31));
    }
Ejemplo n.º 9
0
    public void Int64RotateLeft_Compiled()
    {
        var exports = CompilerTestBase2 <long> .CreateInstance(
            new LocalGet(0),
            new LocalGet(1),
            new Int64RotateLeft(),
            new End());

        //Test cases from https://github.com/WebAssembly/spec/blob/f1b89dfaf379060c7e35eb90b7daeb14d4ade3f7/test/core/i64.wast
        Assert.AreEqual(2, exports.Test(1, 1));
        Assert.AreEqual(1, exports.Test(1, 0));
        Assert.AreEqual(-1, exports.Test(-1, 1));
        Assert.AreEqual(1, exports.Test(1, 64));
        Assert.AreEqual(0x579b30ec048d159d, exports.Test(unchecked ((long)0xabcd987602468ace), 1));
        Assert.AreEqual(unchecked ((long)0xe000000dc000000f), exports.Test(unchecked ((long)0xfe000000dc000000), 4));
        Assert.AreEqual(0x013579a2469deacf, exports.Test(unchecked ((long)0xabcd1234ef567809), 53));
        Assert.AreEqual(0x55e891a77ab3c04e, exports.Test(unchecked ((long)0xabd1234ef567809c), 63));
        Assert.AreEqual(0x013579a2469deacf, exports.Test(unchecked ((long)0xabcd1234ef567809), 0xf5));
        Assert.AreEqual(unchecked ((long)0xcf013579ae529dea), exports.Test(unchecked ((long)0xabcd7294ef567809), unchecked ((long)0xffffffffffffffed)));
        Assert.AreEqual(0x55e891a77ab3c04e, exports.Test(unchecked ((long)0xabd1234ef567809c), unchecked ((long)0x800000000000003f)));
        Assert.AreEqual(unchecked ((long)0x8000000000000000), exports.Test(1, 63));
        Assert.AreEqual(1, exports.Test(unchecked ((long)0x8000000000000000), 1));
    }