Cleanup.
This commit is contained in:
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--)
|
||||||
{
|
{
|
||||||
|
|||||||
+6
-2
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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,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);
|
||||||
|
|||||||
Reference in new issue
Block a user