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);
    }
  }
}
