RecyclableLongList.BinarySearch implemented. Various performance improvements & fixes in RecyclableList.BinarySearch. Benchmarks & Tests extended.
This commit is contained in:
1 parent
393685f061
commit
1f7603fe08
15 files changed
+756
-172
No files matched your search
+39
@@ -0,0 +1,39 @@
|
||||
using Collections.Benchmarks.Core;
|
||||
|
||||
namespace Recyclable.Collections.Compatibility.List.Benchmarks
|
||||
{
|
||||
public class BinarySearchValueHigherThanFirstItemBenchmarks : RecyclableCollectionsCompatibilityListBenchmarks
|
||||
{
|
||||
public override string MethodNameSuffix => "_BinarySearch_ValueHigherThanFirstItem";
|
||||
|
||||
public void Array_BinarySearch_ValueHigherThanFirstItem()
|
||||
{
|
||||
var list = TestObjects;
|
||||
DoNothing.With(Array.BinarySearch(list, int.MaxValue));
|
||||
}
|
||||
|
||||
public void List_BinarySearch_ValueHigherThanFirstItem()
|
||||
{
|
||||
var list = TestObjectsAsList;
|
||||
DoNothing.With(list.BinarySearch(int.MaxValue));
|
||||
}
|
||||
|
||||
public void PooledList_BinarySearch_ValueHigherThanFirstItem()
|
||||
{
|
||||
var list = TestObjectsAsPooledList;
|
||||
DoNothing.With(list.BinarySearch(int.MaxValue));
|
||||
}
|
||||
|
||||
public void RecyclableList_BinarySearch_ValueHigherThanFirstItem()
|
||||
{
|
||||
var list = TestObjectsAsRecyclableList;
|
||||
DoNothing.With(list.BinarySearch(int.MaxValue));
|
||||
}
|
||||
|
||||
public void RecyclableLongList_BinarySearch_ValueHigherThanFirstItem()
|
||||
{
|
||||
var list = TestObjectsAsRecyclableLongList;
|
||||
DoNothing.With(list.BinarySearch(int.MaxValue));
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
-11
@@ -54,16 +54,16 @@ namespace Recyclable.Collections.Compatibility.List.Benchmarks
|
||||
}
|
||||
}
|
||||
|
||||
// public void RecyclableLongList_BinarySearch()
|
||||
// {
|
||||
// var data = TestObjects;
|
||||
// var list = TestObjectsAsRecyclableLongList;
|
||||
// var dataCount = TestObjectCountForSlowMethods;
|
||||
// for (var i = 0; i < dataCount; i++)
|
||||
// {
|
||||
// DoNothing(list.BinarySearch(data[i]));
|
||||
// DoNothing(list.BinarySearch(data[^(i + 1)]));
|
||||
// }
|
||||
// }
|
||||
public void RecyclableLongList_BinarySearch()
|
||||
{
|
||||
var data = TestObjects;
|
||||
var list = TestObjectsAsRecyclableLongList;
|
||||
var dataCount = TestObjectCountForSlowMethods;
|
||||
for (var i = 0; i < dataCount; i++)
|
||||
{
|
||||
DoNothing.With(list.BinarySearch(data[i]));
|
||||
DoNothing.With(list.BinarySearch(data[^(i + 1)]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
using Collections.Benchmarks.Core;
|
||||
|
||||
namespace Recyclable.Collections.Compatibility.List.Benchmarks
|
||||
{
|
||||
public class BinarySearchBenchmarksBestAndWorstCasesWhenConstrainedRange : RecyclableCollectionsCompatibilityListBenchmarks
|
||||
{
|
||||
public override string MethodNameSuffix => "_BinarySearchWhenConstrainedRange";
|
||||
private readonly static Comparer<int> _comparer = Comparer<int>.Default;
|
||||
|
||||
public void Array_BinarySearchWhenConstrainedRange()
|
||||
{
|
||||
var data = TestObjects;
|
||||
var list = TestObjects;
|
||||
var dataCount = TestObjectCountForSlowMethods;
|
||||
for (var i = 0; i < dataCount; i++)
|
||||
{
|
||||
DoNothing.With(Array.BinarySearch(list, 0, dataCount, data[i], _comparer));
|
||||
DoNothing.With(Array.BinarySearch(list, 0, dataCount, data[^(i + 1)], _comparer));
|
||||
}
|
||||
}
|
||||
|
||||
public void List_BinarySearchWhenConstrainedRange()
|
||||
{
|
||||
var data = TestObjects;
|
||||
var list = TestObjectsAsList;
|
||||
var dataCount = TestObjectCountForSlowMethods;
|
||||
for (var i = 0; i < dataCount; i++)
|
||||
{
|
||||
DoNothing.With(list.BinarySearch(0, dataCount, data[i], _comparer));
|
||||
DoNothing.With(list.BinarySearch(0, dataCount, data[^(i + 1)], _comparer));
|
||||
}
|
||||
}
|
||||
|
||||
public void PooledList_BinarySearchWhenConstrainedRange()
|
||||
{
|
||||
var data = TestObjects;
|
||||
var list = TestObjectsAsPooledList;
|
||||
var dataCount = TestObjectCountForSlowMethods;
|
||||
for (var i = 0; i < dataCount; i++)
|
||||
{
|
||||
DoNothing.With(list.BinarySearch(0, dataCount, data[i], _comparer));
|
||||
DoNothing.With(list.BinarySearch(0, dataCount, data[^(i + 1)], _comparer));
|
||||
}
|
||||
}
|
||||
|
||||
public void RecyclableList_BinarySearchWhenConstrainedRange()
|
||||
{
|
||||
var data = TestObjects;
|
||||
var list = TestObjectsAsRecyclableList;
|
||||
var dataCount = TestObjectCountForSlowMethods;
|
||||
for (var i = 0; i < dataCount; i++)
|
||||
{
|
||||
DoNothing.With(list.BinarySearch(0, dataCount, data[i], _comparer));
|
||||
DoNothing.With(list.BinarySearch(0, dataCount, data[^(i + 1)], _comparer));
|
||||
}
|
||||
}
|
||||
|
||||
public void RecyclableLongList_BinarySearchWhenConstrainedRange()
|
||||
{
|
||||
var data = TestObjects;
|
||||
var list = TestObjectsAsRecyclableLongList;
|
||||
var dataCount = TestObjectCountForSlowMethods;
|
||||
for (var i = 0; i < dataCount; i++)
|
||||
{
|
||||
DoNothing.With(list.BinarySearch(0, dataCount, data[i], _comparer));
|
||||
DoNothing.With(list.BinarySearch(0, dataCount, data[^(i + 1)], _comparer));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
using Collections.Benchmarks.Core;
|
||||
|
||||
namespace Recyclable.Collections.Compatibility.List.Benchmarks
|
||||
{
|
||||
public class BinarySearchValueLowerThanFirstItemBenchmarks : RecyclableCollectionsCompatibilityListBenchmarks
|
||||
{
|
||||
public override string MethodNameSuffix => "_BinarySearch_ValueLowerThanFirstItem";
|
||||
|
||||
public void Array_BinarySearch_ValueLowerThanFirstItem()
|
||||
{
|
||||
var list = TestObjects;
|
||||
DoNothing.With(Array.BinarySearch(list, -1));
|
||||
}
|
||||
|
||||
public void List_BinarySearch_ValueLowerThanFirstItem()
|
||||
{
|
||||
var list = TestObjectsAsList;
|
||||
DoNothing.With(list.BinarySearch(-1));
|
||||
}
|
||||
|
||||
public void PooledList_BinarySearch_ValueLowerThanFirstItem()
|
||||
{
|
||||
var list = TestObjectsAsPooledList;
|
||||
DoNothing.With(list.BinarySearch(-1));
|
||||
}
|
||||
|
||||
public void RecyclableList_BinarySearch_ValueLowerThanFirstItem()
|
||||
{
|
||||
var list = TestObjectsAsRecyclableList;
|
||||
DoNothing.With(list.BinarySearch(-1));
|
||||
}
|
||||
|
||||
public void RecyclableLongList_BinarySearch_ValueLowerThanFirstItem()
|
||||
{
|
||||
var list = TestObjectsAsRecyclableLongList;
|
||||
DoNothing.With(list.BinarySearch(-1));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,13 +12,16 @@ namespace Recyclable.Collections.Compatibility.List.Benchmarks
|
||||
{
|
||||
BenchmarkRunner.Run(new[]
|
||||
{
|
||||
typeof(BinarySearchBenchmarks),
|
||||
typeof(ConvertAllBenchmarks),
|
||||
typeof(ExistsBenchmarks),
|
||||
typeof(FindBenchmarks),
|
||||
typeof(FindAllBenchmarks),
|
||||
typeof(FindLastBenchmarks),
|
||||
typeof(FindLastIndexBenchmarks)
|
||||
//typeof(BinarySearchBenchmarks),
|
||||
typeof(BinarySearchBenchmarksBestAndWorstCasesWhenConstrainedRange),
|
||||
//typeof(BinarySearchValueLowerThanFirstItemBenchmarks),
|
||||
//typeof(BinarySearchValueHigherThanFirstItemBenchmarks),
|
||||
//typeof(ConvertAllBenchmarks),
|
||||
//typeof(ExistsBenchmarks),
|
||||
//typeof(FindBenchmarks),
|
||||
//typeof(FindAllBenchmarks),
|
||||
//typeof(FindLastBenchmarks),
|
||||
//typeof(FindLastIndexBenchmarks)
|
||||
}, BenchmarkConfig);
|
||||
}
|
||||
}
|
||||
|
||||
+4
-3
@@ -10,9 +10,10 @@ namespace Recyclable.Collections.Compatibility.List.Benchmarks
|
||||
public override CollectionsBenchmarksSource BaseDataType { get => base.BaseDataType; set => base.BaseDataType = value; }
|
||||
|
||||
[Params(
|
||||
CollectionsBenchmarksSource.List,
|
||||
CollectionsBenchmarksSource.PooledList,
|
||||
CollectionsBenchmarksSource.RecyclableList
|
||||
//CollectionsBenchmarksSource.List,
|
||||
//CollectionsBenchmarksSource.PooledList,
|
||||
//CollectionsBenchmarksSource.RecyclableList,
|
||||
CollectionsBenchmarksSource.RecyclableLongList
|
||||
)]
|
||||
public override CollectionsBenchmarksSource DataType { get => base.DataType; set => base.DataType = value; }
|
||||
|
||||
|
||||
Reference in new issue
Block a user