EncodeSurrogatePair.cs 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. using System.Text;
  2. using BenchmarkDotNet.Attributes;
  3. using Tui = Terminal.Gui;
  4. namespace Terminal.Gui.Benchmarks.Text.RuneExtensions;
  5. /// <summary>
  6. /// Benchmarks for <see cref="Tui.RuneExtensions.EncodeSurrogatePair"/> performance fine-tuning.
  7. /// </summary>
  8. [MemoryDiagnoser]
  9. [BenchmarkCategory (nameof (Tui.RuneExtensions))]
  10. public class EncodeSurrogatePair
  11. {
  12. /// <summary>
  13. /// Benchmark for current implementation.
  14. /// </summary>
  15. [Benchmark (Baseline = true)]
  16. [ArgumentsSource (nameof (DataSource))]
  17. public Rune Current (char highSurrogate, char lowSurrogate)
  18. {
  19. _ = Tui.RuneExtensions.EncodeSurrogatePair (highSurrogate, lowSurrogate, out Rune rune);
  20. return rune;
  21. }
  22. public static IEnumerable<object []> DataSource ()
  23. {
  24. string[] runeStrings = ["🍕", "🧠", "🌹"];
  25. foreach (string symbol in runeStrings)
  26. {
  27. if (symbol is [char high, char low])
  28. {
  29. yield return [high, low];
  30. }
  31. }
  32. }
  33. }