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)); } }
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)); } }
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)); } }