public static void LastIndexOfSequenceZeroLengthSpan_Byte() { Span<byte> span = new Span<byte>(EmptyArray<byte>.Instance); Span<byte> value = new Span<byte>(new byte[] { 1, 2, 3 }); int index = SpanHelpers.LastIndexOf(ref MemoryMarshal.GetReference(span), span.Length, ref MemoryMarshal.GetReference(value), value.Length); Assert.Equal(-1, index); }
public static void LastIndexOfSequenceJustPastVeryEnd_Byte() { Span<byte> span = new Span<byte>(new byte[] { 0, 1, 2, 3, 4, 5 }, 0, 5); Span<byte> value = new Span<byte>(new byte[] { 3, 4, 5 }); int index = SpanHelpers.LastIndexOf(ref MemoryMarshal.GetReference(span), span.Length, ref MemoryMarshal.GetReference(value), value.Length); Assert.Equal(-1, index); }
public static void LastIndexOfSequenceNotEvenAHeadMatch_Byte() { Span<byte> span = new Span<byte>(new byte[] { 0, 1, 77, 2, 3, 77, 77, 4, 5, 77, 77, 77, 88, 6, 6, 77, 77, 88, 9 }); Span<byte> value = new Span<byte>(new byte[] { 100, 77, 88, 99 }); int index = SpanHelpers.LastIndexOf(ref MemoryMarshal.GetReference(span), span.Length, ref MemoryMarshal.GetReference(value), value.Length); Assert.Equal(-1, index); }
public static void LastIndexOfSequenceRestart_Byte() { Span<byte> span = new Span<byte>(new byte[] { 0, 1, 77, 2, 3, 77, 77, 4, 5, 77, 77, 77, 88, 6, 6, 77, 77, 8, 9, 77, 0, 1 }); Span<byte> value = new Span<byte>(new byte[] { 77, 77, 88 }); int index = SpanHelpers.LastIndexOf(ref MemoryMarshal.GetReference(span), span.Length, ref MemoryMarshal.GetReference(value), value.Length); Assert.Equal(10, index); }
public static void LastIndexOfSequenceMultipleMatch_Byte() { Span<byte> span = new Span<byte>(new byte[] { 1, 2, 3, 1, 2, 3, 1, 2, 3, 1 }); Span<byte> value = new Span<byte>(new byte[] { 2, 3 }); int index = SpanHelpers.LastIndexOf(ref MemoryMarshal.GetReference(span), span.Length, ref MemoryMarshal.GetReference(value), value.Length); Assert.Equal(7, index); }
public static void LastIndexOfSequenceZeroLengthSpan_Char() { Span <char> span = new Span <char>(EmptyArray <char> .Instance); Span <char> value = new Span <char>(new char[] { '1', '2', '3' }); int index = SpanHelpers.LastIndexOf(ref MemoryMarshal.GetReference(span), span.Length, ref MemoryMarshal.GetReference(value), value.Length); Assert.Equal(-1, index); }
public static void LastIndexOfSequenceJustPastVeryEnd_Char() { Span <char> span = new Span <char>(new char[] { '0', '1', '2', '3', '4', '5' }, 0, 5); Span <char> value = new Span <char>(new char[] { '3', '4', '5' }); int index = SpanHelpers.LastIndexOf(ref MemoryMarshal.GetReference(span), span.Length, ref MemoryMarshal.GetReference(value), value.Length); Assert.Equal(-1, index); }
public static void LastIndexOfSequenceNotEvenAHeadMatch_Char() { Span <char> span = new Span <char>(new char[] { '0', '1', '7', '2', '3', '7', '7', '4', '5', '7', '7', '7', '8', '6', '6', '7', '7', '8', '9' }); Span <char> value = new Span <char>(new char[] { 'X', '7', '8', '9' }); int index = SpanHelpers.LastIndexOf(ref MemoryMarshal.GetReference(span), span.Length, ref MemoryMarshal.GetReference(value), value.Length); Assert.Equal(-1, index); }
public static void LastIndexOfSequenceMultipleMatch_Char() { Span <char> span = new Span <char>(new char[] { '1', '2', '3', '1', '2', '3', '1', '2', '3', '1' }); Span <char> value = new Span <char>(new char[] { '2', '3' }); int index = SpanHelpers.LastIndexOf(ref MemoryMarshal.GetReference(span), span.Length, ref MemoryMarshal.GetReference(value), value.Length); Assert.Equal(7, index); }
public static void LastIndexOfSequenceLengthOneValue_Byte() { // A zero-length value is always "found" at the start of the span. Span<byte> span = new Span<byte>(new byte[] { 0, 1, 2, 3, 4, 5 }); Span<byte> value = new Span<byte>(new byte[] { 2 }); int index = SpanHelpers.LastIndexOf(ref MemoryMarshal.GetReference(span), span.Length, ref MemoryMarshal.GetReference(value), value.Length); Assert.Equal(2, index); }
public static void LastIndexOfSequenceZeroLengthValue_Byte() { // A zero-length value is always "found" at the start of the span. Span<byte> span = new Span<byte>(new byte[] { 0, 1, 77, 2, 3, 77, 77, 4, 5, 77, 77, 77, 88, 6, 6, 77, 77, 88, 9 }); Span<byte> value = new Span<byte>(EmptyArray<byte>.Instance); int index = SpanHelpers.LastIndexOf(ref MemoryMarshal.GetReference(span), span.Length, ref MemoryMarshal.GetReference(value), value.Length); Assert.Equal(0, index); }
public static void LastIndexOfSequenceZeroLengthValue_Char() { // A zero-length value is always "found" at the start of the span. Span <char> span = new Span <char>(new char[] { '0', '1', '7', '2', '3', '7', '7', '4', '5', '7', '7', '7', '8', '6', '6', '7', '7', '8', '9' }); Span <char> value = new Span <char>(EmptyArray <char> .Instance); int index = SpanHelpers.LastIndexOf(ref MemoryMarshal.GetReference(span), span.Length, ref MemoryMarshal.GetReference(value), value.Length); Assert.Equal(0, index); }
public static void LastIndexOfSequenceLengthOneValueJustPasttVeryEnd_Char() { // A zero-length value is always "found" at the start of the span. Span <char> span = new Span <char>(new char[] { '0', '1', '2', '3', '4', '5' }, 0, 5); Span <char> value = new Span <char>(new char[] { '5' }); int index = SpanHelpers.LastIndexOf(ref MemoryMarshal.GetReference(span), span.Length, ref MemoryMarshal.GetReference(value), value.Length); Assert.Equal(-1, index); }
public int LastIndexOf(ICharSequence subString, int start) { int thisLen = this.length; uint uThisLen = (uint)thisLen; if (0u >= uThisLen) { return(IndexNotFound); } int subCount = subString.Count; start = Math.Min(start, thisLen - subCount); uint uStart = (uint)start; if (uStart > SharedConstants.TooBigOrNegative) { return(IndexNotFound); } if (0u >= (uint)subCount) { return(start); } if (subString is IHasAsciiSpan hasAscii) { return(SpanHelpers.LastIndexOf( ref MemoryMarshal.GetReference(this.AsciiSpan), start + subCount, ref MemoryMarshal.GetReference(hasAscii.AsciiSpan), subCount)); } if (subString is IHasUtf16Span hasUtf16) { return(SpanHelpers.LastIndexOf( ref MemoryMarshal.GetReference(this.Utf16Span), start + subCount, ref MemoryMarshal.GetReference(hasUtf16.Utf16Span), subCount)); } return(LastIndexOf0(subString, start)); }