Example #1
0
 protected static IColumnStream CreateColumnStream(ICodecFullStream codec, IAllocator allocator, int bufLen)
 {
     return(new ColumnStreamFullStream <ColumnMemoryStream, ICodecFullStream>(
                new ColumnMemoryStream(),
                codec,
                allocator,
                bufLen));
 }
Example #2
0
        public static IColumnCursor <T> CreateCursor <TEntry, T>(TEntry[] chunk, ICodecFullStream codec)
            where TEntry : unmanaged, IFieldEntry <T>
        {
            var allocator    = new DummyPinnedAllocator();
            var columnStream = new ColumnStreamFullStream <ColumnMemoryStream, ICodecFullStream>(
                new ColumnMemoryStream(), codec, allocator, 1024);

            columnStream.WriteAndReset(chunk, Natives.SizeOfEntry <TEntry>());

            return(new ColumnCursor <TEntry, T, ColumnStreamFullStream <ColumnMemoryStream, ICodecFullStream> >(allocator, columnStream));
        }
Example #3
0
        private static void CheckCodec <T>(ICodecFullStream codec,
                                           Func <int, T[]> factory,
                                           int sizeOfData,
                                           int bufferLength           = 8192,
                                           bool checkDecodeInMove     = true,
                                           bool checkDecodeHeadInMove = true)
        {
            var buffer     = new byte[bufferLength];
            var data       = factory(bufferLength / sizeOfData);
            var dataLength = data.Length;

            fixed(byte *pbuf = buffer)
            {
                var pb = pbuf;

                var handle = GCHandle.Alloc(data, GCHandleType.Pinned);

                try
                {
                    var pdata = (byte *)handle.AddrOfPinnedObject();

                    var pd = pdata;
                    Assert.AreEqual(dataLength, codec.Encode(ref pd, dataLength * sizeOfData, ref pb, bufferLength) / sizeOfData, "Number of data encoded");

                    Assert.AreEqual(dataLength, (pd - pdata) / sizeOfData, "Encoded data length");

                    var wrote = pb - pbuf;
                    Assert.Greater(wrote, 0, "No encoded data wrote");

                    pb = pbuf;

                    var dataRead = new byte[sizeOfData];
                    fixed(byte *pr = dataRead)
                    {
                        var dataToRead = sizeOfData;
                        var mem1       = pb;

                        codec.DecodeHead(ref pb, bufferLength);
                        if (checkDecodeHeadInMove)
                        {
                            Assert.Greater(pb - mem1, 0, "Input data didn't move");
                        }
                        else
                        {
                            Assert.AreEqual(0, pb - mem1, "Input data shouldn't moved");
                        }

                        for (var i = 0; i < dataLength; i++)
                        {
                            var d = pr;
                            mem1 = pb;
                            var mem2 = d;

                            Assert.AreEqual(dataToRead, codec.Decode(ref pb, bufferLength - (int)(pb - pbuf), ref d, dataToRead));
                            if (checkDecodeInMove)
                            {
                                Assert.Greater(pb - mem1, 0, "Input data didn't move");
                            }
                            //else Assert.AreEqual(0, pb - mem1, "Input data shouldn't moved");
                            Assert.AreEqual(sizeOfData, d - mem2, "Output data didn't move");

                            for (var j = 0; j < sizeOfData; j++)
                            {
                                Assert.AreEqual(*(pdata + i * sizeOfData + j), *(pr + j), $"Value at idx {i}, at byte {j}");
                            }
                        }
                    }

                    Assert.True(wrote == pb - pbuf, "Buffer read");
                }
                finally
                {
                    handle.Free();
                }
            }
        }