#undef NDEBUG
#include <cassert>
#include <cmath>
#include <cstdlib>

#include "benchmark/benchmark_api.h"
#include "benchmark/registration.h"
#include "benchmark/state.h"
#include "output_test.h"

namespace {
void BM_ostream(benchmark::State& state) {
#if !defined(__MINGW64__) || defined(__clang__)
  // GCC-based versions of MINGW64 do not support locale manipulations,
  // don't run the test under them.
  std::locale::global(std::locale("en_US.UTF-8"));
#endif
  while (state.KeepRunning()) {
    state.SetIterationTime(1e-6);
  }
}
BENCHMARK(BM_ostream)->UseManualTime()->Iterations(1000000);

ADD_CASES(TC_ConsoleOut, {{"^BM_ostream/iterations:1000000/manual_time"
                           " %console_report$"}});
ADD_CASES(TC_JSONOut,
          {{"\"name\": \"BM_ostream/iterations:1000000/manual_time\",$"},
           {"\"family_index\": 0,$", MR_Next},
           {"\"per_family_instance_index\": 0,$", MR_Next},
           {"\"run_name\": "
            "\"BM_ostream/iterations:1000000/manual_time\",$",
            MR_Next},
           {"\"run_type\": \"iteration\",$", MR_Next},
           {"\"repetitions\": 1,$", MR_Next},
           {"\"repetition_index\": 0,$", MR_Next},
           {"\"threads\": 1,$", MR_Next},
           {"\"iterations\": 1000000,$", MR_Next},
           {"\"real_time\": %float,$", MR_Next},
           {"\"cpu_time\": %float,$", MR_Next},
           {"\"time_unit\": \"ns\"$", MR_Next},
           {"}", MR_Next}});
ADD_CASES(TC_CSVOut, {{"^\"BM_ostream/iterations:1000000/"
                       "manual_time\",1000000,%float,%float,ns,,,,,$"}});
}  // end namespace

int main(int argc, char* argv[]) {
  benchmark::MaybeReenterWithoutASLR(argc, argv);
  RunOutputTests(argc, argv);
}
