64 lines
2.1 KiB
C#
64 lines
2.1 KiB
C#
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();
|
|
}
|
|
}
|