예제 #1
0
 /// <summary>Appends a <see cref="char"/> to this <see cref="SpanBuilder{T}"/>.</summary>
 /// <param name="value">The <see cref="char"/> to append to this <see cref="SpanBuilder{T}"/>.</param>
 public void Append(char value)
 {
     if (_stringBuilder is not null)
     {
         _stringBuilder.Append(value);
     }
     else if (_spanBuilder._i + 1 > _spanBuilder._span.Length)
     {
         _stringBuilder = new(_spanBuilder._i + 1);
         _stringBuilder.Append(_spanBuilder);
         _stringBuilder.Append(value);
     }
     else
     {
         _spanBuilder.Append(value);
     }
 }
 public void Span()
 {
     {
         Span <char> span    = stackalloc char[500];
         var         builder = new SpanBuilder(span);
         builder.Append("01234");
         builder.Append(span.Slice(0, builder.Length));
         Assert.Equal("0123401234", builder.ToString());
     }
     {
         Span <char> span    = stackalloc char[500];
         var         builder = new SpanBuilder(span);
         builder.Append("01234");
         builder.Append(((ReadOnlySpan <char>)span).Slice(0, builder.Length));
         Assert.Equal("0123401234", builder.ToString());
     }
     {
         Span <char> span    = stackalloc char[500];
         var         builder = new SpanBuilder(span);
         Assert.True(builder.TryAppend("01234"));
         Assert.True(builder.TryAppend(span.Slice(0, builder.Length)));
         Assert.Equal("0123401234", builder.ToString());
     }
     {
         Span <char> span    = stackalloc char[500];
         var         builder = new SpanBuilder(span);
         Assert.True(builder.TryAppend("01234"));
         Assert.True(builder.TryAppend(((ReadOnlySpan <char>)span).Slice(0, builder.Length)));
         Assert.Equal("0123401234", builder.ToString());
     }
     {
         Span <char> span    = stackalloc char[6];
         var         builder = new SpanBuilder(span);
         builder.Append("01234");
         Assert.False(builder.TryAppend(span.Slice(0, builder.Length)));
     }
     {
         Span <char> span    = stackalloc char[6];
         var         builder = new SpanBuilder(span);
         builder.Append("01234");
         Assert.False(builder.TryAppend(((ReadOnlySpan <char>)span).Slice(0, builder.Length)));
     }
 }
        public void Primitive()
        {
            Span <char> span    = stackalloc char[500];
            var         builder = new SpanBuilder(span);

            builder.Append((byte)1);
            builder.Append((ushort)1);
            builder.Append((uint)1);
            builder.Append((ulong)1);
            builder.Append((sbyte)1);
            builder.Append((short)1);
            builder.Append(1);
            builder.Append((long)1);
            builder.Append('1');
            Assert.Equal("111111111", builder.ToString());
        }
예제 #4
0
        void Simplify(ref SpanBuilder builder, string source)
        {
            var currentCulture = CultureInfo.CurrentCulture;
            var src            = source.AsSpan();
            var isDelimiter    = false;
            var srcLength      = src.Length;
            var lastIndex      = srcLength - 1;

            for (var i = 0; i < srcLength; ++i)
            {
                var ch = currentCulture.TextInfo.ToLower(src[i]);
                if (_map.TryGetValue(ch, out var replacement))
                {
                    builder.Append(replacement);
                    isDelimiter = false;
                }
                else
                {
                    if (!IsSimple(ch))
                    {
                        ch = Delimiter;
                    }
                    if (Delimiter == ch)
                    {
                        if (builder.Length != 0 && i < lastIndex && !isDelimiter)
                        {
                            builder.Append(ch);
                            isDelimiter = true;
                        }
                    }
                    else
                    {
                        builder.Append(ch);
                        isDelimiter = false;
                    }
                }
            }
        }
 public void Generic()
 {
     {
         Span <char> span    = stackalloc char[500];
         var         builder = new SpanBuilder(span);
         var         guid    = Guid.NewGuid();
         builder.Append(guid);
         Assert.Equal(guid.ToString(), builder.ToString());
     }
     {
         Span <char> span    = stackalloc char[500];
         var         builder = new SpanBuilder(span);
         var         guid    = Guid.NewGuid();
         Assert.True(builder.TryAppend(guid));
         Assert.Equal(guid.ToString(), builder.ToString());
     }
 }
 public void Double(double a, double b, string format)
 {
     var value    = a / b;
     var expected = value.ToString(format, CultureInfo.InvariantCulture);
     {
         Span <char> span    = stackalloc char[500];
         var         builder = new SpanBuilder(span);
         builder.Append(value);
         Assert.Equal(expected, builder.ToString());
     }
     {
         Span <char> span    = stackalloc char[500];
         var         builder = new SpanBuilder(span);
         Assert.True(builder.TryAppend(value));
         Assert.Equal(expected, builder.ToString());
     }
     {
         Span <char> span    = stackalloc char[expected.Length - 1];
         var         builder = new SpanBuilder(span);
         Assert.False(builder.TryAppend(value));
     }
 }
예제 #7
0
 public void Testing()
 {
     {
         SpanBuilder <char> span = Span <char> .Empty;
         Assert.IsTrue(span._i is 0);
         Assert.IsTrue(span._span.IsEmpty);
         Assert.IsTrue(span._span.Length is 0);
         try
         {
             span.Append('a');
             Assert.Fail();
         }
         catch (Exception exception)
         {
             Assert.IsTrue(exception is InvalidOperationException);
         }
     }
     {
         SpanBuilder <char> span = stackalloc char[1];
         Assert.IsTrue(span._i is 0);
         Assert.IsTrue(span._span.Length is 1);
         span.Append('a');
         Assert.IsTrue(EquateSequence <char>(span, "a"));
         Assert.IsTrue(span._i is 1);
         Assert.IsTrue(span._span.Length is 1);
         try
         {
             span.Append('b');
             Assert.Fail();
         }
         catch (Exception exception)
         {
             Assert.IsTrue(exception is InvalidOperationException);
         }
     }
     {
         SpanBuilder <char> span = stackalloc char[3];
         Assert.IsTrue(span._i is 0);
         Assert.IsTrue(span._span.Length is 3);
         span.Append('a');
         Assert.IsTrue(span._i is 1);
         Assert.IsTrue(span._span.Length is 3);
         Assert.IsTrue(EquateSequence <char>(span, "a"));
         span.Append('b');
         Assert.IsTrue(span._i is 2);
         Assert.IsTrue(span._span.Length is 3);
         Assert.IsTrue(EquateSequence <char>(span, "ab"));
         span.Append('c');
         Assert.IsTrue(span._i is 3);
         Assert.IsTrue(span._span.Length is 3);
         Assert.IsTrue(EquateSequence <char>(span, "abc"));
         try
         {
             span.Append('d');
             Assert.Fail();
         }
         catch (Exception exception)
         {
             Assert.IsTrue(exception is InvalidOperationException);
         }
     }
     {
         SpanBuilder <char> span = stackalloc char[3];
         Assert.IsTrue(span._i is 0);
         Assert.IsTrue(span._span.Length is 3);
         span.Append("abc");
         Assert.IsTrue(span._i is 3);
         Assert.IsTrue(span._span.Length is 3);
         Assert.IsTrue(EquateSequence <char>(span, "abc"));
         try
         {
             span.Append('d');
             Assert.Fail();
         }
         catch (Exception exception)
         {
             Assert.IsTrue(exception is InvalidOperationException);
         }
     }
     {
         SpanBuilder <char> span = stackalloc char[10];
         Assert.IsTrue(span._i is 0);
         Assert.IsTrue(span._span.Length is 10);
         span.AppendLine('a');
         Assert.IsTrue(span._i == 1 + Environment.NewLine.Length);
         Assert.IsTrue(span._span.Length is 10);
         Assert.IsTrue(EquateSequence <char>(span, "a" + Environment.NewLine));
         span.AppendLine('b');
         Assert.IsTrue(span._i == 2 + Environment.NewLine.Length * 2);
         Assert.IsTrue(span._span.Length is 10);
         Assert.IsTrue(EquateSequence <char>(span, "a" + Environment.NewLine + "b" + Environment.NewLine));
     }
     {
         SpanBuilder <char> span = stackalloc char[20];
         Assert.IsTrue(span._i is 0);
         Assert.IsTrue(span._span.Length is 20);
         span.AppendLine("ab");
         Assert.IsTrue(span._i == 2 + Environment.NewLine.Length);
         Assert.IsTrue(span._span.Length is 20);
         Assert.IsTrue(EquateSequence <char>(span, "ab" + Environment.NewLine));
         span.AppendLine("cd");
         Assert.IsTrue(span._i == 4 + Environment.NewLine.Length * 2);
         Assert.IsTrue(span._span.Length is 20);
         Assert.IsTrue(EquateSequence <char>(span, "ab" + Environment.NewLine + "cd" + Environment.NewLine));
     }
     {
         SpanBuilder <char> span = stackalloc char[10];
         Assert.IsTrue(span._i is 0);
         Assert.IsTrue(span._span.Length is 10);
         span.AppendLine();
         Assert.IsTrue(span._i == Environment.NewLine.Length);
         Assert.IsTrue(span._span.Length is 10);
         Assert.IsTrue(EquateSequence <char>(span, Environment.NewLine));
     }
     {
         SpanBuilder <char> span = stackalloc char[1];
         try
         {
             span.AppendLine('a');
             Assert.Fail();
         }
         catch (Exception exception)
         {
             Assert.IsTrue(exception is InvalidOperationException);
         }
     }
     {
         SpanBuilder <char> span = stackalloc char[3];
         try
         {
             span.AppendLine("abc");
             Assert.Fail();
         }
         catch (Exception exception)
         {
             Assert.IsTrue(exception is InvalidOperationException);
         }
     }
     {
         SpanBuilder <char> span = stackalloc char[1];
         span.Append('a');
         try
         {
             span.AppendLine();
             Assert.Fail();
         }
         catch (Exception exception)
         {
             Assert.IsTrue(exception is InvalidOperationException);
         }
     }
     {
         SpanBuilder <char> span = stackalloc char[3];
         span.Append("abc");
         try
         {
             span.AppendLine();
             Assert.Fail();
         }
         catch (Exception exception)
         {
             Assert.IsTrue(exception is InvalidOperationException);
         }
     }
 }