aboutsummaryrefslogtreecommitdiff
path: root/src/ProtocolBuffers.Test/CodedInputStreamTest.cs
diff options
context:
space:
mode:
authorcsharptest <roger@csharptest.net>2015-02-07 11:44:04 -0600
committerrogerk <devnull@localhost>2015-02-07 11:44:04 -0600
commit3faaac1b9ac7d1cf37a74da0f29210004827405d (patch)
treec4eb864c4fc110d43985ed1c2ea883d3847dbf92 /src/ProtocolBuffers.Test/CodedInputStreamTest.cs
parentf6a0c116f9cbaf39bcb4c4aec28307e0540ae512 (diff)
downloadprotobuf-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.cs30
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