Benchmarks that push the implementation in a specific way
This commit is contained in:
115
src/test.cpp
115
src/test.cpp
@@ -333,12 +333,14 @@ TEST_CASE("num dfa") {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *utf8str =
|
||||||
|
"💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩"
|
||||||
|
"💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩"
|
||||||
|
"💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩";
|
||||||
|
|
||||||
TEST_CASE("utf8 dfa") {
|
TEST_CASE("utf8 dfa") {
|
||||||
parser3::Utf8Dfa dfa;
|
parser3::Utf8Dfa dfa;
|
||||||
std::string match =
|
std::string match = utf8str;
|
||||||
"💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩"
|
|
||||||
"💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩"
|
|
||||||
"💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩";
|
|
||||||
auto *buf = dfa.scan(match.data(), match.data() + match.size());
|
auto *buf = dfa.scan(match.data(), match.data() + match.size());
|
||||||
CHECK(buf == match.data() + match.size());
|
CHECK(buf == match.data() + match.size());
|
||||||
CHECK(dfa.accept());
|
CHECK(dfa.accept());
|
||||||
@@ -352,3 +354,108 @@ TEST_CASE("utf8 dfa") {
|
|||||||
dfa.scan(match.data(), match.data() + match.size()));
|
dfa.scan(match.data(), match.data() + match.size()));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Different input structures with special care in the implementation
|
||||||
|
// performance wise
|
||||||
|
TEST_CASE("bench input types") {
|
||||||
|
auto bench = [](std::string name, std::string json) {
|
||||||
|
auto c = noopCallbacks();
|
||||||
|
ankerl::nanobench::Bench bench;
|
||||||
|
bench.batch(json.size());
|
||||||
|
bench.unit("byte");
|
||||||
|
auto *parser = WeaselJsonParser_create(1024, &c, nullptr);
|
||||||
|
bench.run("parser3 " + name, [&]() {
|
||||||
|
auto copy = json;
|
||||||
|
WeaselJsonParser_reset(parser);
|
||||||
|
if (WeaselJsonParser_parse(parser, copy.data(), copy.size()) !=
|
||||||
|
WeaselJson_AGAIN) {
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
if (WeaselJsonParser_parse(parser, nullptr, 0) != WeaselJson_OK) {
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
WeaselJsonParser_destroy(parser);
|
||||||
|
};
|
||||||
|
|
||||||
|
bench("numbers", "[-123456789.000000000000000123456789e+12, "
|
||||||
|
"-123456789.000000000000000123456789E+12, "
|
||||||
|
"-123456789.000000000000000123456789e-12, "
|
||||||
|
"-123456789.000000000000000123456789E-12, "
|
||||||
|
"-123456789.000000000000000123456789e+12, "
|
||||||
|
"-123456789.000000000000000123456789E+12, "
|
||||||
|
"-123456789.000000000000000123456789e-12, "
|
||||||
|
"-123456789.000000000000000123456789E-12, "
|
||||||
|
"-123456789.000000000000000123456789e+12, "
|
||||||
|
"-123456789.000000000000000123456789E+12, "
|
||||||
|
"-123456789.000000000000000123456789e-12, "
|
||||||
|
"-123456789.000000000000000123456789E-12, "
|
||||||
|
"-123456789.000000000000000123456789e+12, "
|
||||||
|
"-123456789.000000000000000123456789E+12, "
|
||||||
|
"-123456789.000000000000000123456789e-12, "
|
||||||
|
"-123456789.000000000000000123456789E-12, "
|
||||||
|
"-123456789.000000000000000123456789e+12]");
|
||||||
|
bench("ascii",
|
||||||
|
"\"Donec lobortis eleifend condimentum. Cras dictum dolor lacinia "
|
||||||
|
"lectus vehicula rutrum. Maecenas quis nisi nunc. Nam tristique "
|
||||||
|
"feugiat est vitae mollis. Maecenas quis nisi nunc.\"");
|
||||||
|
bench("utf-8", std::string("\"") + utf8str + "\"");
|
||||||
|
bench("escapes",
|
||||||
|
R"(
|
||||||
|
["\n\r\t\"\b\f\\\/\uabcd\u1234\ud801\udc37",
|
||||||
|
"\n\r\t\"\b\f\\\/\uabcd\u1234\ud801\udc37",
|
||||||
|
"\n\r\t\"\b\f\\\/\uabcd\u1234\ud801\udc37",
|
||||||
|
"\n\r\t\"\b\f\\\/\uabcd\u1234\ud801\udc37",
|
||||||
|
"\n\r\t\"\b\f\\\/\uabcd\u1234\ud801\udc37",
|
||||||
|
"\n\r\t\"\b\f\\\/\uabcd\u1234\ud801\udc37",
|
||||||
|
"\n\r\t\"\b\f\\\/\uabcd\u1234\ud801\udc37",
|
||||||
|
"\n\r\t\"\b\f\\\/\uabcd\u1234\ud801\udc37",
|
||||||
|
"\n\r\t\"\b\f\\\/\uabcd\u1234\ud801\udc37",
|
||||||
|
"\n\r\t\"\b\f\\\/\uabcd\u1234\ud801\udc37",
|
||||||
|
"\n\r\t\"\b\f\\\/\uabcd\u1234\ud801\udc37",
|
||||||
|
"\n\r\t\"\b\f\\\/\uabcd\u1234\ud801\udc37",
|
||||||
|
"\n\r\t\"\b\f\\\/\uabcd\u1234\ud801\udc37",
|
||||||
|
"\n\r\t\"\b\f\\\/\uabcd\u1234\ud801\udc37",
|
||||||
|
"\n\r\t\"\b\f\\\/\uabcd\u1234\ud801\udc37"]
|
||||||
|
)");
|
||||||
|
bench("structural",
|
||||||
|
R"(
|
||||||
|
[
|
||||||
|
{"": [{"": [[], [], [], [], [], [[[[[[[]]]]]]], {"": ""}]}]},
|
||||||
|
{"": [{"": [[], [], [], [], [], [[[[[[[]]]]]]], {"": ""}]}]},
|
||||||
|
{"": [{"": [[], [], [], [], [], [[[[[[[]]]]]]], {"": ""}]}]},
|
||||||
|
{"": [{"": [[], [], [], [], [], [[[[[[[]]]]]]], {"": ""}]}]},
|
||||||
|
{"": [{"": [[], [], [], [], [], [[[[[[[]]]]]]], {"": ""}]}]},
|
||||||
|
{"": [{"": [[], [], [], [], [], [[[[[[[]]]]]]], {"": ""}]}]},
|
||||||
|
{"": [{"": [[], [], [], [], [], [[[[[[[]]]]]]], {"": ""}]}]},
|
||||||
|
{"": [{"": [[], [], [], [], [], [[[[[[[]]]]]]], {"": ""}]}]},
|
||||||
|
{"": [{"": [[], [], [], [], [], [[[[[[[]]]]]]], {"": ""}]}]},
|
||||||
|
{"": [{"": [[], [], [], [], [], [[[[[[[]]]]]]], {"": ""}]}]},
|
||||||
|
{"": [{"": [[], [], [], [], [], [[[[[[[]]]]]]], {"": ""}]}]},
|
||||||
|
{"": [{"": [[], [], [], [], [], [[[[[[[]]]]]]], {"": ""}]}]},
|
||||||
|
{"": [{"": [[], [], [], [], [], [[[[[[[]]]]]]], {"": ""}]}]},
|
||||||
|
{"": [{"": [[], [], [], [], [], [[[[[[[]]]]]]], {"": ""}]}]},
|
||||||
|
{"": [{"": [[], [], [], [], [], [[[[[[[]]]]]]], {"": ""}]}]},
|
||||||
|
{"": [{"": [[], [], [], [], [], [[[[[[[]]]]]]], {"": ""}]}]}
|
||||||
|
]
|
||||||
|
)");
|
||||||
|
bench("whitespace", R"(
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
)");
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user