|  | @@ -98,6 +98,13 @@ namespace Google.Protobuf
 | 
	
		
			
				|  |  |                      output.WriteRawVarint32((uint) value);
 | 
	
		
			
				|  |  |                      output.Flush();
 | 
	
		
			
				|  |  |                      Assert.AreEqual(data, rawOutput.ToArray());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    var bufferWriter = new ArrayBufferWriter<byte>();
 | 
	
		
			
				|  |  | +                    bufferWriter.MaxGrowBy = bufferSize;
 | 
	
		
			
				|  |  | +                    WriteContext.Initialize(bufferWriter, out WriteContext ctx);
 | 
	
		
			
				|  |  | +                    ctx.WriteUInt32((uint) value);
 | 
	
		
			
				|  |  | +                    ctx.Flush();
 | 
	
		
			
				|  |  | +                    Assert.AreEqual(data, bufferWriter.WrittenSpan.ToArray());
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  {
 | 
	
	
		
			
				|  | @@ -106,9 +113,15 @@ namespace Google.Protobuf
 | 
	
		
			
				|  |  |                      output.WriteRawVarint64(value);
 | 
	
		
			
				|  |  |                      output.Flush();
 | 
	
		
			
				|  |  |                      Assert.AreEqual(data, rawOutput.ToArray());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    var bufferWriter = new ArrayBufferWriter<byte>();
 | 
	
		
			
				|  |  | +                    bufferWriter.MaxGrowBy = bufferSize;
 | 
	
		
			
				|  |  | +                    WriteContext.Initialize(bufferWriter, out WriteContext ctx);
 | 
	
		
			
				|  |  | +                    ctx.WriteUInt64(value);
 | 
	
		
			
				|  |  | +                    ctx.Flush();
 | 
	
		
			
				|  |  | +                    Assert.AreEqual(data, bufferWriter.WrittenSpan.ToArray());
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                // TODO: also test different chunk sizes for IBufferWriter
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -153,28 +166,35 @@ namespace Google.Protobuf
 | 
	
		
			
				|  |  |          /// </summary>
 | 
	
		
			
				|  |  |          private static void AssertWriteLittleEndian32(byte[] data, uint value)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            MemoryStream rawOutput = new MemoryStream();
 | 
	
		
			
				|  |  | -            CodedOutputStream output = new CodedOutputStream(rawOutput);
 | 
	
		
			
				|  |  | -            output.WriteRawLittleEndian32(value);
 | 
	
		
			
				|  |  | -            output.Flush();
 | 
	
		
			
				|  |  | -            Assert.AreEqual(data, rawOutput.ToArray());
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            var bufferWriter = new ArrayBufferWriter<byte>();
 | 
	
		
			
				|  |  | -            WriteContext.Initialize(bufferWriter, out WriteContext ctx);
 | 
	
		
			
				|  |  | -            ctx.WriteFixed32(value);
 | 
	
		
			
				|  |  | -            ctx.Flush();
 | 
	
		
			
				|  |  | -            Assert.AreEqual(data, bufferWriter.WrittenSpan.ToArray());
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                var rawOutput = new MemoryStream();
 | 
	
		
			
				|  |  | +                var output = new CodedOutputStream(rawOutput);
 | 
	
		
			
				|  |  | +                output.WriteRawLittleEndian32(value);
 | 
	
		
			
				|  |  | +                output.Flush();
 | 
	
		
			
				|  |  | +                Assert.AreEqual(data, rawOutput.ToArray());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                var bufferWriter = new ArrayBufferWriter<byte>();
 | 
	
		
			
				|  |  | +                WriteContext.Initialize(bufferWriter, out WriteContext ctx);
 | 
	
		
			
				|  |  | +                ctx.WriteFixed32(value);
 | 
	
		
			
				|  |  | +                ctx.Flush();
 | 
	
		
			
				|  |  | +                Assert.AreEqual(data, bufferWriter.WrittenSpan.ToArray());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              // Try different buffer sizes.
 | 
	
		
			
				|  |  |              for (int bufferSize = 1; bufferSize <= 16; bufferSize *= 2)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                rawOutput = new MemoryStream();
 | 
	
		
			
				|  |  | -                output = new CodedOutputStream(rawOutput, bufferSize);
 | 
	
		
			
				|  |  | +                var rawOutput = new MemoryStream();
 | 
	
		
			
				|  |  | +                var output = new CodedOutputStream(rawOutput, bufferSize);
 | 
	
		
			
				|  |  |                  output.WriteRawLittleEndian32(value);
 | 
	
		
			
				|  |  |                  output.Flush();
 | 
	
		
			
				|  |  |                  Assert.AreEqual(data, rawOutput.ToArray());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                // TODO: also test different chunk sizes for IBufferWriter
 | 
	
		
			
				|  |  | +                var bufferWriter = new ArrayBufferWriter<byte>();
 | 
	
		
			
				|  |  | +                bufferWriter.MaxGrowBy = bufferSize;
 | 
	
		
			
				|  |  | +                WriteContext.Initialize(bufferWriter, out WriteContext ctx);
 | 
	
		
			
				|  |  | +                ctx.WriteFixed32(value);
 | 
	
		
			
				|  |  | +                ctx.Flush();
 | 
	
		
			
				|  |  | +                Assert.AreEqual(data, bufferWriter.WrittenSpan.ToArray());
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -184,28 +204,35 @@ namespace Google.Protobuf
 | 
	
		
			
				|  |  |          /// </summary>
 | 
	
		
			
				|  |  |          private static void AssertWriteLittleEndian64(byte[] data, ulong value)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            MemoryStream rawOutput = new MemoryStream();
 | 
	
		
			
				|  |  | -            CodedOutputStream output = new CodedOutputStream(rawOutput);
 | 
	
		
			
				|  |  | -            output.WriteRawLittleEndian64(value);
 | 
	
		
			
				|  |  | -            output.Flush();
 | 
	
		
			
				|  |  | -            Assert.AreEqual(data, rawOutput.ToArray());
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            var bufferWriter = new ArrayBufferWriter<byte>();
 | 
	
		
			
				|  |  | -            WriteContext.Initialize(bufferWriter, out WriteContext ctx);
 | 
	
		
			
				|  |  | -            ctx.WriteFixed64(value);
 | 
	
		
			
				|  |  | -            ctx.Flush();
 | 
	
		
			
				|  |  | -            Assert.AreEqual(data, bufferWriter.WrittenSpan.ToArray());
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                var rawOutput = new MemoryStream();
 | 
	
		
			
				|  |  | +                var output = new CodedOutputStream(rawOutput);
 | 
	
		
			
				|  |  | +                output.WriteRawLittleEndian64(value);
 | 
	
		
			
				|  |  | +                output.Flush();
 | 
	
		
			
				|  |  | +                Assert.AreEqual(data, rawOutput.ToArray());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                var bufferWriter = new ArrayBufferWriter<byte>();
 | 
	
		
			
				|  |  | +                WriteContext.Initialize(bufferWriter, out WriteContext ctx);
 | 
	
		
			
				|  |  | +                ctx.WriteFixed64(value);
 | 
	
		
			
				|  |  | +                ctx.Flush();
 | 
	
		
			
				|  |  | +                Assert.AreEqual(data, bufferWriter.WrittenSpan.ToArray());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              // Try different block sizes.
 | 
	
		
			
				|  |  |              for (int blockSize = 1; blockSize <= 16; blockSize *= 2)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                rawOutput = new MemoryStream();
 | 
	
		
			
				|  |  | -                output = new CodedOutputStream(rawOutput, blockSize);
 | 
	
		
			
				|  |  | +                var rawOutput = new MemoryStream();
 | 
	
		
			
				|  |  | +                var output = new CodedOutputStream(rawOutput, blockSize);
 | 
	
		
			
				|  |  |                  output.WriteRawLittleEndian64(value);
 | 
	
		
			
				|  |  |                  output.Flush();
 | 
	
		
			
				|  |  |                  Assert.AreEqual(data, rawOutput.ToArray());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                // TODO: also test different chunk sizes for IBufferWriter 
 | 
	
		
			
				|  |  | +                var bufferWriter = new ArrayBufferWriter<byte>();
 | 
	
		
			
				|  |  | +                bufferWriter.MaxGrowBy = blockSize;
 | 
	
		
			
				|  |  | +                WriteContext.Initialize(bufferWriter, out WriteContext ctx);
 | 
	
		
			
				|  |  | +                ctx.WriteFixed64(value);
 | 
	
		
			
				|  |  | +                ctx.Flush();
 | 
	
		
			
				|  |  | +                Assert.AreEqual(data, bufferWriter.WrittenSpan.ToArray());
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -241,9 +268,12 @@ namespace Google.Protobuf
 | 
	
		
			
				|  |  |                  message.WriteTo(output);
 | 
	
		
			
				|  |  |                  output.Flush();
 | 
	
		
			
				|  |  |                  Assert.AreEqual(rawBytes, rawOutput.ToArray());
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            // TODO: test for different chunks sizes and IBufferWriter...
 | 
	
		
			
				|  |  | +                var bufferWriter = new ArrayBufferWriter<byte>();
 | 
	
		
			
				|  |  | +                bufferWriter.MaxGrowBy = blockSize;
 | 
	
		
			
				|  |  | +                message.WriteTo(bufferWriter);
 | 
	
		
			
				|  |  | +                Assert.AreEqual(rawBytes, bufferWriter.WrittenSpan.ToArray()); 
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  |          [Test]
 |