public void WriteAsciiNoValidationWritesOnlyOneBytePerChar(string input) { // WriteAscii doesn't validate if characters are in the ASCII range // but it shouldn't produce more than one byte per character var writerBuffer = _pipe.Writer.Alloc(); var writer = new WritableBufferWriter(writerBuffer); writer.WriteAsciiNoValidation(input); writerBuffer.FlushAsync().GetAwaiter().GetResult(); var reader = _pipe.Reader.ReadAsync().GetAwaiter().GetResult(); Assert.Equal(input.Length, reader.Buffer.Length); }
public void EncodesAsAscii(string input, byte[] expected) { var writerBuffer = _pipe.Writer.Alloc(); var writer = new WritableBufferWriter(writerBuffer); writer.WriteAsciiNoValidation(input); writerBuffer.FlushAsync().GetAwaiter().GetResult(); var reader = _pipe.Reader.ReadAsync().GetAwaiter().GetResult(); if (expected.Length > 0) { AssertExtensions.Equal( expected, reader.Buffer.ToArray()); } else { Assert.Equal(0, reader.Buffer.Length); } }
public void WriteAsciiNoValidation() { const byte maxAscii = 0x7f; var writerBuffer = _pipe.Writer.Alloc(); var writer = new WritableBufferWriter(writerBuffer); for (var i = 0; i < maxAscii; i++) { writer.WriteAsciiNoValidation(new string((char)i, 1)); } writerBuffer.FlushAsync().GetAwaiter().GetResult(); var reader = _pipe.Reader.ReadAsync().GetAwaiter().GetResult(); var data = reader.Buffer.Slice(0, maxAscii).ToArray(); for (var i = 0; i < maxAscii; i++) { Assert.Equal(i, data[i]); } }
public void WritesAsciiAcrossBlockBoundaries(int stringLength, int gapSize) { var testString = new string(' ', stringLength); var writerBuffer = _pipe.Writer.Alloc(100); var writer = new WritableBufferWriter(writerBuffer); // almost fill up the first block var spacer = new byte[writer.Span.Length - gapSize]; writer.Write(spacer); Assert.Equal(gapSize, writer.Span.Length); var bufferLength = writer.Span.Length; writer.WriteAsciiNoValidation(testString); Assert.NotEqual(bufferLength, writer.Span.Length); writerBuffer.FlushAsync().GetAwaiter().GetResult(); var reader = _pipe.Reader.ReadAsync().GetAwaiter().GetResult(); var written = reader.Buffer.Slice(spacer.Length, stringLength); Assert.False(written.IsSingleSpan, "The buffer should cross spans"); AssertExtensions.Equal(Encoding.ASCII.GetBytes(testString), written.ToArray()); }