// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/// Returns the average time to execute [f] over [iterations] repetitions.
///
/// Will first run [f] [warmupIterations] times to warm up the runtime.
Duration measure(void Function() f,
    {int warmupIterations = 100, int iterations = 1000}) {
  for (int i = 0; i < warmupIterations; i++) {
    f();
  }
  var s = Stopwatch()..start();
  for (int i = 0; i < iterations; i++) {
    f();
  }
  return s.elapsed ~/ iterations;
}

String formatReport({required String title, required Duration duration}) {
  return "RunTimeRaw($title): ${duration.inMicroseconds} us";
}
