From 064b3f0cb0f598cd6db46db09f462c7ec857b16d Mon Sep 17 00:00:00 2001 From: mlemanczyk Date: Fri, 7 Apr 2023 23:34:43 +0200 Subject: [PATCH] .Remove & .RemoveAt benchmarks added. --- .../RecyclableCollectionsBenchmarks.List.cs | 80 ++++++++++++---- ...yclableCollectionsBenchmarks.PooledList.cs | 82 ++++++++++++---- ...llectionsBenchmarks.RecyclableArrayList.cs | 86 ++++++++++++++--- ...bleCollectionsBenchmarks.RecyclableList.cs | 96 ++++++++++++++----- 4 files changed, 274 insertions(+), 70 deletions(-) diff --git a/Recyclable.Collections.Benchmarks/RecyclableCollectionsBenchmarks.List.cs b/Recyclable.Collections.Benchmarks/RecyclableCollectionsBenchmarks.List.cs index de65dc4..91ca294 100644 --- a/Recyclable.Collections.Benchmarks/RecyclableCollectionsBenchmarks.List.cs +++ b/Recyclable.Collections.Benchmarks/RecyclableCollectionsBenchmarks.List.cs @@ -4,21 +4,21 @@ namespace Recyclable.Collections.Benchmarks { public partial class RecyclableCollectionsBenchmarks : BenchmarkBase { - [Benchmark(Baseline = false)] + //[Benchmark(Baseline = false)] public void List_Create() { var list = new List(); DoNothing(list); } - [Benchmark(Baseline = false)] + //[Benchmark(Baseline = false)] public void List_Create_WithCapacity() { var list = new List(TestObjectCount); DoNothing(list); } - [Benchmark(Baseline = false)] + //[Benchmark(Baseline = false)] public void List_Add() { var data = TestObjects; @@ -30,7 +30,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark(Baseline = false)] + //[Benchmark(Baseline = false)] public void List_Add_WithCapacity() { var data = TestObjects; @@ -42,7 +42,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark(Baseline = false)] + //[Benchmark(Baseline = false)] public void List_AddRangeWhenSourceIsArray() { var data = TestObjects; @@ -50,7 +50,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark(Baseline = false)] + //[Benchmark(Baseline = false)] public void List_AddRangeWhenSourceIsList() { var data = TestObjectsAsList; @@ -58,7 +58,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark(Baseline = false)] + //[Benchmark(Baseline = false)] public void List_AddRangeWhenSourceIsIList() { var data = (IList)TestObjectsAsRecyclableList; @@ -66,7 +66,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark(Baseline = false)] + //[Benchmark(Baseline = false)] public void List_AddRangeWhenSourceIsIEnumerable() { var data = TestObjectsAsIEnumerable; @@ -74,7 +74,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark(Baseline = false)] + //[Benchmark(Baseline = false)] public void List_AddRange_WithCapacity() { var data = TestObjects; @@ -83,7 +83,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark(Baseline = false)] + //[Benchmark(Baseline = false)] public void List_SetItem() { var data = TestObjectsAsList; @@ -94,7 +94,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark(Baseline = false)] + //[Benchmark(Baseline = false)] public void List_GetItem() { var data = TestObjectsAsList; @@ -105,14 +105,14 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark(Baseline = false)] + //[Benchmark(Baseline = false)] public void List_Count() { var data = TestObjectsAsList; DoNothing(data.Count); } - [Benchmark(Baseline = false)] + //[Benchmark(Baseline = false)] public void List_Contains_FirstItems() { var data = TestObjects; @@ -124,7 +124,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark(Baseline = false)] + //[Benchmark(Baseline = false)] public void List_Contains_LastItems() { var data = TestObjects; @@ -136,7 +136,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark(Baseline = false)] + //[Benchmark(Baseline = false)] public void List_IndexOf_FirstItems() { var data = TestObjects; @@ -148,7 +148,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark(Baseline = false)] + //[Benchmark(Baseline = false)] public void List_IndexOf_LastItems() { var data = TestObjects; @@ -159,5 +159,53 @@ namespace Recyclable.Collections.Benchmarks DoNothing(list.IndexOf(data[^(i + 1)])); } } + + //[Benchmark(Baseline = true)] + public void List_RemoveAt_FirstItems() + { + var data = TestObjects; + var list = new List(data); + var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; + for (var i = 0; i < dataCount; i++) + { + list.RemoveAt(i); + } + } + + //[Benchmark(Baseline = false)] + public void List_RemoveAt_LastItems() + { + var data = TestObjects; + var list = new List(data); + var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; + for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) + { + list.RemoveAt(i); + } + } + + //[Benchmark(Baseline = false)] + public void List_Remove_FirstItems() + { + var data = TestObjects; + var list = new List(data); + var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; + for (var i = 0; i < dataCount; i++) + { + DoNothing(list.Remove(data[i])); + } + } + + //[Benchmark(Baseline = false)] + public void List_Remove_LastItems() + { + var data = TestObjects; + var list = new List(data); + var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; + for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) + { + DoNothing(list.Remove(data[i])); + } + } } } diff --git a/Recyclable.Collections.Benchmarks/RecyclableCollectionsBenchmarks.PooledList.cs b/Recyclable.Collections.Benchmarks/RecyclableCollectionsBenchmarks.PooledList.cs index d97de14..04243ae 100644 --- a/Recyclable.Collections.Benchmarks/RecyclableCollectionsBenchmarks.PooledList.cs +++ b/Recyclable.Collections.Benchmarks/RecyclableCollectionsBenchmarks.PooledList.cs @@ -5,21 +5,21 @@ namespace Recyclable.Collections.Benchmarks { public partial class RecyclableCollectionsBenchmarks : BenchmarkBase { - [Benchmark] + //[Benchmark] public void PooledList_Create() { using var list = new PooledList(); DoNothing(list); } - [Benchmark] + //[Benchmark] public void PooledList_Create_WithCapacity() { using var list = new PooledList(capacity: TestObjectCount); DoNothing(list); } - [Benchmark] + //[Benchmark] public void PooledList_Add() { var data = TestObjects; @@ -31,7 +31,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void PooledList_Add_WithCapacity() { var data = TestObjects; @@ -43,7 +43,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void PooledList_AddRangeWhenSourceIsArray() { var data = TestObjects; @@ -51,7 +51,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark] + //[Benchmark] public void PooledList_AddRangeWhenSourceIsList() { var data = TestObjectsAsList; @@ -59,7 +59,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark] + //[Benchmark] public void PooledList_AddRangeWhenSourceIsIList() { var data = (IList)TestObjectsAsPooledList; @@ -67,7 +67,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark] + //[Benchmark] public void PooledList_AddRangeWhenSourceIsIEnumerable() { var data = TestObjectsAsIEnumerable; @@ -75,7 +75,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark] + //[Benchmark] public void PooledList_AddRangeWhenSourceIsPooledList() { var data = TestObjectsAsPooledList; @@ -83,7 +83,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark] + //[Benchmark] public void PooledList_AddRange_WithCapacity() { var data = TestObjects; @@ -92,7 +92,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark] + //[Benchmark] public void PooledList_GetItem() { var data = _testPooledList; @@ -103,7 +103,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void PooledList_SetItem() { var data = _testPooledList; @@ -114,14 +114,14 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void PooledList_Count() { var data = _testPooledList; DoNothing(data.Count); } - [Benchmark] + //[Benchmark] public void PooledList_Contains_FirstItems() { var data = TestObjects; @@ -133,7 +133,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void PooledList_Contains_LastItems() { var data = TestObjects; @@ -145,7 +145,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void PooledList_IndexOf_FirstItems() { var data = TestObjects; @@ -157,7 +157,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void PooledList_IndexOf_LastItems() { var data = TestObjects; @@ -168,5 +168,53 @@ namespace Recyclable.Collections.Benchmarks DoNothing(list.IndexOf(data[^(i + 1)])); } } + + //[Benchmark(Baseline = true)] + public void PooledList_Remove_FirstItems() + { + var data = TestObjects; + using var list = new PooledList(data); + var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; + for (var i = 0; i < dataCount; i++) + { + DoNothing(list.Remove(data[i])); + } + } + + //[Benchmark(Baseline = true)] + public void PooledList_Remove_LastItems() + { + var data = TestObjects; + using var list = new PooledList(data); + var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; + for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) + { + DoNothing(list.Remove(data[i])); + } + } + + //[Benchmark(Baseline = true)] + public void PooledList_RemoveAt_FirstItems() + { + var data = TestObjects; + using var list = new PooledList(data); + var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; + for (var i = 0; i < dataCount; i++) + { + list.RemoveAt(i); + } + } + + [Benchmark(Baseline = true)] + public void PooledList_RemoveAt_LastItems() + { + var data = TestObjects; + using var list = new PooledList(data); + var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; + for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) + { + list.RemoveAt(i); + } + } } } diff --git a/Recyclable.Collections.Benchmarks/RecyclableCollectionsBenchmarks.RecyclableArrayList.cs b/Recyclable.Collections.Benchmarks/RecyclableCollectionsBenchmarks.RecyclableArrayList.cs index a6cbad8..b5bc74a 100644 --- a/Recyclable.Collections.Benchmarks/RecyclableCollectionsBenchmarks.RecyclableArrayList.cs +++ b/Recyclable.Collections.Benchmarks/RecyclableCollectionsBenchmarks.RecyclableArrayList.cs @@ -4,21 +4,21 @@ namespace Recyclable.Collections.Benchmarks { public partial class RecyclableCollectionsBenchmarks : BenchmarkBase { - [Benchmark] + //[Benchmark] public void RecyclableArrayList_Create() { using var list = new RecyclableArrayList(); DoNothing(list); } - [Benchmark] + //[Benchmark] public void RecyclableArrayList_Create_WithCapacity() { using var list = new RecyclableArrayList(TestObjectCount); DoNothing(list); } - [Benchmark] + //[Benchmark] public void RecyclableArrayList_Add() { var data = TestObjects; @@ -30,7 +30,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void RecyclableArrayList_Add_WithCapacity() { var data = TestObjects; @@ -42,7 +42,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void RecyclableArrayList_AddRangeWhenSourceIsArray() { var data = TestObjects; @@ -50,7 +50,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark] + //[Benchmark] public void RecyclableArrayList_AddRangeWhenSourceIsList() { var data = TestObjectsAsList; @@ -58,7 +58,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark] + //[Benchmark] public void RecyclableArrayList_AddRangeWhenSourceIsIList() { var data = (IList)TestObjectsAsRecyclableList; @@ -66,7 +66,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark] + //[Benchmark] public void RecyclableArrayList_AddRangeWhenSourceIsIEnumerable() { var data = TestObjectsAsIEnumerable; @@ -74,7 +74,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark] + //[Benchmark] public void RecyclableArrayList_AddRangeWhenSourceIsRecyclableArrayList() { var data = TestObjectsAsRecyclableArrayList; @@ -82,7 +82,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark] + //[Benchmark] public void RecyclableArrayList_AddRange_WithCapacity() { var data = TestObjects; @@ -91,7 +91,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark] + //[Benchmark] public void RecyclableArrayList_SetItem() { var data = TestObjectsAsRecyclableArrayList; @@ -102,7 +102,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void RecyclableArrayList_GetItem() { var data = TestObjectsAsRecyclableArrayList; @@ -113,11 +113,71 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void RecyclableArrayList_Count() { var data = TestObjectsAsRecyclableArrayList; DoNothing(data.Count); } + + //[Benchmark] + public void RecyclableArrayList_IndexOf_FirstItems() + { + var data = TestObjects; + var list = TestObjectsAsRecyclableArrayList; + var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; + for (var i = 0; i < dataCount; i++) + { + DoNothing(list.IndexOf(data[i])); + } + } + + //[Benchmark(Baseline = false)] + public void RecyclableArrayList_Remove_FirstItems() + { + var data = TestObjects; + using var list = new RecyclableArrayList(data); + var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; + for (var i = 0; i < dataCount; i++) + { + DoNothing(list.Remove(data[i])); + } + } + + //[Benchmark(Baseline = false)] + public void RecyclableArrayList_Remove_LastItems() + { + var data = TestObjects; + using var list = new RecyclableArrayList(data); + var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; + for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) + { + DoNothing(list.Remove(data[i])); + } + } + + //[Benchmark(Baseline = false)] + public void RecyclableArrayList_RemoveAt_FirstItems() + { + var data = TestObjects; + using var list = new RecyclableArrayList(data); + var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; + for (var i = 0; i < dataCount; i++) + { + list.RemoveAt(i); + } + } + + [Benchmark(Baseline = false)] + public void RecyclableArrayList_RemoveAt_LastItems() + { + var data = TestObjects; + using var list = new RecyclableArrayList(data); + var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; + for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) + { + list.RemoveAt(i); + } + } } } diff --git a/Recyclable.Collections.Benchmarks/RecyclableCollectionsBenchmarks.RecyclableList.cs b/Recyclable.Collections.Benchmarks/RecyclableCollectionsBenchmarks.RecyclableList.cs index 3d4feaf..2dc5e42 100644 --- a/Recyclable.Collections.Benchmarks/RecyclableCollectionsBenchmarks.RecyclableList.cs +++ b/Recyclable.Collections.Benchmarks/RecyclableCollectionsBenchmarks.RecyclableList.cs @@ -4,21 +4,21 @@ namespace Recyclable.Collections.Benchmarks { public partial class RecyclableCollectionsBenchmarks : BenchmarkBase { - [Benchmark] + //[Benchmark] public void RecyclableList_Create() { using var list = new RecyclableList(); DoNothing(list); } - [Benchmark] + //[Benchmark] public void RecyclableList_Create_WithCapacity() { using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); DoNothing(list); } - [Benchmark] + //[Benchmark] public void RecyclableList_Add() { var data = TestObjects; @@ -30,7 +30,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void RecyclableList_Add_WithCapacity() { var data = TestObjects; @@ -42,7 +42,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void RecyclableList_AddRangeWhenSourceIsArray() { var data = TestObjects; @@ -50,7 +50,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark] + //[Benchmark] public void RecyclableList_AddRangeWhenSourceIsList() { var data = TestObjectsAsList; @@ -58,7 +58,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark] + //[Benchmark] public void RecyclableList_AddRangeWhenSourceIsIList() { var data = (IList)TestObjectsAsRecyclableList; @@ -66,7 +66,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark] + //[Benchmark] public void RecyclableList_AddRangeWhenSourceIsIEnumerable() { var data = TestObjectsAsIEnumerable; @@ -74,7 +74,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark] + //[Benchmark] public void RecyclableList_AddRangeWhenSourceIsRecyclableArrayList() { var data = TestObjectsAsRecyclableArrayList; @@ -82,7 +82,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark] + //[Benchmark] public void RecyclableList_AddRange_WithCapacity() { var data = TestObjects; @@ -91,7 +91,7 @@ namespace Recyclable.Collections.Benchmarks list.AddRange(data); } - [Benchmark] + //[Benchmark] public void RecyclableList_GetItem() { var data = _testRecyclableList; @@ -102,7 +102,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void RecyclableList_GetItem_AsSpan() { var data = _testRecyclableList; @@ -131,7 +131,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void RecyclableList_GetItem_AsArray() { var data = _testRecyclableList; @@ -160,7 +160,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void RecyclableList_GetItem_AsForEach() { var data = _testRecyclableList; @@ -172,7 +172,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void RecyclableList_GetItem_AsWhile() { var data = _testRecyclableList; @@ -214,7 +214,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void RecyclableList_SetItem() { var data = _testRecyclableList; @@ -225,21 +225,21 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void RecyclableList_Count() { var data = _testRecyclableList; DoNothing(data.Count); } - [Benchmark] + //[Benchmark] public void RecyclableList_LongCount() { var data = _testRecyclableList; DoNothing(data.LongCount); } - [Benchmark] + //[Benchmark] public void RecyclableList_Contains_FirstItems() { var data = TestObjects; @@ -251,7 +251,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void RecyclableList_Contains_LastItems() { var data = TestObjects; @@ -263,7 +263,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void RecyclableList_IndexOf_FirstItems() { var data = TestObjects; @@ -275,7 +275,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void RecyclableList_IndexOf_LastItems() { var data = TestObjects; @@ -287,7 +287,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void RecyclableList_LongIndexOf_FirstItems() { var data = TestObjects; @@ -299,7 +299,7 @@ namespace Recyclable.Collections.Benchmarks } } - [Benchmark] + //[Benchmark] public void RecyclableList_LongIndexOf_LastItems() { var data = TestObjects; @@ -310,5 +310,53 @@ namespace Recyclable.Collections.Benchmarks DoNothing(list.LongIndexOf(data[^(i + 1)])); } } + + //[Benchmark(Baseline = false)] + public void RecyclableList_Remove_FirstItems() + { + var data = TestObjects; + using var list = new RecyclableList(data); + var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; + for (var i = 0; i < dataCount; i++) + { + DoNothing(list.Remove(data[i])); + } + } + + //[Benchmark(Baseline = false)] + public void RecyclableList_Remove_LastItems() + { + var data = TestObjects; + using var list = new RecyclableList(data); + var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; + for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) + { + DoNothing(list.Remove(data[i])); + } + } + + //[Benchmark(Baseline = false)] + public void RecyclableList_RemoveAt_FirstItems() + { + var data = TestObjects; + using var list = new RecyclableList(data); + var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; + for (var i = 0; i < dataCount; i++) + { + list.RemoveAt(i); + } + } + + [Benchmark(Baseline = false)] + public void RecyclableList_RemoveAt_LastItems() + { + var data = TestObjects; + using var list = new RecyclableList(data); + var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; + for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) + { + list.RemoveAt(i); + } + } } }