Ejemplo n.º 1
0
        public void Int64Store8_Compiled_Offset0()
        {
            var compiled = MemoryWriteTestBase <long> .CreateInstance(
                new GetLocal(0),
                new GetLocal(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 = ExceptionAssert.Expect <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize, 0));
                Assert.AreEqual(Memory.PageSize, x.Offset);
                Assert.AreEqual(1u, x.Length);

                ExceptionAssert.Expect <OverflowException>(() => exports.Test(unchecked ((int)uint.MaxValue), 0));
            }
        }
Ejemplo n.º 2
0
        public void Float32Load_Compiled_Offset1()
        {
            var compiled = MemoryReadTestBase <float> .CreateInstance(
                new GetLocal(),
                new Float32Load
            {
                Offset = 1,
            },
                new End()
                );

            using (compiled)
            {
                Assert.IsNotNull(compiled);

                var exports = compiled.Exports;
                Assert.IsNotNull(exports);
                var memory = exports.Memory;
                Assert.AreNotEqual(IntPtr.Zero, memory.Start);
                Assert.AreEqual(0, exports.Test(0));

                var invariantCulture = CultureInfo.InvariantCulture;

                var testData = Samples.Memory;
                Marshal.Copy(testData, 0, memory.Start, testData.Length);
                Assert.AreEqual("6.207163E-36", exports.Test(0).ToString(invariantCulture));
                Assert.AreEqual("2.501747E-35", exports.Test(1).ToString(invariantCulture));
                Assert.AreEqual("1.008251E-34", exports.Test(2).ToString(invariantCulture));
                Assert.AreEqual("4.063216E-34", exports.Test(3).ToString(invariantCulture));
                Assert.AreEqual("0.03320982", exports.Test(4).ToString(invariantCulture));
                Assert.AreEqual("-8.313687E+14", exports.Test(5).ToString(invariantCulture));
                Assert.AreEqual("9.602914E-14", exports.Test(6).ToString(invariantCulture));
                Assert.AreEqual("-1.912281E+17", exports.Test(7).ToString(invariantCulture));
                Assert.AreEqual("2.021882E-38", exports.Test(8).ToString(invariantCulture));

                Assert.AreEqual(0, exports.Test((int)Memory.PageSize - 5));

                MemoryAccessOutOfRangeException x;

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

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

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

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

                ExceptionAssert.Expect <OverflowException>(() => exports.Test(unchecked ((int)uint.MaxValue)));
            }
        }
Ejemplo n.º 3
0
        public void Float64Load_Compiled_Offset1()
        {
            var compiled = MemoryReadTestBase <double> .CreateInstance(
                new GetLocal(),
                new Float64Load
            {
                Offset = 1,
            },
                new End()
                );

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

                var exports = compiled.Exports;
                Assert.AreEqual(0, exports.Test(0));

                var invariantCulture = CultureInfo.InvariantCulture;

                var testData = Samples.Memory;
                Marshal.Copy(testData, 0, memory.Start, testData.Length);
                Assert.AreEqual("1.06703248910785E-14", exports.Test(0).ToString(invariantCulture));
                Assert.AreEqual("-1.14389371511465E+117", exports.Test(1).ToString(invariantCulture));
                Assert.AreEqual("4.12824598825351E-107", exports.Test(2).ToString(invariantCulture));
                Assert.AreEqual("-9.39245758009613E+135", exports.Test(3).ToString(invariantCulture));
                Assert.AreEqual("1.60424369241791E-304", exports.Test(4).ToString(invariantCulture));
                Assert.AreEqual("1.19599597184682E-309", exports.Test(5).ToString(invariantCulture));
                Assert.AreEqual("4.6718592650265E-312", exports.Test(6).ToString(invariantCulture));
                Assert.AreEqual("1.82494502538554E-314", exports.Test(7).ToString(invariantCulture));
                Assert.AreEqual("7.12869138768568E-317", exports.Test(8).ToString(invariantCulture));

                Assert.AreEqual(0, exports.Test((int)Memory.PageSize - 9));

                MemoryAccessOutOfRangeException x;

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

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

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

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

                ExceptionAssert.Expect <OverflowException>(() => exports.Test(unchecked ((int)uint.MaxValue)));
            }
        }
Ejemplo n.º 4
0
        public void Int32Load_Compiled_Offset1()
        {
            var compiled = MemoryReadTestBase <int> .CreateInstance(
                new GetLocal(),
                new Int32Load
            {
                Offset = 1,
            },
                new End()
                );

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

                var exports = compiled.Exports;
                Assert.AreEqual(0, exports.Test(0));

                var testData = Samples.Memory;
                Marshal.Copy(testData, 0, memory.Start, testData.Length);
                Assert.AreEqual(84148994, exports.Test(0));
                Assert.AreEqual(100992003, exports.Test(1));
                Assert.AreEqual(117835012, exports.Test(2));
                Assert.AreEqual(134678021, exports.Test(3));
                Assert.AreEqual(1023936262, exports.Test(4));
                Assert.AreEqual(-667088889, exports.Test(5));
                Assert.AreEqual(702037256, exports.Test(6));
                Assert.AreEqual(-601237443, exports.Test(7));
                Assert.AreEqual(14428632, exports.Test(8));

                Assert.AreEqual(0, exports.Test((int)Memory.PageSize - 5));

                MemoryAccessOutOfRangeException x;

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

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

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

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

                ExceptionAssert.Expect <OverflowException>(() => exports.Test(unchecked ((int)uint.MaxValue)));
            }
        }
Ejemplo n.º 5
0
        public void Int64Load_Compiled_Offset1()
        {
            var compiled = MemoryReadTestBase <long> .CreateInstance(
                new GetLocal(),
                new Int64Load
            {
                Offset = 1,
            },
                new End()
                );

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

                var exports = compiled.Exports;
                Assert.AreEqual(0, exports.Test(0));

                var testData = Samples.Memory;
                Marshal.Copy(testData, 0, memory.Start, testData.Length);
                Assert.AreEqual(4397772758562636546, exports.Test(0));
                Assert.AreEqual(-2865124961678982141, exports.Test(1));
                Assert.AreEqual(3015227055211414788, exports.Test(2));
                Assert.AreEqual(-2582295154680986107, exports.Test(3));
                Assert.AreEqual(61970503589955334, exports.Test(4));
                Assert.AreEqual(242072279648263, exports.Test(5));
                Assert.AreEqual(945594842376, exports.Test(6));
                Assert.AreEqual(3693729853, exports.Test(7));
                Assert.AreEqual(14428632, exports.Test(8));

                Assert.AreEqual(0, exports.Test((int)Memory.PageSize - 9));

                MemoryAccessOutOfRangeException x;

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

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

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

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

                ExceptionAssert.Expect <OverflowException>(() => exports.Test(unchecked ((int)uint.MaxValue)));
            }
        }
Ejemplo n.º 6
0
        public void End_Compiled_IncorrectStack_Expect1Actual0()
        {
            var exception = ExceptionAssert.Expect <StackSizeIncorrectException>(() =>
                                                                                 AssemblyBuilder.CreateInstance <dynamic>("Test", ValueType.Int32,
                                                                                                                          new End()
                                                                                                                          ).Test());

            Assert.AreEqual(1, exception.Expected);
            Assert.AreEqual(0, exception.Actual);
        }
Ejemplo n.º 7
0
        public void Drop_Compiled()
        {
            Assert.AreEqual <int>(1, AssemblyBuilder.CreateInstance <dynamic>("Test", ValueType.Int32, new Int32Constant(1), new Int32Constant(2), new Drop(), new End()).Test());

            var stackTooSmall = ExceptionAssert.Expect <StackTooSmallException>(() => AssemblyBuilder.CreateInstance <dynamic>("Test", null, new Drop(), new End()).Test());

            Assert.AreEqual(OpCode.Drop, stackTooSmall.OpCode);
            Assert.AreEqual(1, stackTooSmall.Minimum);
            Assert.AreEqual(0, stackTooSmall.Actual);
        }
        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));
            }
        }
Ejemplo n.º 9
0
        public void Int32Store_Compiled_Offset1()
        {
            var compiled = MemoryWriteTestBase <int> .CreateInstance(
                new GetLocal(0),
                new GetLocal(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 = 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));
            }
        }
Ejemplo n.º 10
0
        public void End_Compiled_BlockInt32_WrongType()
        {
            var exception = ExceptionAssert.Expect <StackTypeInvalidException>(() =>
                                                                               AssemblyBuilder.CreateInstance <dynamic>("Test", ValueType.Int32,
                                                                                                                        new Block(BlockType.Int32),
                                                                                                                        new Int64Constant(5),
                                                                                                                        new End(),
                                                                                                                        new Int32WrapInt64(),
                                                                                                                        new End()
                                                                                                                        ).Test());

            Assert.AreEqual(ValueType.Int32, exception.Expected);
            Assert.AreEqual(ValueType.Int64, exception.Actual);
        }
Ejemplo n.º 11
0
        public void End_Compiled_BlockFloat64_WrongType()
        {
            var exception = ExceptionAssert.Expect <StackTypeInvalidException>(() =>
                                                                               AssemblyBuilder.CreateInstance <dynamic>("Test", ValueType.Float64,
                                                                                                                        new Block(BlockType.Float64),
                                                                                                                        new Float32Constant(5),
                                                                                                                        new End(),
                                                                                                                        new Float64PromoteFloat32(),
                                                                                                                        new End()
                                                                                                                        ).Test());

            Assert.AreEqual(ValueType.Float64, exception.Expected);
            Assert.AreEqual(ValueType.Float32, exception.Actual);
        }
        public void Int32Load16Unsigned_Compiled_Offset1()
        {
            var compiled = MemoryReadTestBase <int> .CreateInstance(
                new GetLocal(),
                new Int32Load16Unsigned
            {
                Offset = 1,
            },
                new End()
                );

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

                var exports = compiled.Exports;
                Assert.AreEqual(0, exports.Test(0));

                var testData = Samples.Memory;
                Marshal.Copy(testData, 0, memory.Start, testData.Length);
                Assert.AreEqual(770, exports.Test(0));
                Assert.AreEqual(1027, exports.Test(1));
                Assert.AreEqual(1284, exports.Test(2));
                Assert.AreEqual(1541, exports.Test(3));
                Assert.AreEqual(1798, exports.Test(4));
                Assert.AreEqual(2055, exports.Test(5));
                Assert.AreEqual(15624, exports.Test(6));
                Assert.AreEqual(55357, exports.Test(7));
                Assert.AreEqual(10712, exports.Test(8));

                Assert.AreEqual(0, exports.Test((int)Memory.PageSize - 3));

                MemoryAccessOutOfRangeException x;

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

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

                ExceptionAssert.Expect <OverflowException>(() => exports.Test(unchecked ((int)uint.MaxValue)));
            }
        }
Ejemplo n.º 13
0
        public void Int64TruncateUnsignedFloat64_Compiled()
        {
            var exports = ConversionTestBase <double, long> .CreateInstance(
                new GetLocal(0),
                new Int64TruncateUnsignedFloat64(),
                new End());

            foreach (var value in new[] { 0, 1.5, -1.5, 123445678901234.0 })
            {
                Assert.AreEqual((long)value, exports.Test(value));
            }

            const double exceptional = 1234456789012345678901234567890.0;

            ExceptionAssert.Expect <System.OverflowException>(() => exports.Test(exceptional));
        }
        public void Int32TruncateUnsignedFloat32_Compiled()
        {
            var exports = ConversionTestBase <float, int> .CreateInstance(
                new GetLocal(0),
                new Int32TruncateUnsignedFloat32(),
                new End());

            foreach (var value in new[] { 0, 1.5f, -1.5f })
            {
                Assert.AreEqual((int)value, exports.Test(value));
            }

            const float exceptional = 123445678901234f;

            ExceptionAssert.Expect <System.OverflowException>(() => exports.Test(exceptional));
        }
Ejemplo n.º 15
0
        public void Int64Load8Unsigned_Compiled_Offset0()
        {
            var compiled = MemoryReadTestBase <long> .CreateInstance(
                new GetLocal(),
                new Int64Load8Unsigned(),
                new End()
                );

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

                var exports = compiled.Exports;
                Assert.AreEqual(0, exports.Test(0));

                var testData = Samples.Memory;
                Marshal.Copy(testData, 0, memory.Start, testData.Length);
                Assert.AreEqual(254, exports.Test(0));
                Assert.AreEqual(2, exports.Test(1));
                Assert.AreEqual(3, exports.Test(2));
                Assert.AreEqual(4, exports.Test(3));
                Assert.AreEqual(5, exports.Test(4));
                Assert.AreEqual(6, exports.Test(5));
                Assert.AreEqual(7, exports.Test(6));
                Assert.AreEqual(8, exports.Test(7));
                Assert.AreEqual(61, exports.Test(8));

                Assert.AreEqual(0, exports.Test((int)Memory.PageSize - 4));

                MemoryAccessOutOfRangeException x;

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

                ExceptionAssert.Expect <OverflowException>(() => exports.Test(unchecked ((int)uint.MaxValue)));
            }
        }
        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 = ExceptionAssert.Expect <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 8, 0));
                Assert.AreEqual(Memory.PageSize - 7, x.Offset);
                Assert.AreEqual(8u, x.Length);

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

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

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

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

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

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

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

                ExceptionAssert.Expect <OverflowException>(() => exports.Test(unchecked ((int)uint.MaxValue), 0));
            }
        }
Ejemplo n.º 17
0
 public void Unreachable_Compiled()
 {
     ExceptionAssert.Expect <UnreachableException>(() => AssemblyBuilder.CreateInstance <dynamic>("Test", null, new Unreachable(), new End()).Test());
 }
Ejemplo n.º 18
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 = ExceptionAssert.Expect <MemoryAccessOutOfRangeException>(() => exports.Test((int)Memory.PageSize - 8, 0));
                Assert.AreEqual(Memory.PageSize - 7, x.Offset);
                Assert.AreEqual(8u, x.Length);

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

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

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

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

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

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

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

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