예제 #1
0
        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);
        }