@@ -40,13 +40,13 @@ final defaultCharsInput = [
4040].shuffled (Random (42 ));
4141final defaultStringInput = defaultCharsInput.join ();
4242
43- final List <({String name, Benchmark benchmark})> _benchmarkEntries = (() {
43+ final List <({String name, void Function () benchmark})> _benchmarkEntries = (() {
4444 Future .delayed (const Duration (milliseconds: 1 )).then ((_) {
4545 for (final (: name, : benchmark) in _benchmarkEntries) {
4646 if (optionFilter == null || optionFilter == name) benchmark ();
4747 }
4848 });
49- return SortedList <({String name, Benchmark benchmark})>(
49+ return SortedList <({String name, void Function () benchmark})>(
5050 comparator: compareAsciiLowerCase.keyOf ((entry) => entry.name),
5151 );
5252})();
@@ -56,7 +56,7 @@ final numberPrinter = FixedNumberPrinter(precision: 3);
5656/// Generic benchmark runner.
5757void run (
5858 String name, {
59- required Benchmark verify,
59+ required void Function () verify,
6060 required Benchmark parse,
6161 required Benchmark accept,
6262 Benchmark ? native ,
@@ -83,7 +83,7 @@ void run(
8383 final benchmarks = [
8484 benchmark (parse),
8585 benchmark (accept),
86- native ? . also ( benchmark),
86+ if ( native != null ) benchmark ( native ),
8787 ].whereType <Jackknife <double >>();
8888 for (final benchmark in benchmarks) {
8989 stdout.write (optionSeparator);
@@ -133,15 +133,23 @@ void runChars(String name, Parser<void> parser, {int? success, String? input}) {
133133 throw StateError ('Expected $success_ successes, but got $count ' );
134134 }
135135 },
136- parse: () {
137- for (var i = 0 ; i < inputLength; i++ ) {
138- parser.parse (input_, start: i);
136+ parse: (count) {
137+ var result = 0 ;
138+ for (var c = 0 ; c < count; c++ ) {
139+ for (var i = 0 ; i < inputLength; i++ ) {
140+ result ^ = parser.parse (input_, start: i).hashCode;
141+ }
139142 }
143+ return result;
140144 },
141- accept: () {
142- for (var i = 0 ; i < inputLength; i++ ) {
143- parser.accept (input_, start: i);
145+ accept: (count) {
146+ var result = 0 ;
147+ for (var c = 0 ; c < count; c++ ) {
148+ for (var i = 0 ; i < inputLength; i++ ) {
149+ result ^ = parser.accept (input_, start: i).hashCode;
150+ }
144151 }
152+ return result;
145153 },
146154 );
147155}
@@ -172,7 +180,19 @@ void runString(
172180 );
173181 }
174182 },
175- parse: () => parser.parse (input_),
176- accept: () => parser.accept (input_),
183+ parse: (count) {
184+ var result = 0 ;
185+ for (var c = 0 ; c < count; c++ ) {
186+ result ^ = parser.parse (input_).hashCode;
187+ }
188+ return result;
189+ },
190+ accept: (count) {
191+ var result = 0 ;
192+ for (var c = 0 ; c < count; c++ ) {
193+ result ^ = parser.accept (input_) ? 1 : 0 ;
194+ }
195+ return result;
196+ },
177197 );
178198}
0 commit comments