#include "lib/jsonParse-persistence.h"
#include "testMainWindow.h"
#include "testStructures.h"
#include <benchmark/benchmark.h>

template<typename T>
static void
parse_load_object(benchmark::State & state, T &&, const char * path)
{
	for (auto _ : state) {
		std::ifstream in {path};
		benchmark::DoNotOptimize(Persistence::JsonParsePersistence {}.loadState<T>(in));
	}
}

BENCHMARK_CAPTURE(parse_load_object, load_object, std::unique_ptr<TestObject> {}, FIXTURESDIR "json/load_object.json");
BENCHMARK_CAPTURE(parse_load_object, nested, std::unique_ptr<TestObject> {}, FIXTURESDIR "json/nested.json");
BENCHMARK_CAPTURE(parse_load_object, shared_ptr_diff, std::unique_ptr<SharedTestObject> {},
		FIXTURESDIR "json/shared_ptr_diff.json");
BENCHMARK_CAPTURE(parse_load_object, shared_ptr_same, std::unique_ptr<SharedTestObject> {},
		FIXTURESDIR "json/shared_ptr_same.json");

BENCHMARK_MAIN();