public void DecodeArrayBlock(IList <IList <int> > expectedValue, int expectedLength, byte[] value)
        {
            using (var stream = new MemoryStream(value))
                using (var decoder = new BinaryDecoder(stream))
                {
                    var decode = new List <IList <int> >();
                    var read   = true;
                    do
                    {
                        read = decoder.ReadArrayBlock(s => s.ReadInt(), out var block);
                        decode.Add(block);
                    }while (read);
                    Assert.AreEqual(expectedLength, stream.Position, "Decode offset error");
                    Assert.AreEqual(expectedValue, decode);

                    stream.Seek(0, SeekOrigin.Begin);
                    decoder.SkipArray(s => s.SkipInt());
                    Assert.AreEqual(expectedLength, stream.Position, "Skip offset error");
                }
        }