test writing with different blocksizes
This commit is contained in:
parent
f9f92a6dd2
commit
56372898cf
@ -59,6 +59,12 @@ namespace Google.Protobuf.Buffers
|
||||
_index = 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Userful for testing writing to buffer writer with a lot of small segments.
|
||||
/// If set, it limits the max number of bytes by which the buffer grows by at once.
|
||||
/// </summary>
|
||||
public int? MaxGrowBy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Creates an instance of an <see cref="ArrayBufferWriter{T}"/>, in which data can be written to,
|
||||
/// with an initial capacity specified.
|
||||
@ -202,6 +208,12 @@ namespace Google.Protobuf.Buffers
|
||||
growBy = Math.Max(growBy, DefaultInitialBufferSize);
|
||||
}
|
||||
|
||||
// enable tests that write to small buffer segments
|
||||
if (MaxGrowBy.HasValue && growBy > MaxGrowBy.Value)
|
||||
{
|
||||
growBy = MaxGrowBy.Value;
|
||||
}
|
||||
|
||||
int newSize = checked(_buffer.Length + growBy);
|
||||
|
||||
Array.Resize(ref _buffer, newSize);
|
||||
|
@ -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());
|
||||
|
||||
// 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);
|
||||
output.WriteRawLittleEndian32(value);
|
||||
output.Flush();
|
||||
Assert.AreEqual(data, rawOutput.ToArray());
|
||||
|
||||
// TODO: also test different chunk sizes for IBufferWriter
|
||||
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)
|
||||
{
|
||||
var rawOutput = new MemoryStream();
|
||||
var output = new CodedOutputStream(rawOutput, bufferSize);
|
||||
output.WriteRawLittleEndian32(value);
|
||||
output.Flush();
|
||||
Assert.AreEqual(data, rawOutput.ToArray());
|
||||
|
||||
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());
|
||||
|
||||
// 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);
|
||||
output.WriteRawLittleEndian64(value);
|
||||
output.Flush();
|
||||
Assert.AreEqual(data, rawOutput.ToArray());
|
||||
|
||||
// TODO: also test different chunk sizes for IBufferWriter
|
||||
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)
|
||||
{
|
||||
var rawOutput = new MemoryStream();
|
||||
var output = new CodedOutputStream(rawOutput, blockSize);
|
||||
output.WriteRawLittleEndian64(value);
|
||||
output.Flush();
|
||||
Assert.AreEqual(data, rawOutput.ToArray());
|
||||
|
||||
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]
|
||||
|
Loading…
Reference in New Issue
Block a user