Example #1
0
        public void AppendFormatted_BufferTooSmall_CustomFormatter()
        {
            var buffer   = new char[100];
            var provider = new ConstFormatter(" ");

            {
                MemoryExtensions.TryWriteInterpolatedStringHandler b = new MemoryExtensions.TryWriteInterpolatedStringHandler(0, 0, buffer.AsSpan(0, 0), provider, out bool shouldAppend);
                Assert.True(shouldAppend);

                // don't use custom formatter
                Assert.True(b.AppendLiteral(""));
                Assert.True(b.AppendFormatted("".AsSpan()));
                Assert.True(b.AppendFormatted("".AsSpan(), alignment: 0, format: "X2"));

                // do use custom formatter
                Assert.False(b.AppendFormatted((object)"", alignment: 0, format: "X2"));
                Assert.False(b.AppendFormatted(null));
                Assert.False(b.AppendFormatted(""));
                Assert.False(b.AppendFormatted("", alignment: 0, format: "X2"));
                Assert.False(b.AppendFormatted <string>(""));
                Assert.False(b.AppendFormatted <string>("", alignment: 0));
                Assert.False(b.AppendFormatted <string>("", format: "X2"));
                Assert.False(b.AppendFormatted <string>("", alignment: 0, format: "X2"));

                Assert.False(MemoryExtensions.TryWrite(buffer.AsSpan(0, 0), ref b, out int charsWritten));
                Assert.Equal(0, charsWritten);
            }
        }
Example #2
0
        public void AppendFormatted_BufferTooSmall(int bufferLength)
        {
            var buffer = new char[bufferLength];

            for (int i = 0; i <= 29; i++)
            {
                MemoryExtensions.TryWriteInterpolatedStringHandler b = new MemoryExtensions.TryWriteInterpolatedStringHandler(0, 0, buffer, out bool shouldAppend);
                Assert.True(shouldAppend);

                Assert.True(b.AppendLiteral(new string('s', bufferLength)));

                bool result = i switch
                {
                    0 => b.AppendLiteral(" "),
                    1 => b.AppendFormatted((object)" ", alignment: 0, format: "X2"),
                    2 => b.AppendFormatted(" "),
                    3 => b.AppendFormatted(" ", alignment: 0, format: "X2"),
                    4 => b.AppendFormatted <string>(" "),
                    5 => b.AppendFormatted <string>(" ", alignment: 0),
                    6 => b.AppendFormatted <string>(" ", format: "X2"),
                    7 => b.AppendFormatted <string>(" ", alignment: 0, format: "X2"),
                    8 => b.AppendFormatted(" ".AsSpan()),
                    9 => b.AppendFormatted(" ".AsSpan(), alignment: 0, format: "X2"),
                    10 => b.AppendFormatted(new FormattableStringWrapper(" ")),
                    11 => b.AppendFormatted(new FormattableStringWrapper(" "), alignment: 0),
                    12 => b.AppendFormatted(new FormattableStringWrapper(" "), format: "X2"),
                    13 => b.AppendFormatted(new FormattableStringWrapper(" "), alignment: 0, format: "X2"),
                    14 => b.AppendFormatted(new SpanFormattableStringWrapper(" ")),
                    15 => b.AppendFormatted(new SpanFormattableStringWrapper(" "), alignment: 0),
                    16 => b.AppendFormatted(new SpanFormattableStringWrapper(" "), format: "X2"),
                    17 => b.AppendFormatted(new SpanFormattableStringWrapper(" "), alignment: 0, format: "X2"),
                    18 => b.AppendFormatted(new FormattableInt32Wrapper(1)),
                    19 => b.AppendFormatted(new FormattableInt32Wrapper(1), alignment: 0),
                    20 => b.AppendFormatted(new FormattableInt32Wrapper(1), format: "X2"),
                    21 => b.AppendFormatted(new FormattableInt32Wrapper(1), alignment: 0, format: "X2"),
                    22 => b.AppendFormatted(new SpanFormattableInt32Wrapper(1)),
                    23 => b.AppendFormatted(new SpanFormattableInt32Wrapper(1), alignment: 0),
                    24 => b.AppendFormatted(new SpanFormattableInt32Wrapper(1), format: "X2"),
                    25 => b.AppendFormatted(new SpanFormattableInt32Wrapper(1), alignment: 0, format: "X2"),
                    26 => b.AppendFormatted <string>("", alignment: 1),
                    27 => b.AppendFormatted <string>("", alignment: -1),
                    28 => b.AppendFormatted <string>(" ", alignment: 1, format: "X2"),
                    29 => b.AppendFormatted <string>(" ", alignment: -1, format: "X2"),
                    _ => throw new Exception(),
                };
                Assert.False(result);

                Assert.False(MemoryExtensions.TryWrite(buffer.AsSpan(0, 0), ref b, out int charsWritten));
                Assert.Equal(0, charsWritten);
            }
        }
Example #3
0
        public void AppendFormatted_EmptyBuffer_ZeroLengthWritesSuccessful()
        {
            var buffer = new char[100];

            MemoryExtensions.TryWriteInterpolatedStringHandler b = new MemoryExtensions.TryWriteInterpolatedStringHandler(0, 0, buffer.AsSpan(0, 0), out bool shouldAppend);
            Assert.True(shouldAppend);

            Assert.True(b.AppendLiteral(""));
            Assert.True(b.AppendFormatted((object)"", alignment: 0, format: "X2"));
            Assert.True(b.AppendFormatted(null));
            Assert.True(b.AppendFormatted(""));
            Assert.True(b.AppendFormatted("", alignment: 0, format: "X2"));
            Assert.True(b.AppendFormatted <string>(""));
            Assert.True(b.AppendFormatted <string>("", alignment: 0));
            Assert.True(b.AppendFormatted <string>("", format: "X2"));
            Assert.True(b.AppendFormatted <string>("", alignment: 0, format: "X2"));
            Assert.True(b.AppendFormatted("".AsSpan()));
            Assert.True(b.AppendFormatted("".AsSpan(), alignment: 0, format: "X2"));

            Assert.True(MemoryExtensions.TryWrite(buffer.AsSpan(0, 0), ref b, out int charsWritten));
            Assert.Equal(0, charsWritten);
        }