using KGySoft.CoreLibraries;
using KGySoft.Diagnostics;
public static void Main()
new PerformanceTest { TestName = "GetName(s)", TestTime = 10, Iterations = 100_000 }
.AddCase(() => Enum.GetNames(typeof(NonFlagsEnum)), "System.Enum.GetNames(Type)")
.AddCase(() => Enum<NonFlagsEnum>.GetNames(), "KGySoft.CoreLibraries.Enum<TEnum>.GetNames()")
.AddCase(() => Enum.GetName(typeof(NonFlagsEnum), NonFlagsEnum.Alpha), "System.Enum.GetName(Type,object)")
.AddCase(() => Enum<NonFlagsEnum>.GetName(NonFlagsEnum.Alpha), "KGySoft.CoreLibraries.Enum<TEnum>.GetName(TEnum)")
.DumpResults(Console.Out);
new PerformanceTest { TestName = "GetValues", TestTime = 10, Iterations = 100_000 }
.AddCase(() => Enum.GetValues(typeof(NonFlagsEnum)), "System.Enum.GetValues(Type)")
.AddCase(() => Enum<NonFlagsEnum>.GetValues(), "KGySoft.CoreLibraries.Enum<TEnum>.GetValues()")
.DumpResults(Console.Out);
new PerformanceTest<bool> { TestName = "IsDefined", TestTime = 10, Iterations = 100_000 }
.AddCase(() => Enum.IsDefined(typeof(NonFlagsEnum), NonFlagsEnum.Alpha), "System.Enum.IsDefined(Type,object) with enum value")
.AddCase(() => Enum.IsDefined(typeof(NonFlagsEnum), nameof(NonFlagsEnum.Alpha)), "System.Enum.IsDefined(Type,object) with string value")
.AddCase(() => Enum.IsDefined(typeof(NonFlagsEnum), (long)NonFlagsEnum.Alpha), "System.Enum.IsDefined(Type,object) with long value")
.AddCase(() => Enum<NonFlagsEnum>.IsDefined(NonFlagsEnum.Alpha), "KGySoft.CoreLibraries.Enum<TEnum>.IsDefined(TEnum)")
.AddCase(() => Enum<NonFlagsEnum>.IsDefined(nameof(NonFlagsEnum.Alpha)), "KGySoft.CoreLibraries.Enum<TEnum>.IsDefined(string)")
.AddCase(() => Enum<NonFlagsEnum>.IsDefined((long)NonFlagsEnum.Alpha), "KGySoft.CoreLibraries.Enum<TEnum>.IsDefined(long)")
.DumpResults(Console.Out);
new PerformanceTest<string> { TestName = "ToString", TestTime = 10, Iterations = 100_000 }
.AddCase(() => NonFlagsEnum.Alpha.ToString(), $"{nameof(NonFlagsEnum)}.{nameof(NonFlagsEnum.Alpha)}.ToString()")
.AddCase(() => ((NonFlagsEnum)100).ToString(), $"(({nameof(NonFlagsEnum)})100).ToString()")
.AddCase(() => (NonFlagsEnum.Beta | NonFlagsEnum.Gamma).ToString(), $"({nameof(NonFlagsEnum)}.{nameof(NonFlagsEnum.Beta)} | {nameof(NonFlagsEnum)}.{nameof(NonFlagsEnum.Gamma)}).ToString()")
.AddCase(() => Enum<NonFlagsEnum>.ToString(NonFlagsEnum.Alpha), $"KGySoft.CoreLibraries.Enum<{nameof(NonFlagsEnum)}>.ToString({nameof(NonFlagsEnum)}.{nameof(NonFlagsEnum.Alpha)})")
.AddCase(() => Enum<NonFlagsEnum>.ToString((NonFlagsEnum)100), $"KGySoft.CoreLibraries.Enum<{nameof(NonFlagsEnum)}>.ToString(({nameof(NonFlagsEnum)})100)")
.AddCase(() => Enum<NonFlagsEnum>.ToString(NonFlagsEnum.Beta | NonFlagsEnum.Gamma), $"KGySoft.CoreLibraries.Enum<{nameof(NonFlagsEnum)}>.ToString({nameof(NonFlagsEnum)}.{nameof(NonFlagsEnum.Beta)} | {nameof(NonFlagsEnum)}.{nameof(NonFlagsEnum.Gamma)})")
.AddCase(() => FlagsEnum.Alpha.ToString(), $"{nameof(FlagsEnum)}.{nameof(FlagsEnum.Alpha)}.ToString()")
.AddCase(() => ((FlagsEnum)100).ToString(), $"(({nameof(FlagsEnum)})100).ToString()")
.AddCase(() => FlagsEnum.AlphaBeta.ToString(), $"{nameof(FlagsEnum)}.{nameof(FlagsEnum.AlphaBeta)}.ToString()")
.AddCase(() => (FlagsEnum.Beta | FlagsEnum.Gamma).ToString(), $"({nameof(FlagsEnum)}.{nameof(FlagsEnum.Beta)} | {nameof(FlagsEnum)}.{nameof(FlagsEnum.Gamma)}).ToString()")
.AddCase(() => Enum<FlagsEnum>.ToString(FlagsEnum.Alpha), $"KGySoft.CoreLibraries.Enum<{nameof(FlagsEnum)}>.ToString({nameof(FlagsEnum)}.{nameof(FlagsEnum.Alpha)})")
.AddCase(() => Enum<FlagsEnum>.ToString((FlagsEnum)100), $"KGySoft.CoreLibraries.Enum<{nameof(FlagsEnum)}>.ToString(({nameof(FlagsEnum)})100)")
.AddCase(() => Enum<FlagsEnum>.ToString(FlagsEnum.AlphaBeta), $"KGySoft.CoreLibraries.Enum<{nameof(FlagsEnum)}>.ToString({nameof(FlagsEnum)}.{nameof(FlagsEnum.AlphaBeta)})")
.AddCase(() => Enum<FlagsEnum>.ToString(FlagsEnum.Beta | FlagsEnum.Gamma), $"KGySoft.CoreLibraries.Enum<{nameof(FlagsEnum)}>.ToString({nameof(FlagsEnum)}.{nameof(FlagsEnum.Beta)} | {nameof(FlagsEnum)}.{nameof(FlagsEnum.Gamma)})")
.DumpResults(Console.Out);
new PerformanceTest { TestName = "Parse", TestTime = 10, Iterations = 100_000 }
.AddCase(() => Enum.Parse(typeof(FlagsEnum), nameof(FlagsEnum.Alpha)), $"System.Enum.Parse(typeof({nameof(FlagsEnum)}), \"{nameof(FlagsEnum.Alpha)}\")")
.AddCase(() => Enum<FlagsEnum>.Parse(nameof(FlagsEnum.Alpha)), $"KGySoft.CoreLibraries.Enum<{nameof(FlagsEnum)}>.Parse(\"{nameof(FlagsEnum.Alpha)}\")")
.AddCase(() => Enum.Parse(typeof(FlagsEnum), "0"), $"System.Enum.Parse(typeof({nameof(FlagsEnum)}), \"0\")")
.AddCase(() => Enum<FlagsEnum>.Parse("0"), $"KGySoft.CoreLibraries.Enum<{nameof(FlagsEnum)}>.Parse(\"0\")")
.AddCase(() => Enum.Parse(typeof(FlagsEnum), nameof(FlagsEnum.Gamma) + ", " + nameof(FlagsEnum.AlphaBeta) + ", " + nameof(FlagsEnum.Delta)), $"Enum.Parse(typeof({nameof(FlagsEnum)}), \"{nameof(FlagsEnum.Gamma)}, {nameof(FlagsEnum.AlphaBeta)}, {nameof(FlagsEnum.Delta)}\")")
.AddCase(() => Enum<FlagsEnum>.Parse(nameof(FlagsEnum.Gamma) + ", " + nameof(FlagsEnum.AlphaBeta) + ", " + nameof(FlagsEnum.Delta)), $"KGySoft.CoreLibraries.Enum<{nameof(FlagsEnum)}>.Parse(\"{nameof(FlagsEnum.Gamma)}, {nameof(FlagsEnum.AlphaBeta)}, {nameof(FlagsEnum.Delta)}\")")
.DumpResults(Console.Out);
private enum NonFlagsEnum : long
private enum FlagsEnum : long