using System; using System.Collections.Generic; using System.Linq; using API.DTOs; using API.Extensions; using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Order; namespace API.Benchmark; /// /// This is used as a scratchpad for testing /// [MemoryDiagnoser] [Orderer(SummaryOrderPolicy.FastestToSlowest)] [RankColumn] public class TestBenchmark { private static IEnumerable GenerateVolumes(int max) { var random = new Random(); var maxIterations = random.Next(max) + 1; var list = new List(); for (var i = 0; i < maxIterations; i++) { list.Add(new VolumeDto() { MinNumber = random.Next(10) > 5 ? 1 : 0, Chapters = GenerateChapters() }); } return list; } private static List GenerateChapters() { var list = new List(); for (var i = 1; i < 40; i++) { list.Add(new ChapterDto() { Range = i + string.Empty }); } return list; } private static void SortSpecialChapters(IEnumerable volumes) { foreach (var v in volumes.WhereNotLooseLeaf()) { v.Chapters = v.Chapters.OrderByNatural(x => x.Range).ToList(); } } [Benchmark] public void TestSortSpecialChapters() { var volumes = GenerateVolumes(10); SortSpecialChapters(volumes); } }