using System.Text;
using BenchmarkDotNet.Attributes;
using Tui = Terminal.Gui;
namespace Terminal.Gui.Benchmarks.Text.StringExtensions;
///
/// Benchmarks for performance fine-tuning.
///
[MemoryDiagnoser]
public class ToStringEnumerable
{
///
/// Benchmark for previous implementation.
///
[Benchmark]
[ArgumentsSource (nameof (DataSource))]
public string Previous (IEnumerable runes, int len)
{
return StringConcatInLoop (runes);
}
///
/// Benchmark for current implementation with stackalloc char buffer and
/// fallback to rune chars appending to StringBuilder.
///
///
///
[Benchmark (Baseline = true)]
[ArgumentsSource (nameof (DataSource))]
public string Current (IEnumerable runes, int len)
{
return Tui.StringExtensions.ToString (runes);
}
///
/// Previous implementation with string concatenation in a loop.
///
private static string StringConcatInLoop (IEnumerable runes)
{
var str = string.Empty;
foreach (Rune rune in runes)
{
str += rune.ToString ();
}
return str;
}
public IEnumerable