This commit is contained in:
mlemanczyk committed 2023-10-21 17:26:35 +02:00
1 parent 0159042755
commit ec69b1c406
38 files changed
+167 -181

No files matched your search

@@ -8,7 +8,7 @@ namespace Recyclable.Collections.Benchmarks
{ {
var data = TestObjects; var data = TestObjects;
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
var list = new long[dataCount]; var list = new int[dataCount];
for (var i = 0; i < dataCount; i++) for (var i = 0; i < dataCount; i++)
{ {
list[i] = data[i]; list[i] = data[i];
@@ -19,7 +19,7 @@ namespace Recyclable.Collections.Benchmarks
{ {
var data = TestObjects; var data = TestObjects;
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
var list = new List<long>(); var list = new List<int>();
for (var i = 0; i < dataCount; i++) for (var i = 0; i < dataCount; i++)
{ {
list.Add(data[i]); list.Add(data[i]);
@@ -30,7 +30,7 @@ namespace Recyclable.Collections.Benchmarks
{ {
var data = TestObjects; var data = TestObjects;
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
using var list = new PooledList<long>(ClearMode.Auto); using var list = new PooledList<int>(ClearMode.Auto);
for (var i = 0; i < dataCount; i++) for (var i = 0; i < dataCount; i++)
{ {
list.Add(data[i]); list.Add(data[i]);
@@ -41,7 +41,7 @@ namespace Recyclable.Collections.Benchmarks
{ {
var data = TestObjects; var data = TestObjects;
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
using var list = new RecyclableList<long>(); using var list = new RecyclableList<int>();
for (var i = 0; i < dataCount; i++) for (var i = 0; i < dataCount; i++)
{ {
list.Add(data[i]); list.Add(data[i]);
@@ -52,7 +52,7 @@ namespace Recyclable.Collections.Benchmarks
{ {
var data = TestObjects; var data = TestObjects;
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
using var list = new RecyclableLongList<long>(); using var list = new RecyclableLongList<int>();
for (var i = 0; i < dataCount; i++) for (var i = 0; i < dataCount; i++)
{ {
list.Add(data[i]); list.Add(data[i]);
@@ -7,35 +7,35 @@ namespace Recyclable.Collections.Benchmarks
public void Array_AddRangeWhenSourceIsArray() public void Array_AddRangeWhenSourceIsArray()
{ {
var data = TestObjects; var data = TestObjects;
var list = new long[TestObjectCount]; var list = new int[TestObjectCount];
data.CopyTo(list, 0); data.CopyTo(list, 0);
} }
public void List_AddRangeWhenSourceIsArray() public void List_AddRangeWhenSourceIsArray()
{ {
var data = TestObjects; var data = TestObjects;
var list = new List<long>(); var list = new List<int>();
list.AddRange(data); list.AddRange(data);
} }
public void PooledList_AddRangeWhenSourceIsArray() public void PooledList_AddRangeWhenSourceIsArray()
{ {
var data = TestObjects; var data = TestObjects;
using var list = new PooledList<long>(ClearMode.Auto); using var list = new PooledList<int>(ClearMode.Auto);
list.AddRange(data); list.AddRange(data);
} }
public void RecyclableList_AddRangeWhenSourceIsArray() public void RecyclableList_AddRangeWhenSourceIsArray()
{ {
var data = TestObjects; var data = TestObjects;
using var list = new RecyclableList<long>(); using var list = new RecyclableList<int>();
list.AddRange(data); list.AddRange(data);
} }
public void RecyclableLongList_AddRangeWhenSourceIsArray() public void RecyclableLongList_AddRangeWhenSourceIsArray()
{ {
var data = TestObjects; var data = TestObjects;
using var list = new RecyclableLongList<long>(minBlockSize: BlockSize); using var list = new RecyclableLongList<int>(minBlockSize: BlockSize);
list.AddRange(data); list.AddRange(data);
} }
} }
@@ -7,7 +7,7 @@ namespace Recyclable.Collections.Benchmarks
public void Array_AddRangeWhenSourceIsIEnumerable() public void Array_AddRangeWhenSourceIsIEnumerable()
{ {
var data = TestObjectsAsIEnumerable; var data = TestObjectsAsIEnumerable;
var list = new long[TestObjectCount]; var list = new int[TestObjectCount];
int itemIndex = 0; int itemIndex = 0;
foreach (var item in data) foreach (var item in data)
@@ -19,28 +19,28 @@ namespace Recyclable.Collections.Benchmarks
public void List_AddRangeWhenSourceIsIEnumerable() public void List_AddRangeWhenSourceIsIEnumerable()
{ {
var data = TestObjectsAsIEnumerable; var data = TestObjectsAsIEnumerable;
var list = new List<long>(); var list = new List<int>();
list.AddRange(data); list.AddRange(data);
} }
public void PooledList_AddRangeWhenSourceIsIEnumerable() public void PooledList_AddRangeWhenSourceIsIEnumerable()
{ {
var data = TestObjectsAsIEnumerable; var data = TestObjectsAsIEnumerable;
using var list = new PooledList<long>(ClearMode.Auto); using var list = new PooledList<int>(ClearMode.Auto);
list.AddRange(data); list.AddRange(data);
} }
public void RecyclableList_AddRangeWhenSourceIsIEnumerable() public void RecyclableList_AddRangeWhenSourceIsIEnumerable()
{ {
var data = TestObjectsAsIEnumerable; var data = TestObjectsAsIEnumerable;
using var list = new RecyclableList<long>(); using var list = new RecyclableList<int>();
list.AddRange(data); list.AddRange(data);
} }
public void RecyclableLongList_AddRangeWhenSourceIsIEnumerable() public void RecyclableLongList_AddRangeWhenSourceIsIEnumerable()
{ {
var data = TestObjectsAsIEnumerable; var data = TestObjectsAsIEnumerable;
using var list = new RecyclableLongList<long>(minBlockSize: BlockSize); using var list = new RecyclableLongList<int>(minBlockSize: BlockSize);
list.AddRange(data); list.AddRange(data);
} }
} }
@@ -6,36 +6,36 @@ namespace Recyclable.Collections.Benchmarks
{ {
public void Array_AddRangeWhenSourceIsIList() public void Array_AddRangeWhenSourceIsIList()
{ {
var data = (IList<long>)TestObjectsAsRecyclableLongList; var data = (IList<int>)TestObjectsAsRecyclableLongList;
var list = new long[TestObjectCount]; var list = new int[TestObjectCount];
data.CopyTo(list, 0); data.CopyTo(list, 0);
} }
public void List_AddRangeWhenSourceIsIList() public void List_AddRangeWhenSourceIsIList()
{ {
var data = (IList<long>)TestObjectsAsRecyclableLongList; var data = (IList<int>)TestObjectsAsRecyclableLongList;
var list = new List<long>(); var list = new List<int>();
list.AddRange(data); list.AddRange(data);
} }
public void PooledList_AddRangeWhenSourceIsIList() public void PooledList_AddRangeWhenSourceIsIList()
{ {
var data = (IList<long>)TestObjectsAsRecyclableLongList; var data = (IList<int>)TestObjectsAsRecyclableLongList;
using var list = new PooledList<long>(ClearMode.Auto); using var list = new PooledList<int>(ClearMode.Auto);
list.AddRange(data); list.AddRange(data);
} }
public void RecyclableList_AddRangeWhenSourceIsIList() public void RecyclableList_AddRangeWhenSourceIsIList()
{ {
var data = (IList<long>)TestObjectsAsRecyclableLongList; var data = (IList<int>)TestObjectsAsRecyclableLongList;
using var list = new RecyclableList<long>(); using var list = new RecyclableList<int>();
list.AddRange(data); list.AddRange(data);
} }
public void RecyclableLongList_AddRangeWhenSourceIsIList() public void RecyclableLongList_AddRangeWhenSourceIsIList()
{ {
var data = (IList<long>)TestObjectsAsRecyclableLongList; var data = (IList<int>)TestObjectsAsRecyclableLongList;
using var list = new RecyclableLongList<long>(minBlockSize: BlockSize); using var list = new RecyclableLongList<int>(minBlockSize: BlockSize);
list.AddRange(data); list.AddRange(data);
} }
} }
@@ -7,35 +7,35 @@ namespace Recyclable.Collections.Benchmarks
public void Array_AddRangeWhenSourceIsList() public void Array_AddRangeWhenSourceIsList()
{ {
var data = TestObjectsAsList; var data = TestObjectsAsList;
var list = new long[TestObjectCount]; var list = new int[TestObjectCount];
data.CopyTo(list, 0); data.CopyTo(list, 0);
} }
public void List_AddRangeWhenSourceIsList() public void List_AddRangeWhenSourceIsList()
{ {
var data = TestObjectsAsList; var data = TestObjectsAsList;
var list = new List<long>(); var list = new List<int>();
list.AddRange(data); list.AddRange(data);
} }
public void PooledList_AddRangeWhenSourceIsList() public void PooledList_AddRangeWhenSourceIsList()
{ {
var data = TestObjectsAsList; var data = TestObjectsAsList;
using var list = new PooledList<long>(ClearMode.Auto); using var list = new PooledList<int>(ClearMode.Auto);
list.AddRange(data); list.AddRange(data);
} }
public void RecyclableList_AddRangeWhenSourceIsList() public void RecyclableList_AddRangeWhenSourceIsList()
{ {
var data = TestObjectsAsList; var data = TestObjectsAsList;
using var list = new RecyclableList<long>(); using var list = new RecyclableList<int>();
list.AddRange(data); list.AddRange(data);
} }
public void RecyclableLongList_AddRangeWhenSourceIsList() public void RecyclableLongList_AddRangeWhenSourceIsList()
{ {
var data = TestObjectsAsList; var data = TestObjectsAsList;
using var list = new RecyclableLongList<long>(minBlockSize: BlockSize); using var list = new RecyclableLongList<int>(minBlockSize: BlockSize);
list.AddRange(data); list.AddRange(data);
} }
} }
@@ -7,21 +7,21 @@ namespace Recyclable.Collections.Benchmarks
public void PooledList_AddRangeWhenSourceIsPooledList() public void PooledList_AddRangeWhenSourceIsPooledList()
{ {
var data = TestObjectsAsPooledList; var data = TestObjectsAsPooledList;
using var list = new PooledList<long>(capacity: TestObjectCount, ClearMode.Auto); using var list = new PooledList<int>(capacity: TestObjectCount, ClearMode.Auto);
list.AddRange(data); list.AddRange(data);
} }
public void RecyclableList_AddRangeWhenSourceIsRecyclableList() public void RecyclableList_AddRangeWhenSourceIsRecyclableList()
{ {
var data = TestObjectsAsRecyclableList; var data = TestObjectsAsRecyclableList;
using var list = new RecyclableList<long>(TestObjectCount); using var list = new RecyclableList<int>(TestObjectCount);
list.AddRange(data); list.AddRange(data);
} }
public void RecyclableLongList_AddRangeWhenSourceIsRecyclableLongList() public void RecyclableLongList_AddRangeWhenSourceIsRecyclableLongList()
{ {
var data = TestObjectsAsRecyclableList; var data = TestObjectsAsRecyclableList;
using var list = new RecyclableLongList<long>(minBlockSize: BlockSize, initialCapacity: TestObjectCount); using var list = new RecyclableLongList<int>(minBlockSize: BlockSize, initialCapacity: TestObjectCount);
list.AddRange(data); list.AddRange(data);
} }
} }
@@ -8,7 +8,7 @@ namespace Recyclable.Collections.Benchmarks
{ {
var data = TestObjects; var data = TestObjects;
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
var list = new long[dataCount]; var list = new int[dataCount];
data.CopyTo(list, 0); data.CopyTo(list, 0);
} }
@@ -16,7 +16,7 @@ namespace Recyclable.Collections.Benchmarks
{ {
var data = TestObjects; var data = TestObjects;
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
var list = new List<long>(dataCount); var list = new List<int>(dataCount);
list.AddRange(data); list.AddRange(data);
} }
@@ -24,7 +24,7 @@ namespace Recyclable.Collections.Benchmarks
{ {
var data = TestObjects; var data = TestObjects;
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
using var list = new PooledList<long>(capacity: dataCount, ClearMode.Auto); using var list = new PooledList<int>(capacity: dataCount, ClearMode.Auto);
list.AddRange(data); list.AddRange(data);
} }
@@ -32,7 +32,7 @@ namespace Recyclable.Collections.Benchmarks
{ {
var data = TestObjects; var data = TestObjects;
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
using var list = new RecyclableList<long>(dataCount); using var list = new RecyclableList<int>(dataCount);
list.AddRange(data); list.AddRange(data);
} }
@@ -40,7 +40,7 @@ namespace Recyclable.Collections.Benchmarks
{ {
var data = TestObjects; var data = TestObjects;
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
using var list = new RecyclableLongList<long>(minBlockSize: BlockSize, initialCapacity: dataCount); using var list = new RecyclableLongList<int>(minBlockSize: BlockSize, initialCapacity: dataCount);
list.AddRange(data); list.AddRange(data);
} }
} }
@@ -8,7 +8,7 @@ namespace Recyclable.Collections.Benchmarks
{ {
var data = TestObjects; var data = TestObjects;
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
var list = new List<long>(dataCount); var list = new List<int>(dataCount);
for (var i = 0; i < dataCount; i++) for (var i = 0; i < dataCount; i++)
{ {
list.Add(data[i]); list.Add(data[i]);
@@ -19,7 +19,7 @@ namespace Recyclable.Collections.Benchmarks
{ {
var data = TestObjects; var data = TestObjects;
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
using var list = new PooledList<long>(capacity: dataCount, ClearMode.Auto); using var list = new PooledList<int>(capacity: dataCount, ClearMode.Auto);
for (var i = 0; i < dataCount; i++) for (var i = 0; i < dataCount; i++)
{ {
list.Add(data[i]); list.Add(data[i]);
@@ -30,7 +30,7 @@ namespace Recyclable.Collections.Benchmarks
{ {
var data = TestObjects; var data = TestObjects;
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
using var list = new RecyclableList<long>(dataCount); using var list = new RecyclableList<int>(dataCount);
for (var i = 0; i < dataCount; i++) for (var i = 0; i < dataCount; i++)
{ {
list.Add(data[i]); list.Add(data[i]);
@@ -41,7 +41,7 @@ namespace Recyclable.Collections.Benchmarks
{ {
var data = TestObjects; var data = TestObjects;
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
using var list = new RecyclableLongList<long>(minBlockSize: BlockSize, initialCapacity: dataCount); using var list = new RecyclableLongList<int>(minBlockSize: BlockSize, initialCapacity: dataCount);
for (var i = 0; i < dataCount; i++) for (var i = 0; i < dataCount; i++)
{ {
list.Add(data[i]); list.Add(data[i]);
@@ -8,31 +8,31 @@ namespace Recyclable.Collections.Benchmarks
{ {
public void Array_Create() public void Array_Create()
{ {
var list = new long[0]; var list = new int[0];
DoNothing(list); DoNothing(list);
} }
public void List_Create() public void List_Create()
{ {
var list = new List<long>(); var list = new List<int>();
DoNothing(list); DoNothing(list);
} }
public void PooledList_Create() public void PooledList_Create()
{ {
using var list = new PooledList<long>(ClearMode.Auto); using var list = new PooledList<int>(ClearMode.Auto);
DoNothing(list); DoNothing(list);
} }
public void RecyclableList_Create() public void RecyclableList_Create()
{ {
using var list = new RecyclableList<long>(); using var list = new RecyclableList<int>();
DoNothing(list); DoNothing(list);
} }
public void RecyclableLongList_Create() public void RecyclableLongList_Create()
{ {
using var list = new RecyclableLongList<long>(); using var list = new RecyclableLongList<int>();
DoNothing(list); DoNothing(list);
} }
} }
@@ -6,31 +6,31 @@ namespace Recyclable.Collections.Benchmarks
{ {
public void Array_Create_WithCapacity() public void Array_Create_WithCapacity()
{ {
var data = new long[TestObjectCount]; var data = new int[TestObjectCount];
DoNothing(data); DoNothing(data);
} }
public void List_Create_WithCapacity() public void List_Create_WithCapacity()
{ {
var list = new List<long>(TestObjectCount); var list = new List<int>(TestObjectCount);
DoNothing(list); DoNothing(list);
} }
public void PooledList_Create_WithCapacity() public void PooledList_Create_WithCapacity()
{ {
using var list = new PooledList<long>(capacity: TestObjectCount, ClearMode.Auto); using var list = new PooledList<int>(capacity: TestObjectCount, ClearMode.Auto);
DoNothing(list); DoNothing(list);
} }
public void RecyclableList_Create_WithCapacity() public void RecyclableList_Create_WithCapacity()
{ {
using var list = new RecyclableList<long>(TestObjectCount); using var list = new RecyclableList<int>(TestObjectCount);
DoNothing(list); DoNothing(list);
} }
public void RecyclableLongList_Create_WithCapacity() public void RecyclableLongList_Create_WithCapacity()
{ {
using var list = new RecyclableLongList<long>(minBlockSize: BlockSize, initialCapacity: TestObjectCount); using var list = new RecyclableLongList<int>(minBlockSize: BlockSize, initialCapacity: TestObjectCount);
DoNothing(list); DoNothing(list);
} }
} }
@@ -58,10 +58,10 @@
int blockSize = data.BlockSize; int blockSize = data.BlockSize;
int nextItemBlockIndex = data.NextItemBlockIndex; int nextItemBlockIndex = data.NextItemBlockIndex;
var memoryBlocks = new Span<long[]>(data.AsArray, 0, data.LastBlockWithData + 1); var memoryBlocks = new Span<int[]>(data.AsArray, 0, data.LastBlockWithData + 1);
for (var blockIndex = 0; blockIndex < nextItemBlockIndex; blockIndex++) for (var blockIndex = 0; blockIndex < nextItemBlockIndex; blockIndex++)
{ {
var memoryBlock = new Span<long>(memoryBlocks[blockIndex], 0, blockSize); var memoryBlock = new Span<int>(memoryBlocks[blockIndex], 0, blockSize);
for (var itemIndex = 0; itemIndex < blockSize; itemIndex++) for (var itemIndex = 0; itemIndex < blockSize; itemIndex++)
{ {
DoNothing(memoryBlock[itemIndex]); DoNothing(memoryBlock[itemIndex]);
@@ -70,7 +70,7 @@
if (nextItemBlockIndex == data.LastBlockWithData) if (nextItemBlockIndex == data.LastBlockWithData)
{ {
var memoryBlock = new Span<long>(memoryBlocks[nextItemBlockIndex], 0, data.NextItemIndex); var memoryBlock = new Span<int>(memoryBlocks[nextItemBlockIndex], 0, data.NextItemIndex);
for (var itemIndex = 0; itemIndex < memoryBlock.Length; itemIndex++) for (var itemIndex = 0; itemIndex < memoryBlock.Length; itemIndex++)
{ {
DoNothing(memoryBlock[itemIndex]); DoNothing(memoryBlock[itemIndex]);
@@ -117,7 +117,7 @@
public void RecyclableLongList_GetItem_AsWhile() public void RecyclableLongList_GetItem_AsWhile()
{ {
var data = TestObjectsAsRecyclableLongList; var data = TestObjectsAsRecyclableLongList;
long dataCount = TestObjectCount; int dataCount = TestObjectCount;
if (dataCount == 0) if (dataCount == 0)
{ {
return; return;
@@ -7,7 +7,7 @@ namespace Recyclable.Collections.Benchmarks
public void List_RemoveAt_FirstItems() public void List_RemoveAt_FirstItems()
{ {
var data = TestObjects; var data = TestObjects;
var list = new List<long>(data); var list = new List<int>(data);
var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount;
for (var i = 0; i < dataCount; i++) for (var i = 0; i < dataCount; i++)
{ {
@@ -18,7 +18,7 @@ namespace Recyclable.Collections.Benchmarks
public void PooledList_RemoveAt_FirstItems() public void PooledList_RemoveAt_FirstItems()
{ {
var data = TestObjects; var data = TestObjects;
using var list = new PooledList<long>(data, ClearMode.Auto); using var list = new PooledList<int>(data, ClearMode.Auto);
var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount;
for (var i = 0; i < dataCount; i++) for (var i = 0; i < dataCount; i++)
{ {
@@ -29,7 +29,7 @@ namespace Recyclable.Collections.Benchmarks
public void RecyclableList_RemoveAt_FirstItems() public void RecyclableList_RemoveAt_FirstItems()
{ {
var data = TestObjects; var data = TestObjects;
using var list = new RecyclableList<long>(data); using var list = new RecyclableList<int>(data);
var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount;
for (var i = 0; i < dataCount; i++) for (var i = 0; i < dataCount; i++)
{ {
@@ -40,7 +40,7 @@ namespace Recyclable.Collections.Benchmarks
public void RecyclableLongList_RemoveAt_FirstItems() public void RecyclableLongList_RemoveAt_FirstItems()
{ {
var data = TestObjects; var data = TestObjects;
using var list = new RecyclableLongList<long>(data, minBlockSize: BlockSize, initialCapacity: base.TestObjectCount); using var list = new RecyclableLongList<int>(data, minBlockSize: BlockSize, initialCapacity: base.TestObjectCount);
var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount;
for (var i = 0; i < dataCount; i++) for (var i = 0; i < dataCount; i++)
{ {
@@ -7,7 +7,7 @@ namespace Recyclable.Collections.Benchmarks
public void List_RemoveAt_LastItems() public void List_RemoveAt_LastItems()
{ {
var data = TestObjects; var data = TestObjects;
var list = new List<long>(data); var list = new List<int>(data);
var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount;
for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--)
{ {
@@ -18,7 +18,7 @@ namespace Recyclable.Collections.Benchmarks
public void PooledList_RemoveAt_LastItems() public void PooledList_RemoveAt_LastItems()
{ {
var data = TestObjects; var data = TestObjects;
using var list = new PooledList<long>(data, ClearMode.Auto); using var list = new PooledList<int>(data, ClearMode.Auto);
var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount;
for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--)
{ {
@@ -29,7 +29,7 @@ namespace Recyclable.Collections.Benchmarks
public void RecyclableList_RemoveAt_LastItems() public void RecyclableList_RemoveAt_LastItems()
{ {
var data = TestObjects; var data = TestObjects;
using var list = new RecyclableList<long>(data); using var list = new RecyclableList<int>(data);
var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount;
for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--)
{ {
@@ -40,7 +40,7 @@ namespace Recyclable.Collections.Benchmarks
public void RecyclableLongList_RemoveAt_LastItems() public void RecyclableLongList_RemoveAt_LastItems()
{ {
var data = TestObjects; var data = TestObjects;
using var list = new RecyclableLongList<long>(data, minBlockSize: BlockSize, initialCapacity: base.TestObjectCount); using var list = new RecyclableLongList<int>(data, minBlockSize: BlockSize, initialCapacity: base.TestObjectCount);
var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount;
for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--)
{ {
@@ -7,7 +7,7 @@ namespace Recyclable.Collections.Benchmarks
public void List_Remove_FirstItems() public void List_Remove_FirstItems()
{ {
var data = TestObjects; var data = TestObjects;
var list = new List<long>(data); var list = new List<int>(data);
var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount;
for (var i = 0; i < dataCount; i++) for (var i = 0; i < dataCount; i++)
{ {
@@ -18,7 +18,7 @@ namespace Recyclable.Collections.Benchmarks
public void PooledList_Remove_FirstItems() public void PooledList_Remove_FirstItems()
{ {
var data = TestObjects; var data = TestObjects;
using var list = new PooledList<long>(data, ClearMode.Auto); using var list = new PooledList<int>(data, ClearMode.Auto);
var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount;
for (var i = 0; i < dataCount; i++) for (var i = 0; i < dataCount; i++)
{ {
@@ -29,7 +29,7 @@ namespace Recyclable.Collections.Benchmarks
public void RecyclableList_Remove_FirstItems() public void RecyclableList_Remove_FirstItems()
{ {
var data = TestObjects; var data = TestObjects;
using var list = new RecyclableList<long>(data); using var list = new RecyclableList<int>(data);
var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount;
for (var i = 0; i < dataCount; i++) for (var i = 0; i < dataCount; i++)
{ {
@@ -40,7 +40,7 @@ namespace Recyclable.Collections.Benchmarks
public void RecyclableLongList_Remove_FirstItems() public void RecyclableLongList_Remove_FirstItems()
{ {
var data = TestObjects; var data = TestObjects;
using var list = new RecyclableLongList<long>(data, minBlockSize: BlockSize, initialCapacity: base.TestObjectCount); using var list = new RecyclableLongList<int>(data, minBlockSize: BlockSize, initialCapacity: base.TestObjectCount);
var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount;
for (var i = 0; i < dataCount; i++) for (var i = 0; i < dataCount; i++)
{ {
@@ -7,7 +7,7 @@ namespace Recyclable.Collections.Benchmarks
public void List_Remove_LastItems() public void List_Remove_LastItems()
{ {
var data = TestObjects; var data = TestObjects;
var list = new List<long>(data); var list = new List<int>(data);
var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount;
for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--)
{ {
@@ -18,7 +18,7 @@ namespace Recyclable.Collections.Benchmarks
public void PooledList_Remove_LastItems() public void PooledList_Remove_LastItems()
{ {
var data = TestObjects; var data = TestObjects;
using var list = new PooledList<long>(data, ClearMode.Auto); using var list = new PooledList<int>(data, ClearMode.Auto);
var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount;
for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--)
{ {
@@ -29,7 +29,7 @@ namespace Recyclable.Collections.Benchmarks
public void RecyclableList_Remove_LastItems() public void RecyclableList_Remove_LastItems()
{ {
var data = TestObjects; var data = TestObjects;
using var list = new RecyclableList<long>(data); using var list = new RecyclableList<int>(data);
var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount;
for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--)
{ {
@@ -40,7 +40,7 @@ namespace Recyclable.Collections.Benchmarks
public void RecyclableLongList_Remove_LastItems() public void RecyclableLongList_Remove_LastItems()
{ {
var data = TestObjects; var data = TestObjects;
using var list = new RecyclableLongList<long>(data, minBlockSize: BlockSize, initialCapacity:base.TestObjectCount); using var list = new RecyclableLongList<int>(data, minBlockSize: BlockSize, initialCapacity:base.TestObjectCount);
var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount;
for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--)
{ {
@@ -1,4 +1,6 @@
using BenchmarkDotNet.Attributes; // Ignore Spelling: Poc
using BenchmarkDotNet.Attributes;
using FluentAssertions; using FluentAssertions;
using Recyclable.CollectionsTests; using Recyclable.CollectionsTests;
@@ -24,7 +26,7 @@ namespace Recyclable.Collections.Benchmarks.POC
_ = _list1.Should().ContainInConsecutiveOrder(_list2); _ = _list1.Should().ContainInConsecutiveOrder(_list2);
} }
public void Dispose() void IDisposable.Dispose()
{ {
if (_list1 is IDisposable disposable1) if (_list1 is IDisposable disposable1)
{ {
@@ -35,6 +37,8 @@ namespace Recyclable.Collections.Benchmarks.POC
{ {
disposable2.Dispose(); disposable2.Dispose();
} }
GC.SuppressFinalize(this);
} }
} }
} }
@@ -1,4 +1,6 @@
using BenchmarkDotNet.Attributes; // Ignore Spelling: Poc
using BenchmarkDotNet.Attributes;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
#pragma warning disable CA1822 #pragma warning disable CA1822
@@ -7,14 +9,14 @@ namespace Recyclable.Collections.Benchmarks.POC
{ {
public class LessOperatorVsAndOperatorBenchmarks public class LessOperatorVsAndOperatorBenchmarks
{ {
private const int bitShift = 1 << 31; private const int BitShift = 1 << 31;
private static readonly Random _rnd = new(1); private static readonly Random _rnd = new(1);
private static int num = -Math.Abs(_rnd.Next()); private static int _num = -Math.Abs(_rnd.Next());
public void Setup() public void Setup()
{ {
num = -1; _num = -1;
Console.WriteLine($"*** We're comparing if {num} is < 0 ***"); Console.WriteLine($"*** We're comparing if {_num} is < 0 ***");
} }
public void Cleanup() { } public void Cleanup() { }
@@ -30,25 +32,25 @@ namespace Recyclable.Collections.Benchmarks.POC
[Benchmark(Baseline = true)] [Benchmark(Baseline = true)]
public void CompareWithLess() public void CompareWithLess()
{ {
DoNothing(num < 0); DoNothing(_num < 0);
} }
[Benchmark] [Benchmark]
public void CompareWithAnd() public void CompareWithAnd()
{ {
DoNothing((num & bitShift) != 0); DoNothing((_num & BitShift) != 0);
} }
[Benchmark] [Benchmark]
public void CompareWithEqual() public void CompareWithEqual()
{ {
DoNothing(num == -1); DoNothing(_num == -1);
} }
[Benchmark] [Benchmark]
public void CompareToZero() public void CompareToZero()
{ {
DoNothing(num == 0); DoNothing(_num == 0);
} }
} }
} }
@@ -1,4 +1,6 @@
using BenchmarkDotNet.Attributes; // Ignore Spelling: Poc
using BenchmarkDotNet.Attributes;
namespace Recyclable.Collections.Benchmarks.POC namespace Recyclable.Collections.Benchmarks.POC
{ {
@@ -35,11 +37,11 @@ namespace Recyclable.Collections.Benchmarks.POC
} }
protected override Action GetTestMethod(RoundBenchmarkType benchmarkType) => benchmarkType switch protected override Action GetTestMethod(RoundBenchmarkType benchmarkType) => benchmarkType switch
{ {
RoundBenchmarkType.MathFloor => RoundWithMathFloor, RoundBenchmarkType.MathFloor => RoundWithMathFloor,
RoundBenchmarkType.MathRound => RoundWithMathRound, RoundBenchmarkType.MathRound => RoundWithMathRound,
RoundBenchmarkType.WithTypecasting => RoundWithTypeCasting, RoundBenchmarkType.WithTypecasting => RoundWithTypeCasting,
_ => throw CreateUnknownBenchmarkTypeException(benchmarkType), _ => throw CreateUnknownBenchmarkTypeException(benchmarkType),
}; };
} }
} }
@@ -1,4 +1,6 @@
using BenchmarkDotNet.Attributes; // Ignore Spelling: Poc
using BenchmarkDotNet.Attributes;
namespace Recyclable.Collections.Benchmarks.POC namespace Recyclable.Collections.Benchmarks.POC
{ {
@@ -28,21 +30,21 @@ namespace Recyclable.Collections.Benchmarks.POC
public override SpanVsArrayBenchmarkType BaseDataType { get => base.BaseDataType; set => base.BaseDataType = value; } public override SpanVsArrayBenchmarkType BaseDataType { get => base.BaseDataType; set => base.BaseDataType = value; }
protected override Action GetTestMethod(SpanVsArrayBenchmarkType benchmarkType) => benchmarkType switch protected override Action GetTestMethod(SpanVsArrayBenchmarkType benchmarkType) => benchmarkType switch
{ {
SpanVsArrayBenchmarkType.ArrayGetWithVar => ArrayGetWithVar, SpanVsArrayBenchmarkType.ArrayGetWithVar => ArrayGetWithVar,
SpanVsArrayBenchmarkType.ArrayGetWithField => ArrayGetWithField, SpanVsArrayBenchmarkType.ArrayGetWithField => ArrayGetWithField,
SpanVsArrayBenchmarkType.SpanGet => SpanGet, SpanVsArrayBenchmarkType.SpanGet => SpanGet,
SpanVsArrayBenchmarkType.ArraySetWithVar => ArraySetWithVar, SpanVsArrayBenchmarkType.ArraySetWithVar => ArraySetWithVar,
SpanVsArrayBenchmarkType.ArraySetWithField => ArraySetWithField, SpanVsArrayBenchmarkType.ArraySetWithField => ArraySetWithField,
SpanVsArrayBenchmarkType.SpanSet => SpanSet, SpanVsArrayBenchmarkType.SpanSet => SpanSet,
_ => throw CreateUnknownBenchmarkTypeException(benchmarkType), _ => throw CreateUnknownBenchmarkTypeException(benchmarkType),
}; };
public void ArrayGetWithVar() public void ArrayGetWithVar()
{ {
var data = TestObjects; var data = TestObjects;
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
for (long i = 0; i < dataCount; i++) for (int i = 0; i < dataCount; i++)
{ {
DoNothing(data[i]); DoNothing(data[i]);
} }
@@ -51,7 +53,7 @@ namespace Recyclable.Collections.Benchmarks.POC
public void ArrayGetWithField() public void ArrayGetWithField()
{ {
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
for (long i = 0; i < dataCount; i++) for (int i = 0; i < dataCount; i++)
{ {
DoNothing(_testObjects![i]); DoNothing(_testObjects![i]);
} }
@@ -60,7 +62,7 @@ namespace Recyclable.Collections.Benchmarks.POC
public void SpanGet() public void SpanGet()
{ {
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
Span<long> data = new(_testObjects, 0, dataCount); Span<int> data = new(_testObjects, 0, dataCount);
for (int i = 0; i < dataCount; i++) for (int i = 0; i < dataCount; i++)
{ {
DoNothing(data[i]); DoNothing(data[i]);
@@ -71,7 +73,7 @@ namespace Recyclable.Collections.Benchmarks.POC
{ {
var data = TestObjects; var data = TestObjects;
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
for (long i = 0; i < dataCount; i++) for (int i = 0; i < dataCount; i++)
{ {
data[i] = i; data[i] = i;
} }
@@ -80,7 +82,7 @@ namespace Recyclable.Collections.Benchmarks.POC
public void ArraySetWithField() public void ArraySetWithField()
{ {
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
for (long i = 0; i < dataCount; i++) for (int i = 0; i < dataCount; i++)
{ {
_testObjects![i] = i; _testObjects![i] = i;
} }
@@ -89,7 +91,7 @@ namespace Recyclable.Collections.Benchmarks.POC
public void SpanSet() public void SpanSet()
{ {
var dataCount = TestObjectCount; var dataCount = TestObjectCount;
Span<long> data = new(_testObjects, 0, dataCount); Span<int> data = new(_testObjects, 0, dataCount);
for (int i = 0; i < dataCount; i++) for (int i = 0; i < dataCount; i++)
{ {
data[i] = i; data[i] = i;
@@ -1,29 +1,25 @@
using System; // Ignore Spelling: Poc
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Threading.Tasks.Sources;
using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Attributes;
using Microsoft.Extensions.ObjectPool;
namespace Recyclable.Collections.Benchmarks.POC namespace Recyclable.Collections.Benchmarks.POC
{ {
[MemoryDiagnoser] [MemoryDiagnoser]
public class TaskRunVsTaskFactoryStartNewBenchmarks public class TaskRunVsTaskFactoryStartNewBenchmarks
{ {
public int NumberOfTasks = 100; public int NumberOfTasks = 100;
private static readonly TaskFactory TaskPool = new(); private static readonly TaskFactory _taskPool = new();
[Benchmark] [Benchmark]
public void OwnTaskFactory() public void OwnTaskFactory()
{ {
for (var i = 0; i < NumberOfTasks; i++) for (var i = 0; i < NumberOfTasks; i++)
{ {
_ = TaskPool.StartNew(() => {}); _ = _taskPool.StartNew(() => {});
} }
} }
[Benchmark] [Benchmark]
public void TaskRun() public void TaskRun()
{ {
for (var i = 0; i < NumberOfTasks; i++) for (var i = 0; i < NumberOfTasks; i++)
@@ -32,7 +28,7 @@ namespace Recyclable.Collections.Benchmarks.POC
} }
} }
[Benchmark(Baseline = true)] [Benchmark(Baseline = true)]
public void TaskFactoryStartNew() public void TaskFactoryStartNew()
{ {
for (var i = 0; i < NumberOfTasks; i++) for (var i = 0; i < NumberOfTasks; i++)
@@ -59,5 +55,5 @@ namespace Recyclable.Collections.Benchmarks.POC
new Task(() => { }).Start(scheduler); new Task(() => { }).Start(scheduler);
} }
} }
} }
} }
+2 -1
View File
@@ -51,7 +51,8 @@ namespace Recyclable.Collections.Benchmarks
_ = BenchmarkRunner.Run<RoundUpToPowerOf2vsOtherBenchmarks>(BenchmarkConfig); _ = BenchmarkRunner.Run<RoundUpToPowerOf2vsOtherBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<GreaterOperatorVsDoesntEqualOperatorBenchmarks>(BenchmarkConfig); _ = BenchmarkRunner.Run<GreaterOperatorVsDoesntEqualOperatorBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<SpanConstructorVsTypecastingPocBenchmarks>(BenchmarkConfig); _ = BenchmarkRunner.Run<SpanConstructorVsTypecastingPocBenchmarks>(BenchmarkConfig);
// ArraySizeLimitPocBenchmarks>(BenchmarkConfig);
//ArraySizeLimitBenchmarks.Run();
} }
static void Main() static void Main()
@@ -15,6 +15,7 @@ namespace Recyclable.Collections
{ {
return CompareResult.XEqualY; return CompareResult.XEqualY;
} }
#pragma warning disable IDE0046 // This is intentional due to better performance - IL contained unnecessary local variable.
else if (x != null && y == null) else if (x != null && y == null)
{ {
return CompareResult.XGreaterThenY; return CompareResult.XGreaterThenY;
@@ -27,6 +28,7 @@ namespace Recyclable.Collections
{ {
return _comparison(x!, y!); return _comparison(x!, y!);
} }
#pragma warning restore IDE0046
} }
} }
} }
@@ -4,7 +4,7 @@ namespace Recyclable.Collections
{ {
internal static class ExceptionExtensions internal static class ExceptionExtensions
{ {
public static void CaptureAndRethrow(this Exception ex) public static void CaptureAndReThrow(this Exception ex)
{ {
ExceptionDispatchInfo.Capture(ex).Throw(); ExceptionDispatchInfo.Capture(ex).Throw();
} }
@@ -1,10 +1,5 @@
// Ignore Spelling: Linq // Ignore Spelling: Linq
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
// The source code was taken from // The source code was taken from
// https://codereview.stackexchange.com/questions/205407/quicksort-without-recursion. // https://codereview.stackexchange.com/questions/205407/quicksort-without-recursion.
+2 -2
View File
@@ -13,12 +13,12 @@ namespace Recyclable.Collections
_memory = memory; _memory = memory;
} }
#pragma warning disable RCS1085 #pragma warning disable IDE0032 // This is intentional due to better performance
private T[] _memory; private T[] _memory;
public T[] Memory { get => _memory; set => _memory = value; } public T[] Memory { get => _memory; set => _memory = value; }
private MemoryBucket<T>? _nextBucket; private MemoryBucket<T>? _nextBucket;
#pragma warning restore IDE0032 // Use auto property
public MemoryBucket<T>? NextBucket { get => _nextBucket; set => _nextBucket = value; } public MemoryBucket<T>? NextBucket { get => _nextBucket; set => _nextBucket = value; }
#pragma warning restore RCS1085
} }
} }
+14 -20
View File
@@ -7,26 +7,20 @@ namespace Recyclable.Collections.Pools
Low Low
} }
internal static class MemoryUtils internal static class MemoryUtils
{ {
public static MemoryPressure GetMemoryPressure() private const double HighPressureThreshold = .90; // Percent of GC memory pressure threshold we consider "high"
{ private const double MediumPressureThreshold = .70; // Percent of GC memory pressure threshold we consider "medium"
const double HighPressureThreshold = .90; // Percent of GC memory pressure threshold we consider "high"
const double MediumPressureThreshold = .70; // Percent of GC memory pressure threshold we consider "medium"
GCMemoryInfo memoryInfo = GC.GetGCMemoryInfo(); public static MemoryPressure GetMemoryPressure()
{
GCMemoryInfo memoryInfo = GC.GetGCMemoryInfo();
if (memoryInfo.MemoryLoadBytes >= memoryInfo.HighMemoryLoadThresholdBytes * HighPressureThreshold) return memoryInfo.MemoryLoadBytes >= memoryInfo.HighMemoryLoadThresholdBytes * HighPressureThreshold
{ ? MemoryPressure.High
return MemoryPressure.High; : memoryInfo.MemoryLoadBytes >= memoryInfo.HighMemoryLoadThresholdBytes * MediumPressureThreshold
} ? MemoryPressure.Medium
: MemoryPressure.Low;
if (memoryInfo.MemoryLoadBytes >= memoryInfo.HighMemoryLoadThresholdBytes * MediumPressureThreshold) }
{ }
return MemoryPressure.Medium;
}
return MemoryPressure.Low;
}
}
} }
@@ -4,7 +4,9 @@ using System.Runtime.CompilerServices;
namespace Recyclable.Collections namespace Recyclable.Collections
{ {
#pragma warning disable IDE1006 // This is intentional naming for the class to show up at the end of IntelliSense list.
public static class zRecyclableListAddRange public static class zRecyclableListAddRange
#pragma warning restore IDE1006 // This is intentional naming for the class to show up at the end of IntelliSense list.
{ {
private static void AddRangeEnumerated<T>(this RecyclableList<T> list, IEnumerable<T> items, int growByCount) private static void AddRangeEnumerated<T>(this RecyclableList<T> list, IEnumerable<T> items, int growByCount)
{ {
@@ -5,7 +5,7 @@ namespace Recyclable.Collections
{ {
internal static class RecyclableListHelpers<T> internal static class RecyclableListHelpers<T>
{ {
private static readonly bool NeedsClearing = !typeof(T).IsValueType; private static readonly bool _needsClearing = !typeof(T).IsValueType;
public static int CalculateIndex(int index, int lowerBound) => index >= 0 ? index + lowerBound : RecyclableDefaults.ItemNotFoundIndex; public static int CalculateIndex(int index, int lowerBound) => index >= 0 ? index + lowerBound : RecyclableDefaults.ItemNotFoundIndex;
@@ -30,7 +30,7 @@ namespace Recyclable.Collections
// Array.Clear(source); // Array.Clear(source);
//} //}
RecyclableArrayPool<T>.ReturnShared(oldMemoryBlock, NeedsClearing); RecyclableArrayPool<T>.ReturnShared(oldMemoryBlock, _needsClearing);
} }
} }
@@ -54,7 +54,7 @@ namespace Recyclable.Collections
//} //}
// If anything, it has been already cleared above, so we don't need to repeat it. // If anything, it has been already cleared above, so we don't need to repeat it.
RecyclableArrayPool<T>.ReturnShared(oldMemoryBlock, NeedsClearing); RecyclableArrayPool<T>.ReturnShared(oldMemoryBlock, _needsClearing);
} }
return newSize; return newSize;
@@ -80,7 +80,7 @@ namespace Recyclable.Collections
//} //}
// If anything, it has been already cleared above, so we don't need to repeat it. // If anything, it has been already cleared above, so we don't need to repeat it.
RecyclableArrayPool<T>.ReturnShared(oldMemoryBlock, NeedsClearing); RecyclableArrayPool<T>.ReturnShared(oldMemoryBlock, _needsClearing);
} }
return newSize; return newSize;
-16
View File
@@ -41,22 +41,6 @@ namespace Recyclable.Collections
} }
} }
public RecyclableList(int initialCapacity, int lowerBound)
{
if (initialCapacity >= RecyclableDefaults.InitialCapacity)
{
_memoryBlock = initialCapacity >= RecyclableDefaults.MinPooledArrayLength
? RecyclableArrayPool<T>.RentShared(checked((int)BitOperations.RoundUpToPowerOf2((uint)initialCapacity)))
: new T[initialCapacity];
_capacity = _memoryBlock.Length;
}
else
{
_memoryBlock = new T[RecyclableDefaults.InitialCapacity];
_capacity = RecyclableDefaults.InitialCapacity;
}
}
public RecyclableList(in Array source) public RecyclableList(in Array source)
{ {
_capacity = RecyclableDefaults.InitialCapacity; _capacity = RecyclableDefaults.InitialCapacity;
@@ -4,7 +4,9 @@ using Recyclable.Collections.Pools;
namespace Recyclable.Collections namespace Recyclable.Collections
{ {
#pragma warning disable IDE1006 // This is intentional naming for the class to show up at the end of IntelliSense list.
public static class zRecyclableLongListAddRange public static class zRecyclableLongListAddRange
#pragma warning restore IDE1006
{ {
private static void AddRangeEnumerated<T>(this RecyclableLongList<T> targetList, IEnumerable<T> items) private static void AddRangeEnumerated<T>(this RecyclableLongList<T> targetList, IEnumerable<T> items)
{ {
@@ -16,7 +16,9 @@ namespace Recyclable.Collections
private readonly RecyclableLongList<T> _list; private readonly RecyclableLongList<T> _list;
#nullable disable #nullable disable
#pragma warning disable IDE0032 // This is intentional due to better performance
private T _current; private T _current;
#pragma warning restore IDE0032
#nullable restore #nullable restore
[Pure] [Pure]
@@ -284,7 +284,7 @@ namespace Recyclable.Collections
try try
{ {
context.Exception.CaptureAndRethrow(); context.Exception.CaptureAndReThrow();
} }
finally finally
{ {
@@ -150,9 +150,7 @@ namespace Recyclable.Collections
{ {
RemoveBlock(Memory._count - 1); RemoveBlock(Memory._count - 1);
} }
#pragma warning disable RCS1075 // We want to try returning as many arrays, as possible, before the list is cleared.
catch (Exception) catch (Exception)
#pragma warning restore RCS1075
{ {
} }
} }
+1 -3
View File
@@ -1,6 +1,4 @@
using System.Diagnostics.Contracts; namespace Recyclable.Collections
namespace Recyclable.Collections
{ {
internal static class ThrowHelper internal static class ThrowHelper
{ {
@@ -1,4 +1,6 @@
using FluentAssertions; // Ignore Spelling: Utils
using FluentAssertions;
using Recyclable.Collections; using Recyclable.Collections;
namespace Recyclable.CollectionsTests namespace Recyclable.CollectionsTests
@@ -1329,13 +1329,13 @@ namespace Recyclable.CollectionsTests
public void RemoveAtShouldClearItemWhenReferenceType(string testCase, IEnumerable<object> testData, int itemsCount, in long[] indexesToRemove) public void RemoveAtShouldClearItemWhenReferenceType(string testCase, IEnumerable<object> testData, int itemsCount, in long[] indexesToRemove)
{ {
// Prepare // Prepare
foreach (int indexToRemove in indexesToRemove) foreach (long indexToRemove in indexesToRemove)
{ {
using var list = new RecyclableList<object>(testData, itemsCount); using var list = new RecyclableList<object>(testData, itemsCount);
_ = list[^1].Should().NotBeNull(); _ = list[^1].Should().NotBeNull();
// Act // Act
list.RemoveAt(indexToRemove); list.RemoveAt((int)indexToRemove);
// Validate // Validate
_ = list[list.Count].Should().BeNull(); _ = list[list.Count].Should().BeNull();
@@ -1391,7 +1391,7 @@ namespace Recyclable.CollectionsTests
public void RemoveShouldClearItemWhenReferenceType(string testCase, IEnumerable<object> testData, int itemsCount, in long[] indexesToRemove) public void RemoveShouldClearItemWhenReferenceType(string testCase, IEnumerable<object> testData, int itemsCount, in long[] indexesToRemove)
{ {
foreach (int indexToRemove in indexesToRemove) foreach (long indexToRemove in indexesToRemove)
{ {
// Prepare // Prepare
using var list = new RecyclableList<object>(testData, itemsCount); using var list = new RecyclableList<object>(testData, itemsCount);
@@ -86,7 +86,7 @@ namespace Recyclable.CollectionsTests
} }
[Fact] [Fact]
public void DequeueShoudRaiseArgumentOutOfRangeWhenNoMoreElementsFound() public void DequeueShouldRaiseArgumentOutOfRangeWhenNoMoreElementsFound()
{ {
// Prepare // Prepare
using var list = new RecyclableQueue<string>(_testData); using var list = new RecyclableQueue<string>(_testData);
@@ -101,7 +101,7 @@ namespace Recyclable.CollectionsTests
} }
[Fact] [Fact]
public void PopShoudRaiseArgumentOutOfRangeWhenNoMoreElementsFound() public void PopShouldRaiseArgumentOutOfRangeWhenNoMoreElementsFound()
{ {
// Prepare // Prepare
using var list = new RecyclableQueue<string>(_testData); using var list = new RecyclableQueue<string>(_testData);