public void Test()
        {
            const int blockCount = 10;
            const int elemPerItem = 5;
            var itemsPerBlock = ExpandableArray<int>.ComputeItemsPerBlock(sizeof(int));

            var x = new ExpandableArray<int>(elemPerItem, sizeof(int));
            Assert.AreEqual(itemsPerBlock, x.ElementsPerBlock / elemPerItem);
            Assert.AreEqual(0, x.GetLocalIndex(0));
            Assert.AreEqual(1, x.GetLocalIndex(1));
            Assert.AreEqual(x.ElementsPerBlock-1, x.GetLocalIndex(x.ElementsPerBlock-1));
            Assert.AreEqual(0, x.GetLocalIndex(x.ElementsPerBlock));
            Assert.AreEqual(0, x.GetLocalIndex(itemsPerBlock*elemPerItem));
            Assert.AreEqual(0, x.GetLocalIndex(itemsPerBlock*blockCount*elemPerItem));
            Assert.AreEqual(2, x.GetLocalIndex(itemsPerBlock*blockCount*elemPerItem + 2));
            Assert.AreEqual(x.ElementsPerBlock-1, x.GetLocalIndex(itemsPerBlock*blockCount*elemPerItem + x.ElementsPerBlock-1));

            x.EnsureCapacity(itemsPerBlock*blockCount*elemPerItem + 1);
            var realBlockCount = x.EnumerateBlocks().Count();

            Assert.IsTrue(realBlockCount == 1 + blockCount + x.BlockCountIncrement);
        }
Example #2
0
        public void Test()
        {
            const int blockCount    = 10;
            const int elemPerItem   = 5;
            var       itemsPerBlock = ExpandableArray <int> .ComputeItemsPerBlock(sizeof(int));

            var x = new ExpandableArray <int>(elemPerItem, sizeof(int));

            Assert.AreEqual(itemsPerBlock, x.ElementsPerBlock / elemPerItem);
            Assert.AreEqual(0, x.GetLocalIndex(0));
            Assert.AreEqual(1, x.GetLocalIndex(1));
            Assert.AreEqual(x.ElementsPerBlock - 1, x.GetLocalIndex(x.ElementsPerBlock - 1));
            Assert.AreEqual(0, x.GetLocalIndex(x.ElementsPerBlock));
            Assert.AreEqual(0, x.GetLocalIndex(itemsPerBlock * elemPerItem));
            Assert.AreEqual(0, x.GetLocalIndex(itemsPerBlock * blockCount * elemPerItem));
            Assert.AreEqual(2, x.GetLocalIndex(itemsPerBlock * blockCount * elemPerItem + 2));
            Assert.AreEqual(x.ElementsPerBlock - 1, x.GetLocalIndex(itemsPerBlock * blockCount * elemPerItem + x.ElementsPerBlock - 1));

            x.EnsureCapacity(itemsPerBlock * blockCount * elemPerItem + 1);
            var realBlockCount = x.EnumerateBlocks().Count();

            Assert.IsTrue(realBlockCount == 1 + blockCount + x.BlockCountIncrement);
        }
        private static void ReadBitVectorFromStore(BinaryReader reader, ExpandableArray<int> bitVectorData, int count)
        {
            var readSoFar = 0;
            bitVectorData.EnsureCapacity(count);
            const int elementsPerItem = 32;
            while (count > 0)
            {
                var block = bitVectorData.GetBlock(readSoFar);

                for (var i = 0; count > 0 && i < block.Length; i++, count -= elementsPerItem)
                {
                    block[i] = reader.ReadInt32();
                }

                readSoFar += bitVectorData.ElementsPerBlock;
            }
        }