Esempio n. 1
0
        public void Int64Store8_Compiled_Offset0()
        {
            var compiled = MemoryWriteTestBase <long> .CreateInstance(
                new LocalGet(0),
                new LocalGet(1),
                new Int64Store8(),
                new End()
                );

            Assert.IsNotNull(compiled);

            using (compiled)
            {
                Assert.IsNotNull(compiled.Exports);
                var memory = compiled.Exports.Memory;
                Assert.AreNotEqual(IntPtr.Zero, memory.Start);

                var exports = compiled.Exports;
                exports.Test(0, 128);
                Assert.AreEqual(128, Marshal.ReadInt32(memory.Start));
                Assert.AreEqual(0, Marshal.ReadInt32(memory.Start, 1));

                exports.Test((int)Memory.PageSize - 8, 1);

                Assert.AreEqual(1, Marshal.ReadInt64(memory.Start, (int)Memory.PageSize - 8));

                MemoryAccessOutOfRangeException x;

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize, 0));
                Assert.AreEqual(Memory.PageSize, x.Offset);
                Assert.AreEqual(1u, x.Length);

                Assert.ThrowsException <OverflowException>(() => exports.Test(unchecked ((int)uint.MaxValue), 0));
            }
        }
Esempio n. 2
0
        public void Int64Store32_Compiled_Offset1()
        {
            if (!Environment.Is64BitProcess)
            {
                Assert.Inconclusive("32-bit .NET has an unknown error with this process.");
            }

            var compiled = MemoryWriteTestBase <long> .CreateInstance(
                new LocalGet(0),
                new LocalGet(1),
                new Int64Store32()
            {
                Offset = 1
            },
                new End()
                );

            Assert.IsNotNull(compiled);

            using (compiled)
            {
                Assert.IsNotNull(compiled.Exports);
                var memory = compiled.Exports.Memory;
                Assert.AreNotEqual(IntPtr.Zero, memory.Start);

                var exports = compiled.Exports;
                exports.Test(0, 2147483648);
                Assert.AreEqual(0, Marshal.ReadInt32(memory.Start));
                Assert.AreEqual(-2147483648, Marshal.ReadInt32(memory.Start, 1));
                Assert.AreEqual(8388608, Marshal.ReadInt32(memory.Start, 2));
                Assert.AreEqual(32768, Marshal.ReadInt32(memory.Start, 3));
                Assert.AreEqual(128, Marshal.ReadInt32(memory.Start, 4));
                Assert.AreEqual(0, Marshal.ReadInt32(memory.Start, 5));

                exports.Test((int)Memory.PageSize - 8 - 1, 1);

                Assert.AreEqual(1, Marshal.ReadInt64(memory.Start, (int)Memory.PageSize - 8));

                MemoryAccessOutOfRangeException x;

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 4, 0));
                Assert.AreEqual(Memory.PageSize - 3, x.Offset);
                Assert.AreEqual(4u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 3, 0));
                Assert.AreEqual(Memory.PageSize - 2, x.Offset);
                Assert.AreEqual(4u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 2, 0));
                Assert.AreEqual(Memory.PageSize - 1, x.Offset);
                Assert.AreEqual(4u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 1, 0));
                Assert.AreEqual(Memory.PageSize, x.Offset);
                Assert.AreEqual(4u, x.Length);

                Assert.ThrowsException <OverflowException>(() => exports.Test(unchecked ((int)uint.MaxValue), 0));
            }
        }
        public void Float32Store_Compiled_Offset1()
        {
            var compiled = MemoryWriteTestBase <float> .CreateInstance(
                new GetLocal(0),
                new GetLocal(1),
                new Float32Store()
            {
                Offset = 1
            },
                new End()
                );

            Assert.IsNotNull(compiled);

            using (compiled)
            {
                Assert.IsNotNull(compiled.Exports);
                var memory = compiled.Exports.Memory;
                Assert.AreNotEqual(IntPtr.Zero, memory.Start);

                var exports = compiled.Exports;
                exports.Test(0, (float)Math.PI);
                Assert.AreEqual(1225775872, Marshal.ReadInt32(memory.Start));
                Assert.AreEqual(1078530011, Marshal.ReadInt32(memory.Start, 1));
                Assert.AreEqual(4213007, Marshal.ReadInt32(memory.Start, 2));
                Assert.AreEqual(16457, Marshal.ReadInt32(memory.Start, 3));
                Assert.AreEqual(64, Marshal.ReadInt32(memory.Start, 4));

                exports.Test((int)Memory.PageSize - 4 - 1, 1);

                Assert.AreEqual(1065353216, Marshal.ReadInt32(memory.Start, (int)Memory.PageSize - 4));

                MemoryAccessOutOfRangeException x;

                x = ExceptionAssert.Expect <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 4, 0));
                Assert.AreEqual(Memory.PageSize - 3, x.Offset);
                Assert.AreEqual(4u, x.Length);

                x = ExceptionAssert.Expect <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 3, 0));
                Assert.AreEqual(Memory.PageSize - 2, x.Offset);
                Assert.AreEqual(4u, x.Length);

                x = ExceptionAssert.Expect <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 2, 0));
                Assert.AreEqual(Memory.PageSize - 1, x.Offset);
                Assert.AreEqual(4u, x.Length);

                x = ExceptionAssert.Expect <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 1, 0));
                Assert.AreEqual(Memory.PageSize, x.Offset);
                Assert.AreEqual(4u, x.Length);

                ExceptionAssert.Expect <OverflowException>(() => exports.Test(unchecked ((int)uint.MaxValue), 0));
            }
        }
        public void Int32Store_Compiled_Offset1()
        {
            var compiled = MemoryWriteTestBase <int> .CreateInstance(
                new LocalGet(0),
                new LocalGet(1),
                new Int32Store()
            {
                Offset = 1
            },
                new End()
                );

            Assert.IsNotNull(compiled);

            using (compiled)
            {
                Assert.IsNotNull(compiled.Exports);
                var memory = compiled.Exports.Memory;
                Assert.AreNotEqual(IntPtr.Zero, memory.Start);

                var exports = compiled.Exports;
                exports.Test(0, unchecked ((int)2147483648));
                Assert.AreEqual(0, Marshal.ReadInt32(memory.Start));
                Assert.AreEqual(-2147483648, Marshal.ReadInt32(memory.Start, 1));
                Assert.AreEqual(8388608, Marshal.ReadInt32(memory.Start, 2));
                Assert.AreEqual(32768, Marshal.ReadInt32(memory.Start, 3));
                Assert.AreEqual(128, Marshal.ReadInt32(memory.Start, 4));

                exports.Test((int)Memory.PageSize - 4 - 1, 1);

                Assert.AreEqual(1, Marshal.ReadInt32(memory.Start, (int)Memory.PageSize - 4));

                MemoryAccessOutOfRangeException x;

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 4, 0));
                Assert.AreEqual(Memory.PageSize - 3, x.Offset);
                Assert.AreEqual(4u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 3, 0));
                Assert.AreEqual(Memory.PageSize - 2, x.Offset);
                Assert.AreEqual(4u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 2, 0));
                Assert.AreEqual(Memory.PageSize - 1, x.Offset);
                Assert.AreEqual(4u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 1, 0));
                Assert.AreEqual(Memory.PageSize, x.Offset);
                Assert.AreEqual(4u, x.Length);

                Assert.ThrowsException <OverflowException>(() => exports.Test(unchecked ((int)uint.MaxValue), 0));
            }
        }
        public void Int64Store16_Compiled_Offset1()
        {
            var compiled = MemoryWriteTestBase <long> .CreateInstance(
                new GetLocal(0),
                new GetLocal(1),
                new Int64Store16()
            {
                Offset = 1
            },
                new End()
                );

            Assert.IsNotNull(compiled);

            using (compiled)
            {
                Assert.IsNotNull(compiled.Exports);
                var memory = compiled.Exports.Memory;
                Assert.AreNotEqual(IntPtr.Zero, memory.Start);

                var exports = compiled.Exports;
                exports.Test(0, 32768);
                Assert.AreEqual(8388608, Marshal.ReadInt32(memory.Start));
                Assert.AreEqual(32768, Marshal.ReadInt32(memory.Start, 1));
                Assert.AreEqual(128, Marshal.ReadInt32(memory.Start, 2));
                Assert.AreEqual(0, Marshal.ReadInt32(memory.Start, 3));

                exports.Test((int)Memory.PageSize - 8 - 1, 1);

                Assert.AreEqual(1, Marshal.ReadInt64(memory.Start, (int)Memory.PageSize - 8));

                MemoryAccessOutOfRangeException x;

                x = ExceptionAssert.Expect <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 2, 0));
                Assert.AreEqual(Memory.PageSize - 1, x.Offset);
                Assert.AreEqual(2u, x.Length);

                x = ExceptionAssert.Expect <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 1, 0));
                Assert.AreEqual(Memory.PageSize, x.Offset);
                Assert.AreEqual(2u, x.Length);

                ExceptionAssert.Expect <OverflowException>(() => exports.Test(unchecked ((int)uint.MaxValue), 0));
            }
        }
Esempio n. 6
0
        public void Int64Store_Compiled_Offset1()
        {
            var compiled = MemoryWriteTestBase <long> .CreateInstance(
                new GetLocal(0),
                new GetLocal(1),
                new Int64Store()
            {
                Offset = 1
            },
                new End()
                );

            Assert.IsNotNull(compiled);

            using (compiled)
            {
                Assert.IsNotNull(compiled.Exports);
                var memory = compiled.Exports.Memory;
                Assert.AreNotEqual(IntPtr.Zero, memory.Start);

                var exports = compiled.Exports;
                exports.Test(0, -9223372036854775808);
                Assert.AreEqual(0, Marshal.ReadInt64(memory.Start));
                Assert.AreEqual(-9223372036854775808, Marshal.ReadInt64(memory.Start, 1));
                Assert.AreEqual(36028797018963968, Marshal.ReadInt64(memory.Start, 2));
                Assert.AreEqual(140737488355328, Marshal.ReadInt64(memory.Start, 3));
                Assert.AreEqual(549755813888, Marshal.ReadInt64(memory.Start, 4));

                exports.Test((int)Memory.PageSize - 8 - 1, 1);

                Assert.AreEqual(1, Marshal.ReadInt64(memory.Start, (int)Memory.PageSize - 8));

                MemoryAccessOutOfRangeException x;

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 8, 0));
                Assert.AreEqual(Memory.PageSize - 7, x.Offset);
                Assert.AreEqual(8u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 7, 0));
                Assert.AreEqual(Memory.PageSize - 6, x.Offset);
                Assert.AreEqual(8u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 6, 0));
                Assert.AreEqual(Memory.PageSize - 5, x.Offset);
                Assert.AreEqual(8u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 5, 0));
                Assert.AreEqual(Memory.PageSize - 4, x.Offset);
                Assert.AreEqual(8u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 4, 0));
                Assert.AreEqual(Memory.PageSize - 3, x.Offset);
                Assert.AreEqual(8u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 3, 0));
                Assert.AreEqual(Memory.PageSize - 2, x.Offset);
                Assert.AreEqual(8u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 2, 0));
                Assert.AreEqual(Memory.PageSize - 1, x.Offset);
                Assert.AreEqual(8u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 1, 0));
                Assert.AreEqual(Memory.PageSize, x.Offset);
                Assert.AreEqual(8u, x.Length);

                Assert.ThrowsException <OverflowException>(() => exports.Test(unchecked ((int)uint.MaxValue), 0));
            }
        }
        public void Float64Store_Compiled_Offset1()
        {
            var compiled = MemoryWriteTestBase <double> .CreateInstance(
                new GetLocal(0),
                new GetLocal(1),
                new Float64Store()
            {
                Offset = 1
            },
                new End()
                );

            Assert.IsNotNull(compiled);

            using (compiled)
            {
                Assert.IsNotNull(compiled.Exports);
                var memory = compiled.Exports.Memory;
                Assert.AreNotEqual(IntPtr.Zero, memory.Start);

                var exports = compiled.Exports;
                exports.Test(0, Math.PI);
                Assert.AreEqual(1143805952, Marshal.ReadInt32(memory.Start));
                Assert.AreEqual(1413754136, Marshal.ReadInt32(memory.Start, 1));
                Assert.AreEqual(-78363603, Marshal.ReadInt32(memory.Start, 2));
                Assert.AreEqual(570119236, Marshal.ReadInt32(memory.Start, 3));
                Assert.AreEqual(153221972, Marshal.ReadInt32(memory.Start, 4));

                exports.Test((int)Memory.PageSize - 8 - 1, 1);

                Assert.AreEqual(4607182418800017408, Marshal.ReadInt64(memory.Start, (int)Memory.PageSize - 8));

                MemoryAccessOutOfRangeException x;

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 8, 0));
                Assert.AreEqual(Memory.PageSize - 7, x.Offset);
                Assert.AreEqual(8u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 7, 0));
                Assert.AreEqual(Memory.PageSize - 6, x.Offset);
                Assert.AreEqual(8u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 6, 0));
                Assert.AreEqual(Memory.PageSize - 5, x.Offset);
                Assert.AreEqual(8u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 5, 0));
                Assert.AreEqual(Memory.PageSize - 4, x.Offset);
                Assert.AreEqual(8u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 4, 0));
                Assert.AreEqual(Memory.PageSize - 3, x.Offset);
                Assert.AreEqual(8u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 3, 0));
                Assert.AreEqual(Memory.PageSize - 2, x.Offset);
                Assert.AreEqual(8u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 2, 0));
                Assert.AreEqual(Memory.PageSize - 1, x.Offset);
                Assert.AreEqual(8u, x.Length);

                x = Assert.ThrowsException <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 1, 0));
                Assert.AreEqual(Memory.PageSize, x.Offset);
                Assert.AreEqual(8u, x.Length);

                Assert.ThrowsException <OverflowException>(() => exports.Test(unchecked ((int)uint.MaxValue), 0));
            }
        }