public void ZeroLengthLastIndexOf_Byte() { Span <byte> sp = new Span <byte>(EmptyArray <byte> .Instance); //int idx = sp.LastIndexOf<byte>(0); int idx = SpanHelpers.FindLastIndex(ref MemoryMarshal.GetReference(sp), x => x == 0, sp.Length); Assert.Equal(-1, idx); }
public void MakeSureNoChecksGoOutOfRangeLastIndexOf_Byte() { for (int length = 0; length <= byte.MaxValue; length++) { byte[] a = new byte[length + 2]; a[0] = 99; a[length + 1] = 99; Span <byte> span = new Span <byte>(a, 1, length); //int index = span.LastIndexOf<byte>(99); int index = SpanHelpers.FindLastIndex(ref MemoryMarshal.GetReference(span), x => x == 99, span.Length); Assert.Equal(-1, index); } }
public void TestAllignmentNoMatchLastIndexOf_Byte() { byte[] array = new byte[4 * Vector <byte> .Count]; for (var i = 0; i < Vector <byte> .Count; i++) { var span = new Span <byte>(array, i, 3 * Vector <byte> .Count); //int idx = span.LastIndexOf<byte>(5); int idx = SpanHelpers.FindLastIndex(ref MemoryMarshal.GetReference(span), x => x == 5, span.Length); Assert.Equal(-1, idx); span = new Span <byte>(array, i, 3 * Vector <byte> .Count - 3); //idx = span.LastIndexOf<byte>(5); idx = SpanHelpers.FindLastIndex(ref MemoryMarshal.GetReference(span), x => x == 5, span.Length); Assert.Equal(-1, idx); } }
public void DefaultFilledLastIndexOf_Byte() { for (int length = 0; length <= byte.MaxValue; length++) { byte[] a = new byte[length]; Span <byte> span = new Span <byte>(a); for (int i = 0; i < length; i++) { byte target0 = default; //int idx = span.LastIndexOf(target0); int idx = SpanHelpers.FindLastIndex(ref MemoryMarshal.GetReference(span), x => x == target0, span.Length); Assert.Equal(length - 1, idx); } } }
public static void LastIndexOfAnyStrings_Byte(string raw, string search, char expectResult, int expectIndex) { byte[] buffers = Encoding.UTF8.GetBytes(raw); var span = new Span <byte>(buffers); char[] searchFor = search.ToCharArray(); byte[] searchForBytes = Encoding.UTF8.GetBytes(searchFor); var index = -1; if (searchFor.Length == 1) { //index = span.LastIndexOf((byte)searchFor[0]); index = SpanHelpers.FindLastIndex(ref MemoryMarshal.GetReference(span), x => x == (byte)searchFor[0], span.Length); } else if (searchFor.Length == 2) { //index = span.LastIndexOfAny((byte)searchFor[0], (byte)searchFor[1]); index = SpanHelpers.FindLastIndex(ref MemoryMarshal.GetReference(span), x => x == (byte)searchFor[0] || x == (byte)searchFor[1], span.Length); } else if (searchFor.Length == 3) { //index = span.LastIndexOfAny((byte)searchFor[0], (byte)searchFor[1], (byte)searchFor[2]); index = SpanHelpers.FindLastIndex(ref MemoryMarshal.GetReference(span), x => x == (byte)searchFor[0] || x == (byte)searchFor[1] || x == (byte)searchFor[2], span.Length); } else { //index = span.LastIndexOfAny(new ReadOnlySpan<byte>(searchForBytes)); index = SpanHelpers.FindLastIndex(ref MemoryMarshal.GetReference(span), x => searchForBytes.Contains(x), span.Length); } var found = span[index]; Assert.Equal((byte)expectResult, found); Assert.Equal(expectIndex, index); }
public void TestMultipleMatchLastIndexOf_Byte() { for (int length = 2; length <= byte.MaxValue; length++) { byte[] a = new byte[length]; for (int i = 0; i < length; i++) { byte val = (byte)(i + 1); a[i] = val == 200 ? (byte)201 : val; } a[length - 1] = 200; a[length - 2] = 200; Span <byte> span = new Span <byte>(a); //int idx = span.LastIndexOf<byte>(200); int idx = SpanHelpers.FindLastIndex(ref MemoryMarshal.GetReference(span), x => x == 200, span.Length); Assert.Equal(length - 1, idx); } }
public void TestNoMatchLastIndexOf_Byte() { var rnd = new Random(42); for (int length = 0; length <= byte.MaxValue; length++) { byte[] a = new byte[length]; byte target = (byte)rnd.Next(0, 256); for (int i = 0; i < length; i++) { byte val = (byte)(i + 1); a[i] = val == target ? (byte)(target + 1) : val; } Span <byte> span = new Span <byte>(a); //int idx = span.LastIndexOf(target); int idx = SpanHelpers.FindLastIndex(ref MemoryMarshal.GetReference(span), x => x == target, span.Length); Assert.Equal(-1, idx); } }
public void TestMatchLastIndexOf_Byte() { for (int length = 0; length <= byte.MaxValue; length++) { byte[] a = new byte[length]; for (int i = 0; i < length; i++) { a[i] = (byte)(i + 1); } Span <byte> span = new Span <byte>(a); for (int targetIndex = 0; targetIndex < length; targetIndex++) { byte target = a[targetIndex]; //int idx = span.LastIndexOf(target); int idx = SpanHelpers.FindLastIndex(ref MemoryMarshal.GetReference(span), x => x == target, span.Length); Assert.Equal(targetIndex, idx); } } }