public unsafe void RawStringSlice() { const int memLen = 5; var mem = stackalloc byte[memLen] { (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', }; var abcde = new RawString((IntPtr)mem, memLen); var abc = new RawString((IntPtr)mem, 3); var cd = new RawString((IntPtr)(mem + 2), 2); var de = new RawString((IntPtr)(mem + 3), 2); AssertEqual(abcde.Slice(0, abcde.Length), abcde); AssertEqual(abcde.Slice(0, 3), abc); AssertEqual(abcde.Slice(2, 2), cd); AssertEqual(abcde.Slice(3, 2), de); AssertEqual(abcde.Slice(3), de); AssertEqual(abcde.Slice(0), abcde); Assert.True(abcde.Slice(5).IsEmpty); Assert.True(abcde.Slice(5, 0).IsEmpty); AssertEqual(abcde.AsSpan(0, abcde.Length), abcde); AssertEqual(abcde.AsSpan(0, 3), abc); AssertEqual(abcde.AsSpan(2, 2), cd); AssertEqual(abcde.AsSpan(3, 2), de); AssertEqual(abcde.AsSpan(3), de); AssertEqual(abcde.AsSpan(0), abcde); Assert.True(abcde.AsSpan(5).IsEmpty); Assert.True(abcde.AsSpan(5, 0).IsEmpty); }