//===---------------------------------------------------------------------===// // json_test - Unit tests for benchmark/json.h //===---------------------------------------------------------------------===// #include "benchmark/benchmark.h" #include "gtest/gtest.h" namespace { TEST(JSONTest, BreathingTest) { using benchmark::json; using namespace benchmark; json obj{{"name", "foo"}, {"value", 42}, {"list", {1, 2, 3}}}; auto expect_json = R"( { "name": "foo", "value": 42, "list": [1, 2, 3] })"_json; EXPECT_EQ(obj, expect_json); EXPECT_EQ(obj.at("name"), "foo"); EXPECT_EQ(obj.at("value"), 42); EXPECT_EQ(obj.at("list"), (json::array_t{1, 2, 3})); auto list = obj.at("list"); auto expect_list = expect_json.at("list"); for (auto It = list.begin(), EIt = expect_list.begin(); It != list.end(); ++It, ++EIt) { EXPECT_EQ(*It, *EIt); } } TEST(JSONTest, JSONInputTest) { using namespace benchmark; RegisterBenchmark("test1", [](State& st) { json obj = st.GetInput(); assert(!obj.is_null()); switch (obj.at("case").get()) { case 1: assert(obj.at("name") == "foo"); assert(obj.at("a") == 42); break; case 2: assert(obj.count("name") == 0); assert(obj.at("b") == 101); break; default: assert(false && "in default case"); } for (auto _ : st) { } }) ->WithInput({{"case", 1}, {"name", "foo"}, {"a", 42}}) ->WithInput({{"case", 2}, {"b", 101}}); RunSpecifiedBenchmarks(); } } // end namespace