using BenchmarkDotNet.Attributes; namespace Recyclable.Collections.Benchmarks { public partial class RecyclableCollectionsBenchmarks : BenchmarkBase { private RecyclableArrayList _testRecyclableArrayList; [GlobalSetup] public void Setup() { Console.WriteLine("******* GLOBAL SETUP RAISED *******"); _testObjects = Enumerable.Range(1, TestObjectCount).Select(x => new object()).ToArray(); _testRecyclableArrayList = new(TestObjects, TestObjectCount); _testRecyclableList = new(TestObjects, TestObjectCount); _testArray = TestObjects.ToArray(); _testObjectsAsList = TestObjects.ToList(); _testObjectsAsRecyclableArrayList = TestObjects.ToRecyclableArrayList(); } [GlobalCleanup] public void Cleanup() { Console.WriteLine("******* GLOBAL CLEANUP *******"); _testRecyclableArrayList?.Dispose(); _testRecyclableList?.Dispose(); TestObjectsAsRecyclableArrayList?.Dispose(); _testObjectsAsRecyclableArrayList = default; _testObjectsAsList = default; _testObjects = default; } [Benchmark] public void RecyclableArrayList_Create() { using var list = new RecyclableArrayList(); DoNothing(list); } [Benchmark] public void RecyclableArrayList_Create_WithCapacity() { using var list = new RecyclableArrayList(TestObjectCount); DoNothing(list); } [Benchmark] public void RecyclableArrayList_Add() { var data = TestObjects; var dataCount = TestObjectCount; using var list = new RecyclableArrayList(); for (var i = 0; i < dataCount; i++) { list.Add(data[i]); } } [Benchmark] public void RecyclableArrayList_Add_WithCapacity() { var data = TestObjects; var dataCount = TestObjectCount; using var list = new RecyclableArrayList(dataCount); for (var i = 0; i < dataCount; i++) { list.Add(data[i]); } } //[Benchmark] public void RecyclableArrayList_AddRangeWhenSourceIsArray() { var data = TestObjects; using var list = new RecyclableArrayList(); list.AddRange(data); } //[Benchmark] public void RecyclableArrayList_AddRangeWhenSourceIsList() { var data = TestObjectsAsList; using var list = new RecyclableArrayList(); list.AddRange(data); } //[Benchmark] public void RecyclableArrayList_AddRangeWhenSourceIsIList() { var data = (IList)TestObjectsAsList; using var list = new RecyclableArrayList(); list.AddRange(data); } //[Benchmark] public void RecyclableArrayList_AddRangeWhenSourceIsIEnumerable() { var data = TestObjectsAsIEnumerable; using var list = new RecyclableArrayList(); list.AddRange(data); } //[Benchmark] public void RecyclableArrayList_AddRangeWhenSourceIsRecyclableArrayList() { var data = TestObjectsAsRecyclableArrayList; using var list = new RecyclableArrayList(); list.AddRange(data); } //[Benchmark] public void RecyclableArrayList_AddRange_WithCapacity() { var data = TestObjects; var dataCount = TestObjectCount; using var list = new RecyclableArrayList(dataCount); list.AddRange(data); } //[Benchmark] public void RecyclableArrayList_SetItem() { var data = TestObjectsAsRecyclableArrayList; var dataCount = TestObjectCount; for (var i = 0; i < dataCount; i++) { data[i] = TestObjects[i]; } } //[Benchmark] public void RecyclableArrayList_GetItem() { var data = TestObjectsAsRecyclableArrayList; var dataCount = TestObjectCount; for (var i = 0; i < dataCount; i++) { DoNothing(data[i]); } } //[Benchmark] public void RecyclableArrayList_Count() { var data = TestObjectsAsRecyclableArrayList; DoNothing(data.Count); } } }