diff options
author | Levi Broderick <levib@microsoft.com> | 2018-01-24 01:19:25 +0300 |
---|---|---|
committer | Levi Broderick <levib@microsoft.com> | 2018-01-24 11:16:44 +0300 |
commit | 83f35ef9a79b5cd1412aeaad8d2cb84e1bfe73c4 (patch) | |
tree | 1a2c74d55d3e86844cb1869c0bd0f826bb66f2d0 /src/System.Runtime.CompilerServices.Unsafe/tests | |
parent | 2836df39b74713ce26dadbd9bd3448dffbf3bf30 (diff) |
Add Unsafe.IsAddressGreaterThan and IsAddressLessThan
Diffstat (limited to 'src/System.Runtime.CompilerServices.Unsafe/tests')
-rw-r--r-- | src/System.Runtime.CompilerServices.Unsafe/tests/UnsafeTests.cs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/System.Runtime.CompilerServices.Unsafe/tests/UnsafeTests.cs b/src/System.Runtime.CompilerServices.Unsafe/tests/UnsafeTests.cs index fce1ae27d3..508358d907 100644 --- a/src/System.Runtime.CompilerServices.Unsafe/tests/UnsafeTests.cs +++ b/src/System.Runtime.CompilerServices.Unsafe/tests/UnsafeTests.cs @@ -609,6 +609,44 @@ namespace System.Runtime.CompilerServices } [Fact] + public static unsafe void RefIsAddressGreaterThan() + { + int[] a = new int[2]; + + Assert.False(Unsafe.IsAddressGreaterThan(ref a[0], ref a[0])); + Assert.False(Unsafe.IsAddressGreaterThan(ref a[0], ref a[1])); + Assert.True(Unsafe.IsAddressGreaterThan(ref a[1], ref a[0])); + Assert.False(Unsafe.IsAddressGreaterThan(ref a[1], ref a[1])); + + // The following tests ensure that we're using unsigned comparison logic + + Assert.False(Unsafe.IsAddressGreaterThan(ref Unsafe.AsRef<byte>((void*)(1)), ref Unsafe.AsRef<byte>((void*)(-1)))); + Assert.True(Unsafe.IsAddressGreaterThan(ref Unsafe.AsRef<byte>((void*)(-1)), ref Unsafe.AsRef<byte>((void*)(1)))); + Assert.True(Unsafe.IsAddressGreaterThan(ref Unsafe.AsRef<byte>((void*)(Int32.MinValue)), ref Unsafe.AsRef<byte>((void*)(Int32.MaxValue)))); + Assert.False(Unsafe.IsAddressGreaterThan(ref Unsafe.AsRef<byte>((void*)(Int32.MaxValue)), ref Unsafe.AsRef<byte>((void*)(Int32.MinValue)))); + Assert.False(Unsafe.IsAddressGreaterThan(ref Unsafe.AsRef<byte>(null), ref Unsafe.AsRef<byte>(null))); + } + + [Fact] + public static unsafe void RefIsAddressLessThan() + { + int[] a = new int[2]; + + Assert.False(Unsafe.IsAddressLessThan(ref a[0], ref a[0])); + Assert.True(Unsafe.IsAddressLessThan(ref a[0], ref a[1])); + Assert.False(Unsafe.IsAddressLessThan(ref a[1], ref a[0])); + Assert.False(Unsafe.IsAddressLessThan(ref a[1], ref a[1])); + + // The following tests ensure that we're using unsigned comparison logic + + Assert.True(Unsafe.IsAddressLessThan(ref Unsafe.AsRef<byte>((void*)(1)), ref Unsafe.AsRef<byte>((void*)(-1)))); + Assert.False(Unsafe.IsAddressLessThan(ref Unsafe.AsRef<byte>((void*)(-1)), ref Unsafe.AsRef<byte>((void*)(1)))); + Assert.False(Unsafe.IsAddressLessThan(ref Unsafe.AsRef<byte>((void*)(Int32.MinValue)), ref Unsafe.AsRef<byte>((void*)(Int32.MaxValue)))); + Assert.True(Unsafe.IsAddressLessThan(ref Unsafe.AsRef<byte>((void*)(Int32.MaxValue)), ref Unsafe.AsRef<byte>((void*)(Int32.MinValue)))); + Assert.False(Unsafe.IsAddressLessThan(ref Unsafe.AsRef<byte>(null), ref Unsafe.AsRef<byte>(null))); + } + + [Fact] public static unsafe void ReadUnaligned_ByRef_Int32() { byte[] unaligned = Int32Double.Unaligned(123456789, 3.42); |