예제 #1
0
        public AsciiString ToUpperCase()
        {
            var thisLen = this.length;

            if (0u >= (uint)thisLen)
            {
                return(this);
            }

            var  thisSpan = this.AsciiSpan;
            var  index    = SpanHelpers.FindIndex(ref MemoryMarshal.GetReference(thisSpan), x => IsLowerCase(x), thisLen);
            uint uIndex   = (uint)index;

            if (uIndex > SharedConstants.TooBigOrNegative)
            {
                return(this);
            }

            byte[] buffer = new byte[thisLen];
            var    span   = new Span <byte>(buffer);

            if (uIndex > 0u)
            {
                thisSpan.Slice(0, index).CopyTo(span.Slice(0, index));
            }
            for (var idx = index; idx < thisLen; idx++)
            {
                byte oldValue = thisSpan[idx];
                span[idx] = ToUpperCase(thisSpan[idx]);
            }
            return(new AsciiString(buffer, false));
        }
예제 #2
0
        public void ZeroLengthIndexOf_Byte()
        {
            Span <byte> sp = new Span <byte>(EmptyArray <byte> .Instance);
            //int idx = sp.IndexOf<byte>(0);
            int idx = SpanHelpers.FindIndex(ref MemoryMarshal.GetReference(sp), x => x == 0, sp.Length);

            Assert.Equal(-1, idx);
        }
예제 #3
0
 public void MakeSureNoChecksGoOutOfRange_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.IndexOf<byte>(99);
         int index = SpanHelpers.FindIndex(ref MemoryMarshal.GetReference(span), x => x == 99, span.Length);
         Assert.Equal(-1, index);
     }
 }
예제 #4
0
        public void TestAllignmentNoMatch_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.IndexOf((byte)'1');
                int idx = SpanHelpers.FindIndex(ref MemoryMarshal.GetReference(span), x => x == (byte)'1', span.Length);
                Assert.Equal(-1, idx);

                span = new Span <byte>(array, i, 3 * Vector <byte> .Count - 3);
                //idx = span.IndexOf((byte)'1');
                idx = SpanHelpers.FindIndex(ref MemoryMarshal.GetReference(span), x => x == (byte)'1', span.Length);
                Assert.Equal(-1, idx);
            }
        }
예제 #5
0
        public void DefaultFilledIndexOf_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.IndexOf(target0);
                    int idx = SpanHelpers.FindIndex(ref MemoryMarshal.GetReference(span), x => x == target0, span.Length);
                    Assert.Equal(0, idx);
                }
            }
        }
예제 #6
0
        public static void IndexOfAnyStrings_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.IndexOf((byte)searchFor[0]);
                index = SpanHelpers.FindIndex(ref MemoryMarshal.GetReference(span),
                                              x => x == (byte)searchFor[0],
                                              span.Length);
            }
            else if (searchFor.Length == 2)
            {
                //index = span.IndexOfAny((byte)searchFor[0], (byte)searchFor[1]);
                index = SpanHelpers.FindIndex(ref MemoryMarshal.GetReference(span),
                                              x => x == (byte)searchFor[0] || x == (byte)searchFor[1],
                                              span.Length);
            }
            else if (searchFor.Length == 3)
            {
                //index = span.IndexOfAny((byte)searchFor[0], (byte)searchFor[1], (byte)searchFor[2]);
                index = SpanHelpers.FindIndex(ref MemoryMarshal.GetReference(span),
                                              x => x == (byte)searchFor[0] || x == (byte)searchFor[1] || x == (byte)searchFor[2],
                                              span.Length);
            }
            else
            {
                //index = span.IndexOfAny(new ReadOnlySpan<byte>(searchForBytes));
                index = SpanHelpers.FindIndex(ref MemoryMarshal.GetReference(span),
                                              x => searchForBytes.Contains(x),
                                              span.Length);
            }

            var found = span[index];

            Assert.Equal((byte)expectResult, found);
            Assert.Equal(expectIndex, index);
        }
예제 #7
0
        public void TestNoMatch_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.IndexOf(target);
                int idx = SpanHelpers.FindIndex(ref MemoryMarshal.GetReference(span), x => x == target, span.Length);
                Assert.Equal(-1, idx);
            }
        }
예제 #8
0
        public void TestMatch_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.IndexOf(target);
                    int idx = SpanHelpers.FindIndex(ref MemoryMarshal.GetReference(span), x => x == target, span.Length);
                    Assert.Equal(targetIndex, idx);
                }
            }
        }
예제 #9
0
        public void TestMultipleMatch_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.IndexOf<byte>(200);
                int idx = SpanHelpers.FindIndex(ref MemoryMarshal.GetReference(span), x => x == 200, span.Length);
                Assert.Equal(length - 2, idx);
            }
        }