mirror of
https://github.com/Tyrrrz/CliFx.git
synced 2025-10-25 15:19:17 +00:00
C#10ify
This commit is contained in:
@@ -4,30 +4,29 @@ using BenchmarkDotNet.Attributes;
|
||||
using CliFx.Attributes;
|
||||
using CliFx.Infrastructure;
|
||||
|
||||
namespace CliFx.Benchmarks
|
||||
namespace CliFx.Benchmarks;
|
||||
|
||||
public partial class Benchmarks
|
||||
{
|
||||
public partial class Benchmarks
|
||||
[Command]
|
||||
public class CliFxCommand : ICommand
|
||||
{
|
||||
[Command]
|
||||
public class CliFxCommand : ICommand
|
||||
{
|
||||
[CommandOption("str", 's')]
|
||||
public string? StrOption { get; set; }
|
||||
[CommandOption("str", 's')]
|
||||
public string? StrOption { get; set; }
|
||||
|
||||
[CommandOption("int", 'i')]
|
||||
public int IntOption { get; set; }
|
||||
[CommandOption("int", 'i')]
|
||||
public int IntOption { get; set; }
|
||||
|
||||
[CommandOption("bool", 'b')]
|
||||
public bool BoolOption { get; set; }
|
||||
[CommandOption("bool", 'b')]
|
||||
public bool BoolOption { get; set; }
|
||||
|
||||
public ValueTask ExecuteAsync(IConsole console) => default;
|
||||
}
|
||||
|
||||
[Benchmark(Description = "CliFx", Baseline = true)]
|
||||
public async ValueTask<int> ExecuteWithCliFx() =>
|
||||
await new CliApplicationBuilder()
|
||||
.AddCommand<CliFxCommand>()
|
||||
.Build()
|
||||
.RunAsync(Arguments, new Dictionary<string, string>());
|
||||
public ValueTask ExecuteAsync(IConsole console) => default;
|
||||
}
|
||||
|
||||
[Benchmark(Description = "CliFx", Baseline = true)]
|
||||
public async ValueTask<int> ExecuteWithCliFx() =>
|
||||
await new CliApplicationBuilder()
|
||||
.AddCommand<CliFxCommand>()
|
||||
.Build()
|
||||
.RunAsync(Arguments, new Dictionary<string, string>());
|
||||
}
|
||||
@@ -1,27 +1,26 @@
|
||||
using BenchmarkDotNet.Attributes;
|
||||
using clipr;
|
||||
|
||||
namespace CliFx.Benchmarks
|
||||
namespace CliFx.Benchmarks;
|
||||
|
||||
public partial class Benchmarks
|
||||
{
|
||||
public partial class Benchmarks
|
||||
public class CliprCommand
|
||||
{
|
||||
public class CliprCommand
|
||||
[NamedArgument('s', "str")]
|
||||
public string? StrOption { get; set; }
|
||||
|
||||
[NamedArgument('i', "int")]
|
||||
public int IntOption { get; set; }
|
||||
|
||||
[NamedArgument('b', "bool", Constraint = NumArgsConstraint.Optional, Const = true)]
|
||||
public bool BoolOption { get; set; }
|
||||
|
||||
public void Execute()
|
||||
{
|
||||
[NamedArgument('s', "str")]
|
||||
public string? StrOption { get; set; }
|
||||
|
||||
[NamedArgument('i', "int")]
|
||||
public int IntOption { get; set; }
|
||||
|
||||
[NamedArgument('b', "bool", Constraint = NumArgsConstraint.Optional, Const = true)]
|
||||
public bool BoolOption { get; set; }
|
||||
|
||||
public void Execute()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
[Benchmark(Description = "Clipr")]
|
||||
public void ExecuteWithClipr() => CliParser.Parse<CliprCommand>(Arguments).Execute();
|
||||
}
|
||||
|
||||
[Benchmark(Description = "Clipr")]
|
||||
public void ExecuteWithClipr() => CliParser.Parse<CliprCommand>(Arguments).Execute();
|
||||
}
|
||||
@@ -1,24 +1,23 @@
|
||||
using BenchmarkDotNet.Attributes;
|
||||
using Cocona;
|
||||
|
||||
namespace CliFx.Benchmarks
|
||||
{
|
||||
public partial class Benchmarks
|
||||
{
|
||||
public class CoconaCommand
|
||||
{
|
||||
public void Execute(
|
||||
[Option("str", new []{'s'})]
|
||||
string? strOption,
|
||||
[Option("int", new []{'i'})]
|
||||
int intOption,
|
||||
[Option("bool", new []{'b'})]
|
||||
bool boolOption)
|
||||
{
|
||||
}
|
||||
}
|
||||
namespace CliFx.Benchmarks;
|
||||
|
||||
[Benchmark(Description = "Cocona")]
|
||||
public void ExecuteWithCocona() => CoconaApp.Run<CoconaCommand>(Arguments);
|
||||
public partial class Benchmarks
|
||||
{
|
||||
public class CoconaCommand
|
||||
{
|
||||
public void Execute(
|
||||
[Option("str", new []{'s'})]
|
||||
string? strOption,
|
||||
[Option("int", new []{'i'})]
|
||||
int intOption,
|
||||
[Option("bool", new []{'b'})]
|
||||
bool boolOption)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
[Benchmark(Description = "Cocona")]
|
||||
public void ExecuteWithCocona() => CoconaApp.Run<CoconaCommand>(Arguments);
|
||||
}
|
||||
@@ -1,30 +1,29 @@
|
||||
using BenchmarkDotNet.Attributes;
|
||||
using CommandLine;
|
||||
|
||||
namespace CliFx.Benchmarks
|
||||
namespace CliFx.Benchmarks;
|
||||
|
||||
public partial class Benchmarks
|
||||
{
|
||||
public partial class Benchmarks
|
||||
public class CommandLineParserCommand
|
||||
{
|
||||
public class CommandLineParserCommand
|
||||
[Option('s', "str")]
|
||||
public string? StrOption { get; set; }
|
||||
|
||||
[Option('i', "int")]
|
||||
public int IntOption { get; set; }
|
||||
|
||||
[Option('b', "bool")]
|
||||
public bool BoolOption { get; set; }
|
||||
|
||||
public void Execute()
|
||||
{
|
||||
[Option('s', "str")]
|
||||
public string? StrOption { get; set; }
|
||||
|
||||
[Option('i', "int")]
|
||||
public int IntOption { get; set; }
|
||||
|
||||
[Option('b', "bool")]
|
||||
public bool BoolOption { get; set; }
|
||||
|
||||
public void Execute()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
[Benchmark(Description = "CommandLineParser")]
|
||||
public void ExecuteWithCommandLineParser() =>
|
||||
new Parser()
|
||||
.ParseArguments(Arguments, typeof(CommandLineParserCommand))
|
||||
.WithParsed<CommandLineParserCommand>(c => c.Execute());
|
||||
}
|
||||
|
||||
[Benchmark(Description = "CommandLineParser")]
|
||||
public void ExecuteWithCommandLineParser() =>
|
||||
new Parser()
|
||||
.ParseArguments(Arguments, typeof(CommandLineParserCommand))
|
||||
.WithParsed<CommandLineParserCommand>(c => c.Execute());
|
||||
}
|
||||
@@ -1,25 +1,24 @@
|
||||
using BenchmarkDotNet.Attributes;
|
||||
using McMaster.Extensions.CommandLineUtils;
|
||||
|
||||
namespace CliFx.Benchmarks
|
||||
namespace CliFx.Benchmarks;
|
||||
|
||||
public partial class Benchmarks
|
||||
{
|
||||
public partial class Benchmarks
|
||||
public class McMasterCommand
|
||||
{
|
||||
public class McMasterCommand
|
||||
{
|
||||
[Option("--str|-s")]
|
||||
public string? StrOption { get; set; }
|
||||
[Option("--str|-s")]
|
||||
public string? StrOption { get; set; }
|
||||
|
||||
[Option("--int|-i")]
|
||||
public int IntOption { get; set; }
|
||||
[Option("--int|-i")]
|
||||
public int IntOption { get; set; }
|
||||
|
||||
[Option("--bool|-b")]
|
||||
public bool BoolOption { get; set; }
|
||||
[Option("--bool|-b")]
|
||||
public bool BoolOption { get; set; }
|
||||
|
||||
public int OnExecute() => 0;
|
||||
}
|
||||
|
||||
[Benchmark(Description = "McMaster.Extensions.CommandLineUtils")]
|
||||
public int ExecuteWithMcMaster() => CommandLineApplication.Execute<McMasterCommand>(Arguments);
|
||||
public int OnExecute() => 0;
|
||||
}
|
||||
|
||||
[Benchmark(Description = "McMaster.Extensions.CommandLineUtils")]
|
||||
public int ExecuteWithMcMaster() => CommandLineApplication.Execute<McMasterCommand>(Arguments);
|
||||
}
|
||||
@@ -1,27 +1,26 @@
|
||||
using BenchmarkDotNet.Attributes;
|
||||
using PowerArgs;
|
||||
|
||||
namespace CliFx.Benchmarks
|
||||
namespace CliFx.Benchmarks;
|
||||
|
||||
public partial class Benchmarks
|
||||
{
|
||||
public partial class Benchmarks
|
||||
public class PowerArgsCommand
|
||||
{
|
||||
public class PowerArgsCommand
|
||||
[ArgShortcut("--str"), ArgShortcut("-s")]
|
||||
public string? StrOption { get; set; }
|
||||
|
||||
[ArgShortcut("--int"), ArgShortcut("-i")]
|
||||
public int IntOption { get; set; }
|
||||
|
||||
[ArgShortcut("--bool"), ArgShortcut("-b")]
|
||||
public bool BoolOption { get; set; }
|
||||
|
||||
public void Main()
|
||||
{
|
||||
[ArgShortcut("--str"), ArgShortcut("-s")]
|
||||
public string? StrOption { get; set; }
|
||||
|
||||
[ArgShortcut("--int"), ArgShortcut("-i")]
|
||||
public int IntOption { get; set; }
|
||||
|
||||
[ArgShortcut("--bool"), ArgShortcut("-b")]
|
||||
public bool BoolOption { get; set; }
|
||||
|
||||
public void Main()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
[Benchmark(Description = "PowerArgs")]
|
||||
public void ExecuteWithPowerArgs() => Args.InvokeMain<PowerArgsCommand>(Arguments);
|
||||
}
|
||||
|
||||
[Benchmark(Description = "PowerArgs")]
|
||||
public void ExecuteWithPowerArgs() => Args.InvokeMain<PowerArgsCommand>(Arguments);
|
||||
}
|
||||
@@ -3,42 +3,41 @@ using System.CommandLine.Invocation;
|
||||
using System.Threading.Tasks;
|
||||
using BenchmarkDotNet.Attributes;
|
||||
|
||||
namespace CliFx.Benchmarks
|
||||
namespace CliFx.Benchmarks;
|
||||
|
||||
public partial class Benchmarks
|
||||
{
|
||||
public partial class Benchmarks
|
||||
public class SystemCommandLineCommand
|
||||
{
|
||||
public class SystemCommandLineCommand
|
||||
public static int ExecuteHandler(string s, int i, bool b) => 0;
|
||||
|
||||
public Task<int> ExecuteAsync(string[] args)
|
||||
{
|
||||
public static int ExecuteHandler(string s, int i, bool b) => 0;
|
||||
|
||||
public Task<int> ExecuteAsync(string[] args)
|
||||
var command = new RootCommand
|
||||
{
|
||||
var command = new RootCommand
|
||||
new Option(new[] {"--str", "-s"})
|
||||
{
|
||||
new Option(new[] {"--str", "-s"})
|
||||
{
|
||||
Argument = new Argument<string?>()
|
||||
},
|
||||
new Option(new[] {"--int", "-i"})
|
||||
{
|
||||
Argument = new Argument<int>()
|
||||
},
|
||||
new Option(new[] {"--bool", "-b"})
|
||||
{
|
||||
Argument = new Argument<bool>()
|
||||
}
|
||||
};
|
||||
Argument = new Argument<string?>()
|
||||
},
|
||||
new Option(new[] {"--int", "-i"})
|
||||
{
|
||||
Argument = new Argument<int>()
|
||||
},
|
||||
new Option(new[] {"--bool", "-b"})
|
||||
{
|
||||
Argument = new Argument<bool>()
|
||||
}
|
||||
};
|
||||
|
||||
command.Handler = CommandHandler.Create(
|
||||
typeof(SystemCommandLineCommand).GetMethod(nameof(ExecuteHandler))!
|
||||
);
|
||||
command.Handler = CommandHandler.Create(
|
||||
typeof(SystemCommandLineCommand).GetMethod(nameof(ExecuteHandler))!
|
||||
);
|
||||
|
||||
return command.InvokeAsync(args);
|
||||
}
|
||||
return command.InvokeAsync(args);
|
||||
}
|
||||
|
||||
[Benchmark(Description = "System.CommandLine")]
|
||||
public async Task<int> ExecuteWithSystemCommandLine() =>
|
||||
await new SystemCommandLineCommand().ExecuteAsync(Arguments);
|
||||
}
|
||||
|
||||
[Benchmark(Description = "System.CommandLine")]
|
||||
public async Task<int> ExecuteWithSystemCommandLine() =>
|
||||
await new SystemCommandLineCommand().ExecuteAsync(Arguments);
|
||||
}
|
||||
@@ -3,18 +3,17 @@ using BenchmarkDotNet.Configs;
|
||||
using BenchmarkDotNet.Order;
|
||||
using BenchmarkDotNet.Running;
|
||||
|
||||
namespace CliFx.Benchmarks
|
||||
{
|
||||
[RankColumn]
|
||||
[Orderer(SummaryOrderPolicy.FastestToSlowest)]
|
||||
public partial class Benchmarks
|
||||
{
|
||||
private static readonly string[] Arguments = {"--str", "hello world", "-i", "13", "-b"};
|
||||
namespace CliFx.Benchmarks;
|
||||
|
||||
public static void Main() => BenchmarkRunner.Run<Benchmarks>(
|
||||
DefaultConfig
|
||||
.Instance
|
||||
.WithOptions(ConfigOptions.DisableOptimizationsValidator)
|
||||
);
|
||||
}
|
||||
[RankColumn]
|
||||
[Orderer(SummaryOrderPolicy.FastestToSlowest)]
|
||||
public partial class Benchmarks
|
||||
{
|
||||
private static readonly string[] Arguments = {"--str", "hello world", "-i", "13", "-b"};
|
||||
|
||||
public static void Main() => BenchmarkRunner.Run<Benchmarks>(
|
||||
DefaultConfig
|
||||
.Instance
|
||||
.WithOptions(ConfigOptions.DisableOptimizationsValidator)
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user