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);
}
}