示例#1
0
        public void BitBufferCanHandleLargeValuesAndCompression()
        {
            var values = GetFailingValues();

            using (var allocator = new ByteStringContext(SharedMultipleUseFlag.None))
                using (allocator.Allocate(2048, out var buffer))
                {
                    Memory.Set(buffer.Ptr, 0, buffer.Length);
                    var bitBuffer = new BitsBuffer(buffer.Ptr, buffer.Length);

                    var numberOfValues = values.Length;


                    for (int i = 0; i < numberOfValues; i++)
                    {
                        bitBuffer.EnsureAdditionalBits(allocator, values[i].Item2);
                        bitBuffer.AddValue(values[i].Item1, values[i].Item2);
                    }

                    using (bitBuffer.Uncompress(allocator, out var newBuf))
                    {
                        int offset = 0;
                        for (int i = 0; i < numberOfValues; i++)
                        {
                            var val = newBuf.ReadValue(ref offset, values[i].Item2);
                            if (val != values[i].Item1)
                            {
                                Assert.False(true, "Unmatch value at index: " + i);
                            }
                        }
                    }
                }
        }
示例#2
0
        public unsafe void BitBufferCompression()
        {
            using (var allocator = new ByteStringContext(SharedMultipleUseFlag.None))
                using (allocator.Allocate(2048, out var buffer))
                {
                    Memory.Set(buffer.Ptr, 0, buffer.Length);
                    var bitBuffer = new BitsBuffer(buffer.Ptr, buffer.Length);

                    for (int i = 0; i < 12; i++)
                    {
                        bitBuffer.AddValue((ulong)(i & 1), 1);
                    }

                    bitBuffer.TryCompressBuffer(allocator, 0);


                    bitBuffer.Uncompress(allocator, out var newBuffer);

                    for (int i = 0; i < 12; i++)
                    {
                        int copy = i;
                        var v    = newBuffer.ReadValue(ref copy, 1);
                        Assert.Equal((ulong)(i & 1), v);
                    }
                }
        }
示例#3
0
        public void CanSetBits()
        {
            var buffer      = stackalloc byte[16];
            var bitsBufffer = new BitsBuffer(buffer, 16);

            bitsBufffer.AddValue(12, 6);
            bitsBufffer.AddValue(3, 7);
            bitsBufffer.AddValue(279, 18);

            bitsBufffer.SetBits(6, 7, 7);

            int index = 0;

            Assert.Equal(12UL, bitsBufffer.ReadValue(ref index, 6));
            Assert.Equal(7UL, bitsBufffer.ReadValue(ref index, 7));
            Assert.Equal(279UL, bitsBufffer.ReadValue(ref index, 18));
        }