perf(strings): establish Utf8ToAsciiConverter baseline benchmarks

This commit is contained in:
2025-12-12 23:11:24 +00:00
parent 475010148b
commit 610976c41c
3 changed files with 159 additions and 0 deletions

View File

@@ -0,0 +1,63 @@
using System.Text;
namespace Umbraco.Tests.Benchmarks;
public static class BenchmarkTextGenerator
{
private const int Seed = 42;
private static readonly char[] AsciiAlphaNum =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".ToCharArray();
private static readonly char[] AsciiPunctuation =
" .,;:!?-_'\"()".ToCharArray();
private static readonly char[] LatinAccented =
"àáâãäåæèéêëìíîïñòóôõöøùúûüýÿÀÁÂÃÄÅÆÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝŸœŒßðÐþÞ".ToCharArray();
private static readonly char[] Cyrillic =
"АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя".ToCharArray();
private static readonly char[] Symbols =
"©®™€£¥°±×÷§¶†‡•".ToCharArray();
private static readonly char[] WorstCaseCyrillic =
"ЩЮЯЖЧШщюяжчш".ToCharArray();
public static string GeneratePureAscii(int length) =>
GenerateFromCharset(length, AsciiAlphaNum);
public static string GenerateMixed(int length)
{
var random = new Random(Seed);
var sb = new StringBuilder(length);
for (int i = 0; i < length; i++)
{
var roll = random.Next(100);
var charset = roll switch
{
< 70 => AsciiAlphaNum,
< 85 => AsciiPunctuation,
< 95 => LatinAccented,
< 99 => Cyrillic,
_ => Symbols
};
sb.Append(charset[random.Next(charset.Length)]);
}
return sb.ToString();
}
public static string GenerateWorstCase(int length) =>
GenerateFromCharset(length, WorstCaseCyrillic);
private static string GenerateFromCharset(int length, char[] charset)
{
var random = new Random(Seed);
var sb = new StringBuilder(length);
for (int i = 0; i < length; i++)
sb.Append(charset[random.Next(charset.Length)]);
return sb.ToString();
}
}