Beispiel #1
0
        public void TestNonFixedArrayTryRead()
        {
            var tests = new[]
            {
                1, 2, 3, 4, 5,
                1, 2, 3, 4, 5,
                1, 2, 3, 4, 5,
                1, 2, 3, 4, 5,
            };

            Span <byte> bytes = new byte[]
            {
                0xdc,
                0x00,
                0x14,

                0x01, 0x02, 0x03, 0x04, 0x05,
                0x01, 0x02, 0x03, 0x04, 0x05,
                0x01, 0x02, 0x03, 0x04, 0x05,
                0x01, 0x02, 0x03, 0x04, 0x05,
            };

            MsgPackSpec.TryReadArrayHeader(bytes, out var length, out var readSize).ShouldBeTrue();
            length.ShouldBe(tests.Length);

            var actual = new int[length];

            for (var i = 0; i < length; i++)
            {
                actual[i] = MsgPackSpec.ReadInt32(bytes.Slice(readSize), out var temp);
                readSize += temp;
            }

            actual.ShouldBe(tests);
        }
Beispiel #2
0
        public void TryReadNull()
        {
            var buffer = new [] { DataCodes.Nil };

            MsgPackSpec.TryReadNil(buffer.ToMultipleSegments(), out var readSize).ShouldBeTrue();
            readSize.ShouldBe(buffer.Length);
        }
Beispiel #3
0
        public void BadTryReadNull()
        {
            var buffer = new [] { DataCodes.Int8 };

            MsgPackSpec.TryReadNil(buffer.ToSingleSegment(), out var readSize).ShouldBeFalse();
            readSize.ShouldBe(buffer.Length);
        }
Beispiel #4
0
        public void TestNonFixedArray()
        {
            var tests = new[]
            {
                1, 2, 3, 4, 5,
                1, 2, 3, 4, 5,
                1, 2, 3, 4, 5,
                1, 2, 3, 4, 5,
            };

            var bytes = new byte[]
            {
                0xdc,
                0x00,
                0x14,

                0x01, 0x02, 0x03, 0x04, 0x05,
                0x01, 0x02, 0x03, 0x04, 0x05,
                0x01, 0x02, 0x03, 0x04, 0x05,
                0x01, 0x02, 0x03, 0x04, 0x05,
            };

            using (var buffer = MemoryPool <byte> .Shared.Rent(bytes.Length))
            {
                var span      = buffer.Memory.Span;
                var wroteSize = MsgPackSpec.WriteArrayHeader(span, tests.Length);
                foreach (var test in tests)
                {
                    wroteSize += MsgPackSpec.WriteInt32(span.Slice(wroteSize), test);
                }

                wroteSize.ShouldBe(bytes.Length);
                span.Slice(0, wroteSize).ToArray().ShouldBe(bytes);
            }
        }
Beispiel #5
0
        public void EmptyRead()
        {
            var e = Should.Throw <ArgumentOutOfRangeException>(() => MsgPackSpec.ReadToken(System.Array.Empty <byte>()));

            e.Message.ShouldBe($"EOF: Buffer is empty.{Environment.NewLine}Parameter name: buffer");
            e.ParamName.ShouldBe("buffer");
        }
Beispiel #6
0
        public void SimpleArrayRead()
        {
            var tests = new[]
            {
                "a",
                "b",
                "c",
                "d",
                "e"
            };

            Span <byte> bytes = new byte[]
            {
                149,
                161, 97,
                161, 98,
                161, 99,
                161, 100,
                161, 101
            };

            var length = MsgPackSpec.ReadArrayHeader(bytes, out var readSize);

            length.ShouldBe(tests.Length);

            var actual = new string[length];

            for (var i = 0; i < length; i++)
            {
                actual[i] = MsgPackSpec.ReadString(bytes.Slice(readSize), out var temp);
                readSize += temp;
            }

            actual.ShouldBe(tests);
        }
Beispiel #7
0
        private static void TestTryReadDictionary(byte[] bytes, Dictionary <int, string> test)
        {
            var sequence = bytes.ToSingleSegment();

            MsgPackSpec.TryReadMapHeader(sequence, out var length, out var readSize).ShouldBeTrue();
            ReadDictionary(test, length, sequence, readSize);
        }
Beispiel #8
0
 public void TryRead(long seconds, uint nanoSeconds, byte[] data)
 {
     MsgPackSpec.TryReadTimestamp(data, out var x, out var readSize).ShouldBeTrue();
     readSize.ShouldBe(data.Length);
     x.Seconds.ShouldBe(seconds);
     x.NanoSeconds.ShouldBe(nanoSeconds);
 }
Beispiel #9
0
        public void EmptyRead()
        {
            var e = Should.Throw <ArgumentOutOfRangeException>(() => MsgPackSpec.ReadToken(System.Array.Empty <byte>().ToSingleSegment()));

            e.Message.ShouldBe($"EOF: Sequence is empty.{Environment.NewLine}Parameter name: sequence");
            e.ParamName.ShouldBe("sequence");
        }
Beispiel #10
0
        public void ReadNull()
        {
            var buffer = new [] { DataCodes.Nil };

            MsgPackSpec.ReadNil(buffer.ToSingleSegment(), out var readSize);
            readSize.ShouldBe(buffer.Length);
        }
Beispiel #11
0
        private static void TestReadDictionary(byte[] bytes, Dictionary <int, string> test)
        {
            var sequence = bytes.ToSingleSegment();
            var length   = (int)MsgPackSpec.ReadMapHeader(sequence, out var readSize);

            ReadDictionary(test, length, sequence, readSize);
        }
Beispiel #12
0
        public void BadReadNull()
        {
            var buffer = new [] { DataCodes.True };
            var e      = Should.Throw <InvalidOperationException>(() => MsgPackSpec.ReadNil(buffer.ToSingleSegment(), out _));

            e.Message.ShouldBe("Wrong data code: 0xc3. Expected: 0xc0.");
        }
Beispiel #13
0
        public void ReadNull()
        {
            var buffer = new[] { DataCodes.NeverUsed };

            MsgPackSpec.WriteNil(buffer).ShouldBe(1);
            buffer[0].ShouldBe(DataCodes.Nil);
        }
Beispiel #14
0
        public void NeverUsedRead()
        {
            var e = Should.Throw <ArgumentOutOfRangeException>(() => MsgPackSpec.ReadToken(new [] { DataCodes.NeverUsed }.ToSingleSegment()));

            e.Message.ShouldBe($"Data code at sequence[0] is 0xc1 and it is invalid data code.{Environment.NewLine}Parameter name: sequence");
            e.ParamName.ShouldBe("sequence");
        }
Beispiel #15
0
 public void TestStringPack(string s, byte[] data)
 {
     using (var buffer = MemoryPool <byte> .Shared.Rent(data.Length))
     {
         MsgPackSpec.TryWriteString(buffer.Memory.Span, s.AsSpan(), out var wroteSize).ShouldBeTrue();
         buffer.Memory.Slice(0, wroteSize).ToArray().ShouldBe(data);
     }
 }
Beispiel #16
0
        public void Test(bool value, byte[] data)
        {
            var buffer = new Span <byte>(ArrayPool <byte> .Shared.Rent(10));
            var length = MsgPackSpec.WriteBoolean(buffer, value);

            length.ShouldBe(data.Length);
            buffer.Slice(0, length).ToArray().ShouldBe(data);
        }
Beispiel #17
0
        public void TestUnsignedLong(ulong number, byte[] data)
        {
            var buffer = new Span <byte>(ArrayPool <byte> .Shared.Rent(10));
            var length = MsgPackSpec.WriteUInt64(buffer, number);

            length.ShouldBe(data.Length);
            buffer.Slice(0, length).ToArray().ShouldBe(data);
        }
Beispiel #18
0
        public void TestSignedByte(sbyte number, byte[] data)
        {
            var buffer = new Span <byte>(ArrayPool <byte> .Shared.Rent(10));
            var length = MsgPackSpec.WriteInt8(buffer, number);

            length.ShouldBe(data.Length);
            buffer.Slice(0, length).ToArray().ShouldBe(data);
        }
Beispiel #19
0
        public void Test(byte[] value, byte[] data)
        {
            var buffer = new Span <byte>(ArrayPool <byte> .Shared.Rent(data.Length));

            MsgPackSpec.TryWriteBinary(buffer, value, out var wroteSize).ShouldBeTrue();
            wroteSize.ShouldBe(data.Length);
            buffer.Slice(0, wroteSize).ToArray().ShouldBe(data);
        }
Beispiel #20
0
        public void Read(long seconds, uint nanoSeconds, byte[] data)
        {
            var x = MsgPackSpec.ReadTimestamp(data.ToSingleSegment(), out var readSize);

            readSize.ShouldBe(data.Length);
            x.Seconds.ShouldBe(seconds);
            x.NanoSeconds.ShouldBe(nanoSeconds);
        }
Beispiel #21
0
 public void Read(byte[] value, byte[] data)
 {
     using (var owner = MsgPackSpec.ReadBinary(data.ToSingleSegment(), out var readSize))
     {
         readSize.ShouldBe(data.Length);
         owner.Memory.ToArray().ShouldBe(value);
     }
 }
Beispiel #22
0
 public void Test(long seconds, uint nanoSeconds, byte[] data)
 {
     using (var buffer = MemoryPool <byte> .Shared.Rent(data.Length))
     {
         var x = MsgPackSpec.WriteTimestamp(buffer.Memory.Span, new MsgPack.Timestamp(seconds, nanoSeconds));
         x.ShouldBe(data.Length);
         buffer.Memory.Slice(0, x).ToArray().ShouldBe(data);
     }
 }
Beispiel #23
0
        public void TryRead(byte[] value, byte[] data)
        {
            MsgPackSpec.TryReadBinary(data.ToSingleSegment(), out var owner, out var readSize).ShouldBeTrue();

            using (owner)
            {
                readSize.ShouldBe(data.Length);
                owner.Memory.ToArray().ShouldBe(value);
            }
        }
Beispiel #24
0
        public void NonEmptyRead(byte[] data, int objectsCount)
        {
            var buffer = data.ToSingleSegment();

            for (var i = 0; i < objectsCount; i++)
            {
                buffer = buffer.Slice(MsgPackSpec.ReadToken(buffer).Length);
            }

            buffer.IsEmpty.ShouldBeTrue();
        }
Beispiel #25
0
        public void NonEmptyRead(byte[] data, int objectsCount)
        {
            ReadOnlySpan <byte> buffer = data;

            for (var i = 0; i < objectsCount; i++)
            {
                buffer = buffer.Slice(MsgPackSpec.ReadToken(buffer).Length);
            }

            buffer.IsEmpty.ShouldBeTrue();
        }
Beispiel #26
0
        public int SpanConst()
        {
            var buffer = _buffer.AsSpan();
            var i      = 0;

            for (; i < length; i++)
            {
                baseInt -= 1000u;
                MsgPackSpec.WriteUInt32(buffer.Slice(5 * i), length);
            }

            return(i);
        }
Beispiel #27
0
        private static void ReadDictionary(Dictionary <int, string> test, int length, ReadOnlySequence <byte> span, int readSize)
        {
            length.ShouldBe(test.Count);
            var dictionary = new Dictionary <int, string>(length);

            for (var i = 0; i < length; i++)
            {
                span = span.Slice(readSize);
                var key = MsgPackSpec.ReadInt32(span, out readSize);
                span            = span.Slice(readSize);
                dictionary[key] = MsgPackSpec.ReadString(span, out readSize);
            }

            dictionary.ShouldBe(test, true);
        }
Beispiel #28
0
        public void DeepStack(int depth)
        {
            var buffer = new byte[depth];
            var span   = buffer.AsSpan();

            while (span.Length > 1)
            {
                span = span.Slice(MsgPackSpec.WriteFixArrayHeader(span, 1));
            }

            MsgPackSpec.WritePositiveFixInt(span, 1);

            var token = MsgPackSpec.ReadToken(buffer.ToSingleSegment());

            token.Length.ShouldBe(buffer.Length);
        }
Beispiel #29
0
        public void NonEmptyRead(byte[] data, int objectsCount)
        {
            var readTokenBytes         = new List <byte>();
            ReadOnlySpan <byte> buffer = data;

            for (var i = 0; i < objectsCount; i++)
            {
                using (var tokenBytes = MsgPackSpec.CopyToken(buffer))
                {
                    buffer = buffer.Slice(tokenBytes.Memory.Length);
                    readTokenBytes.AddRange(tokenBytes.Memory.ToArray());
                }
            }

            buffer.IsEmpty.ShouldBeTrue();
            readTokenBytes.ShouldBe(data);
        }
Beispiel #30
0
 public void Read(string s, byte[] data)
 {
     MsgPackSpec.ReadString(data.ToSingleSegment(), out var readSize).ShouldBe(s);
     readSize.ShouldBe(data.Length);
 }