Ejemplo n.º 1
0
        public static void GetBytes(ref BufferWriter writer, double value)
        {
            var resultBuilder = StringBuilder.Create();

            try
            {
                var doubleValue = new IeeeDouble(value);
                if (doubleValue.IsSpecial())
                {
                    if (!HandleSpecialValues(doubleValue, ref resultBuilder))
                    {
                        throw new InvalidOperationException("not support special double value:" + value);
                    }
                }
                else if (!ToShortestIeeeNumber(value, ref resultBuilder, DtoaMode.Shortest))
                {
                    throw new InvalidOperationException("not support double value:" + value);
                }

                var resultBuilderLength = resultBuilder.Length;
                var destination         = writer.GetSpan(resultBuilderLength);
                resultBuilder.ReadableSpan.CopyTo(destination);
                writer.Advance(resultBuilderLength);
            }
            finally
            {
                resultBuilder.Dispose();
            }
        }
        public void TrimAdd(int totalBytes, int blockSize, int trim)
        {
            var Random = new Random();

            var Source = new byte[totalBytes];

            Random.NextBytes(Source);

            using var Writer = new BufferWriter <byte>(ArrayPool <byte> .Shared, 1);

            var TotalTrimmed = 0;

            for (var Index = 0; Index < totalBytes; Index += blockSize)
            {
                var NextBlockSize = Math.Min(blockSize, totalBytes - Index);

                var Contents = Writer.GetSpan(NextBlockSize);

                Source.AsSpan(Index, NextBlockSize).CopyTo(Contents);

                Writer.Advance(NextBlockSize);

                Writer.TrimStart(trim);

                TotalTrimmed += trim;
            }

            Assert.AreEqual(totalBytes - TotalTrimmed, Writer.Length);

            Assert.IsTrue(Writer.ToSequence().SequenceEqual(Source.AsSpan(TotalTrimmed)));
        }
Ejemplo n.º 3
0
        public void WriteTest()
        {
            using var writer = new BufferWriter <char>(1);
            writer.Write('H');
            Assert.Equal(1, writer.WrittenCount);
            writer.Write('e');
            Assert.Equal(2, writer.WrittenCount);
            writer.Write("llo");
            Assert.True(writer.GetWrittenSpan().SequenceEqual("Hello"));

            writer.Clear();
            Assert.Equal(0, writer.WrittenCount);

            var span = writer.GetSpan();

            "Word".AsSpan().CopyTo(span);
            writer.Advance(4);
            Assert.True(writer.GetWrittenSpan().SequenceEqual("Word"));
        }
        public void SingleByte(int totalBytes)
        {
            using var Writer = new BufferWriter <byte>(ExactPool <byte> .Shared);

            for (var Index = 0; Index < totalBytes; Index++)
            {
                var Contents = Writer.GetSpan(1);

                Contents[0] = 1;

                Writer.Advance(1);
            }

            Assert.AreEqual(totalBytes, Writer.Length);

            var Sequence = Writer.ToSequence();

            Assert.AreEqual(totalBytes, Sequence.Length);
        }
        public void BlocksApproximate(int totalBytes, int blockSize)
        {
            using var Writer = new BufferWriter <byte>();

            for (var Index = 0; Index < totalBytes; Index += blockSize)
            {
                var NextBlockSize = Math.Min(blockSize, totalBytes - Index);

                var Contents = Writer.GetSpan(NextBlockSize);

                Contents.Slice(0, NextBlockSize).Fill(1);

                Writer.Advance(NextBlockSize);
            }

            Assert.AreEqual(totalBytes, Writer.Length);

            var Sequence = Writer.ToSequence();

            Assert.AreEqual(totalBytes, Sequence.Length);
        }
Ejemplo n.º 6
0
        public void BufferWriterCountsBytesCommitted()
        {
            BufferWriter <PipeWriter> writer = new BufferWriter <PipeWriter>(Pipe.Writer);

            writer.Write(new byte[] { 1, 2, 3 });
            Assert.Equal(0, writer.BytesCommitted);

            writer.Commit();
            Assert.Equal(3, writer.BytesCommitted);

            writer.Ensure(10);
            writer.Advance(10);
            Assert.Equal(3, writer.BytesCommitted);

            writer.Commit();
            Assert.Equal(13, writer.BytesCommitted);

            Pipe.Writer.FlushAsync().GetAwaiter().GetResult();
            var readResult = Pipe.Reader.ReadAsync().GetAwaiter().GetResult();

            // Consuming the buffer does not change BytesCommitted
            Assert.Equal(13, readResult.Buffer.Length);
            Assert.Equal(13, writer.BytesCommitted);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Writes a null value.
        /// </summary>
        public void WriteNull()
        {
            var span = Writer.GetSpan(4);

            span[0] = (byte)'n';
            span[1] = (byte)'u';
            span[2] = (byte)'l';
            span[3] = (byte)'l';
            Writer.Advance(4);
        }
Ejemplo n.º 8
0
 public void Advance(int count)
 {
     _bufferWriter.Advance(count);
 }