Add basic forEach benchmark
diff --git a/pkgs/pool/benchmark/for_each_benchmark.dart b/pkgs/pool/benchmark/for_each_benchmark.dart new file mode 100644 index 0000000..7438ace --- /dev/null +++ b/pkgs/pool/benchmark/for_each_benchmark.dart
@@ -0,0 +1,51 @@ +import 'package:pool/pool.dart'; + +void main(List<String> args) async { + var poolSize = args.isEmpty ? 5 : int.parse(args.first); + print('Pool size: $poolSize'); + + final pool = Pool(poolSize); + final watch = Stopwatch()..start(); + final start = DateTime.now(); + + DateTime lastLog; + Duration fastest; + int fastestIteration; + var i = 1; + + void log(bool force) { + var now = DateTime.now(); + if (force || + lastLog == null || + now.difference(lastLog) > const Duration(seconds: 1)) { + lastLog = now; + print([ + now.difference(start), + i.toString().padLeft(10), + fastestIteration.toString().padLeft(7), + fastest.inMicroseconds.toString().padLeft(9) + ].join(' ')); + } + } + + print(['Elapsed ', 'Iterations', 'Fastest', 'Time (us)'].join(' ')); + + for (;; i++) { + watch.reset(); + + var sum = await pool + .forEach<int, int>(Iterable<int>.generate(100000), (i) => i) + .reduce((a, b) => a + b); + + assert(sum == 4999950000, 'was $sum'); + + var elapsed = watch.elapsed; + if (fastest == null || fastest > elapsed) { + fastest = elapsed; + fastestIteration = i; + log(true); + } else { + log(false); + } + } +}