Assert.Equal(memory.Slice(i, a.Length - i), memory[range]);
Assert.Equal(roMemory.Slice(i, a.Length - i), roMemory[range]);
- Assert.Equal(memory.Slice(i), memory.Slice(Index.FromStart(i)));
- Assert.Equal(roMemory.Slice(i), roMemory.Slice(Index.FromStart(i)));
+ Assert.Equal(memory.Slice(i), memory[i..]);
+ Assert.Equal(roMemory.Slice(i), roMemory[i..]);
- Assert.Equal(memory.Slice(i, a.Length - i), memory.Slice(range));
- Assert.Equal(roMemory.Slice(i, a.Length - i), roMemory.Slice(range));
+ Assert.Equal(memory.Slice(i, a.Length - i), memory[range]);
+ Assert.Equal(roMemory.Slice(i, a.Length - i), roMemory[range]);
}
range = new Range(Index.FromStart(0), Index.FromStart(a.Length + 1));
for (int i = 0; i < span.Length; i++)
{
- Assert.True(span.Slice(i) == span.Slice(Index.FromStart(i)));
- Assert.True(span.Slice(span.Length - i - 1) == span.Slice(Index.FromEnd(i + 1)));
+ Assert.True(span.Slice(i) == span[i..]);
+ Assert.True(span.Slice(span.Length - i - 1) == span[^(i + 1)..]);
- Assert.True(roSpan.Slice(i) == roSpan.Slice(Index.FromStart(i)));
- Assert.True(roSpan.Slice(roSpan.Length - i - 1) == roSpan.Slice(Index.FromEnd(i + 1)));
+ Assert.True(roSpan.Slice(i) == roSpan[i..]);
+ Assert.True(roSpan.Slice(roSpan.Length - i - 1) == roSpan[^(i + 1)..]);
range = new Range(Index.FromStart(i), Index.FromEnd(0));
- Assert.True(span.Slice(i, span.Length - i) == span.Slice(range));
- Assert.True(roSpan.Slice(i, roSpan.Length - i) == roSpan.Slice(range));
+ Assert.True(span.Slice(i, span.Length - i) == span[range]);
+ Assert.True(roSpan.Slice(i, roSpan.Length - i) == roSpan[range]);
}
range = new Range(Index.FromStart(0), Index.FromStart(span.Length + 1));
- Assert.Throws<ArgumentOutOfRangeException>(() => new Span<char>(s.ToCharArray()).Slice(range));
- Assert.Throws<ArgumentOutOfRangeException>(() => s.AsSpan().Slice(range));
+
+ Assert.Throws<ArgumentOutOfRangeException>(delegate() { var spp = new Span<char>(s.ToCharArray())[range]; });
+ Assert.Throws<ArgumentOutOfRangeException>(delegate() { var spp = s.AsSpan()[range]; });
}
}
}
\ No newline at end of file
public Memory(T[] array, int start, int length) { throw null; }
public static System.Memory<T> Empty { get { throw null; } }
public bool IsEmpty { get { throw null; } }
- public System.Memory<T> this[System.Range range] { get { throw null; } }
public int Length { get { throw null; } }
public System.Span<T> Span { get { throw null; } }
public void CopyTo(System.Memory<T> destination) { }
public static implicit operator System.ReadOnlyMemory<T> (System.Memory<T> memory) { throw null; }
public static implicit operator System.Memory<T> (T[] array) { throw null; }
public System.Buffers.MemoryHandle Pin() { throw null; }
- public System.Memory<T> Slice(System.Index startIndex) { throw null; }
public System.Memory<T> Slice(int start) { throw null; }
public System.Memory<T> Slice(int start, int length) { throw null; }
- public System.Memory<T> Slice(System.Range range) { throw null; }
public T[] ToArray() { throw null; }
public override string ToString() { throw null; }
public bool TryCopyTo(System.Memory<T> destination) { throw null; }
public ReadOnlyMemory(T[] array, int start, int length) { throw null; }
public static System.ReadOnlyMemory<T> Empty { get { throw null; } }
public bool IsEmpty { get { throw null; } }
- public System.ReadOnlyMemory<T> this[System.Range range] { get { throw null; } }
public int Length { get { throw null; } }
public System.ReadOnlySpan<T> Span { get { throw null; } }
public void CopyTo(System.Memory<T> destination) { }
public static implicit operator System.ReadOnlyMemory<T> (System.ArraySegment<T> segment) { throw null; }
public static implicit operator System.ReadOnlyMemory<T> (T[] array) { throw null; }
public System.Buffers.MemoryHandle Pin() { throw null; }
- public System.ReadOnlyMemory<T> Slice(System.Index startIndex) { throw null; }
public System.ReadOnlyMemory<T> Slice(int start) { throw null; }
public System.ReadOnlyMemory<T> Slice(int start, int length) { throw null; }
- public System.ReadOnlyMemory<T> Slice(System.Range range) { throw null; }
public T[] ToArray() { throw null; }
public override string ToString() { throw null; }
public bool TryCopyTo(System.Memory<T> destination) { throw null; }
public ReadOnlySpan(T[] array, int start, int length) { throw null; }
public static System.ReadOnlySpan<T> Empty { get { throw null; } }
public bool IsEmpty { get { throw null; } }
- public ref readonly T this[System.Index index] { get { throw null; } }
public ref readonly T this[int index] { get { throw null; } }
- public System.ReadOnlySpan<T> this[System.Range range] { get { throw null; } }
public int Length { get { throw null; } }
public void CopyTo(System.Span<T> destination) { }
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
public static implicit operator System.ReadOnlySpan<T> (System.ArraySegment<T> segment) { throw null; }
public static implicit operator System.ReadOnlySpan<T> (T[] array) { throw null; }
public static bool operator !=(System.ReadOnlySpan<T> left, System.ReadOnlySpan<T> right) { throw null; }
- public System.ReadOnlySpan<T> Slice(System.Index startIndex) { throw null; }
public System.ReadOnlySpan<T> Slice(int start) { throw null; }
public System.ReadOnlySpan<T> Slice(int start, int length) { throw null; }
- public System.ReadOnlySpan<T> Slice(System.Range range) { throw null; }
public T[] ToArray() { throw null; }
public override string ToString() { throw null; }
public bool TryCopyTo(System.Span<T> destination) { throw null; }
public Span(T[] array, int start, int length) { throw null; }
public static System.Span<T> Empty { get { throw null; } }
public bool IsEmpty { get { throw null; } }
- public ref T this[System.Index index] { get { throw null; } }
public ref T this[int index] { get { throw null; } }
- public System.Span<T> this[System.Range range] { get { throw null; } }
public int Length { get { throw null; } }
public void Clear() { }
public void CopyTo(System.Span<T> destination) { }
public static implicit operator System.ReadOnlySpan<T> (System.Span<T> span) { throw null; }
public static implicit operator System.Span<T> (T[] array) { throw null; }
public static bool operator !=(System.Span<T> left, System.Span<T> right) { throw null; }
- public System.Span<T> Slice(System.Index startIndex) { throw null; }
public System.Span<T> Slice(int start) { throw null; }
public System.Span<T> Slice(int start, int length) { throw null; }
- public System.Span<T> Slice(System.Range range) { throw null; }
public T[] ToArray() { throw null; }
public override string ToString() { throw null; }
public bool TryCopyTo(System.Span<T> destination) { throw null; }
[System.CLSCompliantAttribute(false)]
public unsafe String(sbyte* value, int startIndex, int length, System.Text.Encoding enc) { }
[System.Runtime.CompilerServices.IndexerName("Chars")]
- public char this[System.Index index] { get { throw null; } }
- [System.Runtime.CompilerServices.IndexerName("Chars")]
public char this[int index] { get { throw null; } }
- [System.Runtime.CompilerServices.IndexerName("Chars")]
- public string this[System.Range range] { get { throw null; } }
public int Length { get { throw null; } }
public object Clone() { throw null; }
public static int Compare(System.String strA, int indexA, System.String strB, int indexB, int length) { throw null; }
public bool StartsWith(System.String value) { throw null; }
public bool StartsWith(System.String value, bool ignoreCase, System.Globalization.CultureInfo culture) { throw null; }
public bool StartsWith(System.String value, System.StringComparison comparisonType) { throw null; }
- public System.String Substring(System.Index startIndex) { throw null; }
public System.String Substring(int startIndex) { throw null; }
public System.String Substring(int startIndex, int length) { throw null; }
- public System.String Substring(System.Range range) { throw null; }
System.Collections.Generic.IEnumerator<char> System.Collections.Generic.IEnumerable<System.Char>.GetEnumerator() { throw null; }
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { throw null; }
bool System.IConvertible.ToBoolean(System.IFormatProvider provider) { throw null; }
// See the LICENSE file in the project root for more information.
using System;
+using System.Collections.Generic;
using Xunit;
namespace System.Tests
index1 = new Index(50, fromEnd: true);
Assert.Equal("^" + 50.ToString(), index1.ToString());
}
+
+ [Fact]
+ public static void CollectionTest()
+ {
+ int [] array = new int [] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
+ List<int> list = new List<int>(array);
+
+ for (int i = 0; i < list.Count; i++)
+ {
+ Assert.Equal(i, list[Index.FromStart(i)]);
+ Assert.Equal(list.Count - i - 1, list[^(i + 1)]);
+
+ Assert.Equal(i, array[Index.FromStart(i)]);
+ Assert.Equal(list.Count - i - 1, array[^(i + 1)]);
+
+ Assert.Equal(array.AsSpan().Slice(i, array.Length - i).ToArray(), array[i..]);
+ }
+ }
}
}
range1 = new Range(new Index(10, fromEnd: false), new Index(20, fromEnd: true));
Assert.Equal(10.ToString() + "..^" + 20.ToString(), range1.ToString());
}
+
+ [Fact]
+ public static void CustomTypeTest()
+ {
+ CustomRangeTester crt = new CustomRangeTester(new int [] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10});
+ for (int i = 0; i < crt.Length; i++)
+ {
+ Assert.Equal(crt[i], crt[Index.FromStart(i)]);
+ Assert.Equal(crt[crt.Length - i - 1], crt[^(i + 1)]);
+
+ Assert.True(crt.Slice(i, crt.Length - i).Equals(crt[i..^0]), $"Index = {i} and {crt.Slice(i, crt.Length - i)} != {crt[i..^0]}");
+ }
+ }
+
+ // CustomRangeTester is a custom class which containing the members Length, Slice and int indexer.
+ // Having these members allow the C# compiler to support
+ // this[Index]
+ // this[Range]
+ private class CustomRangeTester : IEquatable<CustomRangeTester>
+ {
+ private int [] _data;
+
+ public CustomRangeTester(int [] data) => _data = data;
+ public int Length => _data.Length;
+ public int this[int index] => _data[index];
+ public CustomRangeTester Slice(int start, int length) => new CustomRangeTester(_data.AsSpan().Slice(start, length).ToArray());
+
+ public int [] Data => _data;
+
+ public bool Equals (CustomRangeTester other)
+ {
+ if (_data.Length == other.Data.Length)
+ {
+ for (int i = 0; i < _data.Length; i++)
+ {
+ if (_data[i] != other.Data[i])
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ return false;
+ }
+
+ public override string ToString()
+ {
+ if (Length == 0)
+ {
+ return "[]";
+ }
+
+ string s = "[" + _data[0];
+
+ for (int i = 1; i < Length; i++)
+ {
+ s = s + ", " + _data[i];
+ }
+
+ return s + "]";
+ }
+ }
}
}
Assert.Equal(expected, result);
}
- // [Fact]
- // public static void IndexerUsingIndexTest()
- // {
- // Index index;
- // string s = "0123456789ABCDEF";
-
- // for (int i = 0; i < s.Length; i++)
- // {
- // index = Index.FromStart(i);
- // Assert.Equal(s[i], s[index]);
-
- // index = Index.FromEnd(i + 1);
- // Assert.Equal(s[s.Length - i - 1], s[index]);
- // }
-
- // index = Index.FromStart(s.Length + 1);
- // char c;
- // Assert.Throws<IndexOutOfRangeException>(() => c = s[index]);
-
- // index = Index.FromEnd(s.Length + 1);
- // Assert.Throws<IndexOutOfRangeException>(() => c = s[index]);
- // }
-
- // [Fact]
- // public static void IndexerUsingRangeTest()
- // {
- // Range range;
- // string s = "0123456789ABCDEF";
-
- // for (int i = 0; i < s.Length; i++)
- // {
- // range = new Range(Index.FromStart(0), Index.FromStart(i));
- // Assert.Equal(s.Substring(0, i), s[range]);
-
- // range = new Range(Index.FromEnd(s.Length), Index.FromEnd(i));
- // Assert.Equal(s.Substring(0, s.Length - i), s[range]);
- // }
-
- // range = new Range(Index.FromStart(s.Length - 2), Index.FromStart(s.Length + 1));
- // string s1;
- // Assert.Throws<ArgumentOutOfRangeException>(() => s1 = s[range]);
-
- // range = new Range(Index.FromEnd(s.Length + 1), Index.FromEnd(0));
- // Assert.Throws<ArgumentOutOfRangeException>(() => s1 = s[range]);
- // }
+ [Fact]
+ public static void IndexerUsingIndexTest()
+ {
+ Index index;
+ string s = "0123456789ABCDEF";
+
+ for (int i = 0; i < s.Length; i++)
+ {
+ index = Index.FromStart(i);
+ Assert.Equal(s[i], s[index]);
+
+ index = Index.FromEnd(i + 1);
+ Assert.Equal(s[s.Length - i - 1], s[index]);
+ }
+
+ index = Index.FromStart(s.Length + 1);
+ char c;
+ Assert.Throws<IndexOutOfRangeException>(() => c = s[index]);
+
+ index = Index.FromEnd(s.Length + 1);
+ Assert.Throws<IndexOutOfRangeException>(() => c = s[index]);
+ }
+
+ [Fact]
+ public static void IndexerUsingRangeTest()
+ {
+ Range range;
+ string s = "0123456789ABCDEF";
+
+ for (int i = 0; i < s.Length; i++)
+ {
+ range = new Range(Index.FromStart(0), Index.FromStart(i));
+ Assert.Equal(s.Substring(0, i), s[range]);
+
+ range = new Range(Index.FromEnd(s.Length), Index.FromEnd(i));
+ Assert.Equal(s.Substring(0, s.Length - i), s[range]);
+ }
+
+ range = new Range(Index.FromStart(s.Length - 2), Index.FromStart(s.Length + 1));
+ string s1;
+ Assert.Throws<ArgumentOutOfRangeException>(() => s1 = s[range]);
+
+ range = new Range(Index.FromEnd(s.Length + 1), Index.FromEnd(0));
+ Assert.Throws<ArgumentOutOfRangeException>(() => s1 = s[range]);
+ }
[Fact]
public static void SubstringUsingIndexTest()
for (int i = 0; i < s.Length; i++)
{
- Assert.Equal(s.Substring(i), s.Substring(Index.FromStart(i)));
- Assert.Equal(s.Substring(s.Length - i - 1), s.Substring(Index.FromEnd(i + 1)));
+ Assert.Equal(s.Substring(i), s[i..]);
+ Assert.Equal(s.Substring(s.Length - i - 1), s[^(i + 1)..]);
}
// String.Substring allows the string length as a valid input.
- Assert.Equal(s.Substring(s.Length), s.Substring(Index.FromStart(s.Length)));
+ Assert.Equal(s.Substring(s.Length), s[s.Length..]);
- Assert.Throws<ArgumentOutOfRangeException>(() => s.Substring(Index.FromStart(s.Length + 1)));
- Assert.Throws<ArgumentOutOfRangeException>(() => s.Substring(Index.FromEnd(s.Length + 1)));
+ Assert.Throws<ArgumentOutOfRangeException>(() => s[(s.Length + 1)..]);
+ Assert.Throws<ArgumentOutOfRangeException>(() => s[^(s.Length + 1)..]);
}
[Fact]
for (int i = 0; i < s.Length; i++)
{
range = new Range(Index.FromStart(0), Index.FromStart(i));
- Assert.Equal(s.Substring(0, i), s.Substring(range));
+ Assert.Equal(s.Substring(0, i), s[range]);
range = new Range(Index.FromEnd(s.Length), Index.FromEnd(i));
- Assert.Equal(s.Substring(0, s.Length - i), s.Substring(range));
+ Assert.Equal(s.Substring(0, s.Length - i), s[range]);
}
range = new Range(Index.FromStart(s.Length - 2), Index.FromStart(s.Length + 1));
string s1;
- Assert.Throws<ArgumentOutOfRangeException>(() => s1 = s.Substring(range));
+ Assert.Throws<ArgumentOutOfRangeException>(() => s1 = s[range]);
range = new Range(Index.FromEnd(s.Length + 1), Index.FromEnd(0));
- Assert.Throws<ArgumentOutOfRangeException>(() => s1 = s.Substring(range));
+ Assert.Throws<ArgumentOutOfRangeException>(() => s1 = s[range]);
}
/// <summary>
public static implicit operator ReadOnlySpan<Char8>(Utf8String value) => throw null;
public static bool operator ==(Utf8String left, Utf8String right) => throw null;
public static bool operator !=(Utf8String left, Utf8String right) => throw null;
- public Char8 this[Index index] => throw null;
public Char8 this[int index] => throw null;
- public Utf8String this[Range range] => throw null;
public int Length => throw null;
public bool Contains(char value) => throw null;
public bool Contains(System.Text.Rune value) => throw null;
public int IndexOf(char value) => throw null;
public int IndexOf(System.Text.Rune value) => throw null;
public static bool IsNullOrEmpty(Utf8String value) => throw null;
+ [ComponentModel.EditorBrowsable(ComponentModel.EditorBrowsableState.Never)] // for compiler use only
+ public Utf8String Slice(int startIndex, int length) => throw null;
public bool StartsWith(char value) => throw null;
public bool StartsWith(System.Text.Rune value) => throw null;
- public Utf8String Substring(Index startIndex) => throw null;
public Utf8String Substring(int startIndex) => throw null;
public Utf8String Substring(int startIndex, int length) => throw null;
- public Utf8String Substring(Range range) => throw null;
public byte[] ToByteArray() => throw null;
public byte[] ToByteArray(int startIndex, int length) => throw null;
public override string ToString() => throw null;
void Substring_IndexCore(Utf8String s, Utf8String expected)
{
- Assert.Equal(expected, s.Substring(index));
+ Range r = new Range(index, ^0);
+ Assert.Equal(expected, s[r]);
if (index.Value == 0)
{
- Assert.Same(index.IsFromEnd ? Utf8String.Empty : s, s.Substring(index));
+ Assert.Same(index.IsFromEnd ? Utf8String.Empty : s, s[r]);
}
if (index.Value == s.Length)
{
- Assert.Same(index.IsFromEnd ? s : Utf8String.Empty, s.Substring(index));
+ Assert.Same(index.IsFromEnd ? s : Utf8String.Empty, s[r]);
}
};
{
void Substring_RangeCore(Utf8String s, Range range, Utf8String expected)
{
- Assert.Equal(expected, s.Substring(range));
Assert.Equal(expected, s[range]);
if (expected.Length == s.Length)
{
- Assert.Same(s, s.Substring(range));
Assert.Same(s, s[range]);
}
if (expected.Length == 0)
{
- Assert.Same(Utf8String.Empty, s.Substring(range));
Assert.Same(Utf8String.Empty, s[range]);
}
};
CannotChangeAttribute : Attribute 'System.AttributeUsageAttribute' on 'System.Xml.Serialization.XmlNamespaceDeclarationsAttribute' changed from '[AttributeUsageAttribute(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue)]' in the contract to '[AttributeUsageAttribute(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, AllowMultiple=false)]' in the implementation.
MembersMustExist : Member 'System.Range.GetOffsetAndLength(System.Int32)' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Range.OffsetAndLength' does not exist in the implementation but it does exist in the contract.
-Total Issues: 61
+MembersMustExist : Member 'System.Memory<T>.Item.get(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Memory<T>.Slice(System.Index)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Memory<T>.Slice(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.ReadOnlyMemory<T>.Item.get(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.ReadOnlyMemory<T>.Slice(System.Index)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.ReadOnlyMemory<T>.Slice(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.ReadOnlySpan<T>.Item.get(System.Index)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.ReadOnlySpan<T>.Item.get(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.ReadOnlySpan<T>.Slice(System.Index)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.ReadOnlySpan<T>.Slice(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Span<T>.Item.get(System.Index)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Span<T>.Item.get(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Span<T>.Slice(System.Index)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Span<T>.Slice(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.String.Chars.get(System.Index)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.String.Chars.get(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.String.Substring(System.Index)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.String.Substring(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Utf8String.Slice(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+Total Issues: 80
CannotChangeAttribute : Attribute 'System.AttributeUsageAttribute' on 'System.Xml.Serialization.XmlNamespaceDeclarationsAttribute' changed from '[AttributeUsageAttribute(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue)]' in the contract to '[AttributeUsageAttribute(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, AllowMultiple=false)]' in the implementation.
MembersMustExist : Member 'System.Range.GetOffsetAndLength(System.Int32)' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'System.Range.OffsetAndLength' does not exist in the implementation but it does exist in the contract.
-Total Issues: 64
+MembersMustExist : Member 'System.Memory<T>.Item.get(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Memory<T>.Slice(System.Index)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Memory<T>.Slice(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.ReadOnlyMemory<T>.Item.get(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.ReadOnlyMemory<T>.Slice(System.Index)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.ReadOnlyMemory<T>.Slice(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.ReadOnlySpan<T>.Item.get(System.Index)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.ReadOnlySpan<T>.Item.get(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.ReadOnlySpan<T>.Slice(System.Index)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.ReadOnlySpan<T>.Slice(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Span<T>.Item.get(System.Index)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Span<T>.Item.get(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Span<T>.Slice(System.Index)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Span<T>.Slice(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.String.Chars.get(System.Index)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.String.Chars.get(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.String.Substring(System.Index)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.String.Substring(System.Range)' does not exist in the implementation but it does exist in the contract.
+MembersMustExist : Member 'System.Utf8String.Slice(System.Int32, System.Int32)' does not exist in the implementation but it does exist in the contract.
+Total Issues: 83