diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsArray.cs b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsArray.cs index 542f5a7..e2306f6 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsArray.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsArray.cs @@ -7,7 +7,7 @@ namespace Recyclable.Collections.Benchmarks public void List_AddRangeWhenSourceIsArray() { var data = TestObjects; - var list = new List(); + var list = new List(TestObjectCount); list.AddRange(data); } @@ -21,7 +21,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableList_AddRangeWhenSourceIsArray() { var data = TestObjects; - using var list = new RecyclableList(); + using var list = new RecyclableList(TestObjectCount); list.AddRange(data); } diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsIEnumerable.cs b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsIEnumerable.cs index d16e91c..4da90ff 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsIEnumerable.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsIEnumerable.cs @@ -7,7 +7,7 @@ namespace Recyclable.Collections.Benchmarks public void List_AddRangeWhenSourceIsIEnumerable() { var data = TestObjectsAsIEnumerable; - var list = new List(); + var list = new List(TestObjectCount); list.AddRange(data); } @@ -21,7 +21,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableList_AddRangeWhenSourceIsIEnumerable() { var data = TestObjectsAsIEnumerable; - using var list = new RecyclableList(); + using var list = new RecyclableList(TestObjectCount); list.AddRange(data); } diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsIList.cs b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsIList.cs index 54a660b..d8a10dc 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsIList.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsIList.cs @@ -4,16 +4,22 @@ namespace Recyclable.Collections.Benchmarks { public partial class RecyclableCollectionsBenchmarks { + public void Array_AddRangeWhenSourceIsIList() + { + var data = (IList)TestObjectsAsRecyclableLongList; + data.CopyTo(TestObjects, 0); + } + public void List_AddRangeWhenSourceIsIList() { var data = (IList)TestObjectsAsRecyclableLongList; - var list = new List(); + var list = new List(TestObjectCount); list.AddRange(data); } public void PooledList_AddRangeWhenSourceIsIList() { - var data = (IList)TestObjectsAsPooledList; + var data = (IList)TestObjectsAsRecyclableLongList; using var list = new PooledList(capacity: TestObjectCount, ClearMode.Auto); list.AddRange(data); } @@ -21,7 +27,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableList_AddRangeWhenSourceIsIList() { var data = (IList)TestObjectsAsRecyclableLongList; - using var list = new RecyclableList(); + using var list = new RecyclableList(TestObjectCount); list.AddRange(data); } diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsList.cs b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsList.cs index 580ebbb..3cdb696 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsList.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsList.cs @@ -4,10 +4,16 @@ namespace Recyclable.Collections.Benchmarks { public partial class RecyclableCollectionsBenchmarks { + public void Array_AddRangeWhenSourceIsList() + { + var data = TestObjectsAsList; + data.CopyTo(TestObjects, 0); + } + public void List_AddRangeWhenSourceIsList() { var data = TestObjectsAsList; - var list = new List(); + var list = new List(TestObjectCount); list.AddRange(data); } @@ -21,7 +27,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableList_AddRangeWhenSourceIsList() { var data = TestObjectsAsList; - using var list = new RecyclableList(); + using var list = new RecyclableList(TestObjectCount); list.AddRange(data); } diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsSameType.cs b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsSameType.cs index 9f28def..e2c68bf 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsSameType.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsSameType.cs @@ -14,11 +14,11 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableList_AddRangeWhenSourceIsRecyclableList() { var data = TestObjectsAsRecyclableList; - using var list = new RecyclableList(); + using var list = new RecyclableList(TestObjectCount); list.AddRange(data); } - public void RecyclableLongList_AddRangeWhenSourceIsRecyclableList() + public void RecyclableLongList_AddRangeWhenSourceIsRecyclableLongList() { var data = TestObjectsAsRecyclableList; using var list = new RecyclableLongList(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/RecyclableCollections.Benchmarks.cs b/Recyclable.Collections.Benchmarks/Benchmarks/RecyclableCollections.Benchmarks.cs index 7f05752..f200fe1 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/RecyclableCollections.Benchmarks.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/RecyclableCollections.Benchmarks.cs @@ -69,8 +69,21 @@ namespace Recyclable.Collections.Benchmarks public override RecyclableCollectionsBenchmarkSource DataType { get => base.DataType; set => base.DataType = value; } protected override Action? GetTestMethod(RecyclableCollectionsBenchmarkSource benchmarkType) - => (Action?) GetType().GetMethod($"{benchmarkType}_{TestCase}", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public)?.CreateDelegate(typeof(Action), this) - ?? (Action?)GetType().GetMethod($"{benchmarkType}_AddRangeWhenSourceIs{benchmarkType}", BindingFlags.Instance | BindingFlags.Public)?.CreateDelegate(typeof(Action), this) - ?? throw new InvalidOperationException($"Method {benchmarkType}_{TestCase} not found in class {GetType().FullName}"); + => TestCase switch + { + RecyclableCollectionsBenchmarkType.AddRangeWhenSourceIsSameType => (Action?)GetType().GetMethod($"{benchmarkType}_AddRangeWhenSourceIs{benchmarkType}", BindingFlags.Instance | BindingFlags.Public)?.CreateDelegate(typeof(Action), this), + _ => (Action?) GetType().GetMethod($"{benchmarkType}_{TestCase}", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public)?.CreateDelegate(typeof(Action), this) ?? throw new InvalidOperationException($"Method {benchmarkType}_{TestCase} not found in class {GetType().FullName}") + }; + + public override void Setup() + { + base.Setup(); + switch(TestCase) + { + case RecyclableCollectionsBenchmarkType.AddRangeWhenSourceIsIList: + PrepareData(RecyclableCollectionsBenchmarkSource.RecyclableLongList); + break; + } + } } } diff --git a/Recyclable.Collections.Benchmarks/Program.cs b/Recyclable.Collections.Benchmarks/Program.cs index a604d56..504d2b6 100644 --- a/Recyclable.Collections.Benchmarks/Program.cs +++ b/Recyclable.Collections.Benchmarks/Program.cs @@ -38,20 +38,20 @@ namespace Recyclable.Collections.Benchmarks benchmark.Cleanup(); } - static void RunPocBenchmarks() - { - _ = BenchmarkRunner.Run(BenchmarkConfig); - _ = BenchmarkRunner.Run(BenchmarkConfig); - _ = BenchmarkRunner.Run(BenchmarkConfig); - _ = BenchmarkRunner.Run(BenchmarkConfig); - _ = BenchmarkRunner.Run(BenchmarkConfig); - _ = BenchmarkRunner.Run(BenchmarkConfig); - _ = BenchmarkRunner.Run(BenchmarkConfig); - _ = BenchmarkRunner.Run(BenchmarkConfig); - _ = BenchmarkRunner.Run(BenchmarkConfig); - _ = BenchmarkRunner.Run(BenchmarkConfig); - // ArraySizeLimitPocBenchmarks>(BenchmarkConfig); - } + static void RunPocBenchmarks() + { + _ = BenchmarkRunner.Run(BenchmarkConfig); + _ = BenchmarkRunner.Run(BenchmarkConfig); + _ = BenchmarkRunner.Run(BenchmarkConfig); + _ = BenchmarkRunner.Run(BenchmarkConfig); + _ = BenchmarkRunner.Run(BenchmarkConfig); + _ = BenchmarkRunner.Run(BenchmarkConfig); + _ = BenchmarkRunner.Run(BenchmarkConfig); + _ = BenchmarkRunner.Run(BenchmarkConfig); + _ = BenchmarkRunner.Run(BenchmarkConfig); + _ = BenchmarkRunner.Run(BenchmarkConfig); + // ArraySizeLimitPocBenchmarks>(BenchmarkConfig); + } static void Main() { diff --git a/Recyclable.Collections.Benchmarks/Recyclable.Collections.Benchmarks.csproj b/Recyclable.Collections.Benchmarks/Recyclable.Collections.Benchmarks.csproj index 7f853f9..0276c8c 100644 --- a/Recyclable.Collections.Benchmarks/Recyclable.Collections.Benchmarks.csproj +++ b/Recyclable.Collections.Benchmarks/Recyclable.Collections.Benchmarks.csproj @@ -7,7 +7,7 @@ enable enable AnyCPU;x64 - Program + Recyclable.Collections.Benchmarks.Program