diff options
author | csharptest <roger@csharptest.net> | 2015-02-07 11:44:04 -0600 |
---|---|---|
committer | rogerk <devnull@localhost> | 2015-02-07 11:44:04 -0600 |
commit | 3faaac1b9ac7d1cf37a74da0f29210004827405d (patch) | |
tree | c4eb864c4fc110d43985ed1c2ea883d3847dbf92 /src/ProtocolBuffers.Test/CodedInputStreamTest.cs | |
parent | f6a0c116f9cbaf39bcb4c4aec28307e0540ae512 (diff) | |
download | protobuf-3faaac1b9ac7d1cf37a74da0f29210004827405d.tar.gz protobuf-3faaac1b9ac7d1cf37a74da0f29210004827405d.tar.bz2 protobuf-3faaac1b9ac7d1cf37a74da0f29210004827405d.zip |
Issue 71: CodedInputStream.ReadBytes go to slow path unnecessarily
Diffstat (limited to 'src/ProtocolBuffers.Test/CodedInputStreamTest.cs')
-rw-r--r-- | src/ProtocolBuffers.Test/CodedInputStreamTest.cs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/ProtocolBuffers.Test/CodedInputStreamTest.cs b/src/ProtocolBuffers.Test/CodedInputStreamTest.cs index ab08df9e..b09d3340 100644 --- a/src/ProtocolBuffers.Test/CodedInputStreamTest.cs +++ b/src/ProtocolBuffers.Test/CodedInputStreamTest.cs @@ -37,6 +37,7 @@ using System;
using System.Collections.Generic;
using System.IO;
+using Google.ProtocolBuffers.Descriptors;
using Google.ProtocolBuffers.TestProtos;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Diagnostics;
@@ -605,5 +606,34 @@ namespace Google.ProtocolBuffers Assert.AreEqual(4, unk.Count);
}
+ //Issue 71: CodedInputStream.ReadBytes go to slow path unnecessarily
+ [TestMethod]
+ public void TestSlowPathAvoidance()
+ {
+ using (var ms = new MemoryStream())
+ {
+ CodedOutputStream output = CodedOutputStream.CreateInstance(ms);
+ output.WriteField(FieldType.Bytes, 1, "bytes", ByteString.CopyFrom(new byte[100]));
+ output.WriteField(FieldType.Bytes, 2, "bytes", ByteString.CopyFrom(new byte[100]));
+ output.Flush();
+
+ ms.Position = 0;
+ CodedInputStream input = CodedInputStream.CreateInstance(ms, new byte[ms.Length / 2]);
+
+ uint tag;
+ string ignore;
+ ByteString value;
+
+ Assert.IsTrue(input.ReadTag(out tag, out ignore));
+ Assert.AreEqual(1, WireFormat.GetTagFieldNumber(tag));
+ value = ByteString.Empty;
+ Assert.IsTrue(input.ReadBytes(ref value) && value.Length == 100);
+
+ Assert.IsTrue(input.ReadTag(out tag, out ignore));
+ Assert.AreEqual(2, WireFormat.GetTagFieldNumber(tag));
+ value = ByteString.Empty;
+ Assert.IsTrue(input.ReadBytes(ref value) && value.Length == 100);
+ }
+ }
}
}
\ No newline at end of file |