With benchmark.
diff --git a/test/parse_performance_test.dart b/test/parse_performance_test.dart
index 16e412f..e0c5313 100644
--- a/test/parse_performance_test.dart
+++ b/test/parse_performance_test.dart
@@ -6,40 +6,60 @@
import 'package:test/test.dart';
void main() {
- group('ArgParser.parse()', () {
- test('is fast', () {
- var parser = ArgParser()..addFlag('flag');
+ group('ArgParser.parse() is fast', () {
+ test('for short flags', () {
+ _test(ArgParser()..addFlag('short', abbr: 's'), '-s');
+ });
- var baseSize = 200000;
- var baseList = List<String>.generate(baseSize, (_) => '--flag');
+ test('for abbreviations', () {
+ _test(
+ ArgParser()
+ ..addFlag('short', abbr: 's')
+ ..addFlag('short2', abbr: 't')
+ ..addFlag('short3', abbr: 'u')
+ ..addFlag('short4', abbr: 'v'),
+ '-stuv');
+ });
- var multiplier = 10;
- var largeList =
- List<String>.generate(baseSize * multiplier, (_) => '--flag');
+ test('for long flags', () {
+ _test(ArgParser()..addFlag('long-flag'), '--long-flag');
+ });
- var baseAction = () => parser.parse(baseList);
- var largeAction = () => parser.parse(largeList);
-
- // Warm up JIT.
- baseAction();
- largeAction();
-
- var baseTime = _time(baseAction);
- var largeTime = _time(largeAction);
-
- print('Parsed $baseSize elements in ${baseTime}ms, '
- '${baseSize * multiplier} elements in ${largeTime}ms.');
-
- expect(largeTime, lessThan(baseTime * multiplier * 3),
- reason:
- 'Comparing large data set time ${largeTime}ms to small data set time '
- '${baseTime}ms. Data set increased ${multiplier}x, time is allowed to '
- 'increase up to ${multiplier * 3}x, but it increased '
- '${largeTime ~/ baseTime}x.');
+ test('for long options with =', () {
+ _test(ArgParser()..addOption('long-option-name'),
+ '--long-option-name=long-option-value');
});
});
}
+void _test(ArgParser parser, String string) {
+ var baseSize = 50000;
+ var baseList = List<String>.generate(baseSize, (_) => string);
+
+ var multiplier = 10;
+ var largeList = List<String>.generate(baseSize * multiplier, (_) => string);
+
+ var baseAction = () => parser.parse(baseList);
+ var largeAction = () => parser.parse(largeList);
+
+ // Warm up JIT.
+ baseAction();
+ largeAction();
+
+ var baseTime = _time(baseAction);
+ var largeTime = _time(largeAction);
+
+ print('Parsed $baseSize elements in ${baseTime}ms, '
+ '${baseSize * multiplier} elements in ${largeTime}ms.');
+
+ expect(largeTime, lessThan(baseTime * multiplier * 3),
+ reason:
+ 'Comparing large data set time ${largeTime}ms to small data set time '
+ '${baseTime}ms. Data set increased ${multiplier}x, time is allowed to '
+ 'increase up to ${multiplier * 3}x, but it increased '
+ '${largeTime ~/ baseTime}x.');
+}
+
int _time(void Function() function) {
var stopwatch = Stopwatch()..start();
function();