// Copyright (c) 2019 Pantor. All rights reserved.

#include "hayai/hayai.hpp"
#include <inja/inja.hpp>

using json = nlohmann::json;

inja::Environment env;

const std::string test_file_directory {"../test/data/benchmark/"};

json small_data = env.load_json(test_file_directory + "small_data.json");
json large_data = env.load_json(test_file_directory + "large_data.json");
std::string medium_template = env.load_file(test_file_directory + "medium_template.txt");
std::string large_template = env.load_file(test_file_directory + "large_template.txt");


BENCHMARK(SmallDataMediumTemplate, render, 5, 30) { env.render(medium_template, small_data); }
BENCHMARK(LargeDataMediumTemplate, render, 5, 15) { env.render(medium_template, large_data); }
BENCHMARK(LargeDataLargeTemplate, render, 5, 5) { env.render(large_template, large_data); }


int main() {
  hayai::ConsoleOutputter consoleOutputter;

  hayai::Benchmarker::AddOutputter(consoleOutputter);
  hayai::Benchmarker::RunAllTests();
  return 0;
}
