private void TestValue_UInt16(params ushort[] values)
        {
            var stream = new MemoryStream();
            var writer = new BinaryWriter(stream);
            for (int i = 0; i < values.Length; i += 2)
            {
                ushort value = values[i];
                ushort size = values[i + 1];
                long pos = stream.Position;
                writer.WriteVar(value);
                writer.Flush();
                long newPos = stream.Position;
                Assert.AreEqual(size, newPos - pos, "Size mismatch for {0}", value);
            }

            stream.Position = 0;
            var reader = new BinaryReader(stream);
            for (int i = 0; i < values.Length; i += 2)
            {
                ushort value = values[i];
                ushort result = reader.ReadVarUInt16();
                Assert.AreEqual(value, result);
            }
        }
        public void UInt16_Overflow_Failure_UpperBound()
        {
            var stream = new MemoryStream();
            var writer = new BinaryWriter(stream);
            ulong upper = ushort.MaxValue;
            writer.WriteVar(upper + 1);
            writer.Flush();

            stream.Position = 0;
            var reader = new BinaryReader(stream);
            ushort result = reader.ReadVarUInt16();
            Assert.IsTrue(false, "This ought to be unreachable.");
        }