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); }
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; } }