-
-
Save jeaye/306d6aefd7ed6c29fdec6eef2cafbb1f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
ankerl::nanobench::Config config; | |
config.mMinEpochIterations = 10000000; | |
config.mOut = &std::cout; | |
config.mWarmup = 10000; | |
auto small("foo"); | |
auto medium("p0aeoka13scfq4ufg27xlse0y07gjg9v29nonktptjd36jnmlfzpze4qaxztkewq8v36hivq7ieuecvjhp9myn52ubvplrq7ip62oj7qo0n2s8xqgaxc38n70jo3cwdq"); | |
using std_string = std::basic_string<char, std::char_traits<char>, native_allocator<char>>; | |
std_string small_std{ small }; | |
native_persistent_string small_persistent{ small }; | |
folly::fbstring small_folly{ small }; | |
std_string medium_std{ medium }; | |
native_persistent_string medium_persistent{ medium }; | |
folly::fbstring medium_folly{ medium }; | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"native_persistent_string small allocation", | |
[&] | |
{ | |
native_persistent_string ret{ small }; | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"std_string small allocation", | |
[&] | |
{ | |
std_string ret{ small }; | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"folly::string small allocation", | |
[&] | |
{ | |
folly::fbstring ret{ small }; | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"native_persistent_string medium allocation", | |
[&] | |
{ | |
native_persistent_string ret{ medium }; | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"std_string medium allocation", | |
[&] | |
{ | |
std_string ret{ medium }; | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"folly::string medium allocation", | |
[&] | |
{ | |
folly::fbstring ret{ medium }; | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
/*** Copy ctor ***/ | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"native_persistent_string small copy ctor", | |
[&] | |
{ | |
native_persistent_string ret{ small_persistent }; | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"std_string small copy ctor", | |
[&] | |
{ | |
std_string ret{ small_std }; | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"folly::string small copy ctor", | |
[&] | |
{ | |
folly::fbstring ret{ small_folly }; | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"native_persistent_string medium copy ctor", | |
[&] | |
{ | |
native_persistent_string ret{ medium_persistent }; | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"std_string medium copy ctor", | |
[&] | |
{ | |
std_string ret{ medium_std }; | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"folly::string medium copy ctor", | |
[&] | |
{ | |
folly::fbstring ret{ medium_folly }; | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
/*** Find ***/ | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"native_persistent_string small find", | |
[&] | |
{ | |
auto const ret(small_persistent.find("fo")); | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"std_string small find", | |
[&] | |
{ | |
auto const ret(small_std.find("fo")); | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"folly::string small find", | |
[&] | |
{ | |
auto const ret(small_folly.find("fo")); | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"native_persistent_string medium find", | |
[&] | |
{ | |
auto const ret(medium_persistent.find("kewq")); | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"std_string medium find", | |
[&] | |
{ | |
auto const ret(medium_std.find("kewq")); | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"folly::string medium find", | |
[&] | |
{ | |
auto const ret(medium_folly.find("kewq")); | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
/*** Substrings. ***/ | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"native_persistent_string small substr", | |
[&] | |
{ | |
auto const ret(small_persistent.substr(1)); | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"std_string small substr", | |
[&] | |
{ | |
auto const ret(small_std.substr(1)); | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"folly_string small substr", | |
[&] | |
{ | |
auto const ret(small_folly.substr(1)); | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"native_persistent_string medium substr", | |
[&] | |
{ | |
auto const ret(medium_persistent.substr(4, 100)); | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"std_string medium substr", | |
[&] | |
{ | |
auto const ret(medium_std.substr(4, 100)); | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"folly_string medium substr", | |
[&] | |
{ | |
auto const ret(medium_folly.substr(4, 100)); | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
/*** Comparisons. ***/ | |
std_string another_medium_std{ medium }; | |
native_persistent_string another_medium_persistent{ medium }; | |
folly::fbstring another_medium_folly{ medium }; | |
auto different_medium("p0aeoka13scfq4ufg27xlse0y07gjg9v29nonktptjd36jnmlfzpze4qaxztkewq8v36hivq7ieuecvjhp9myn52ubvplrq7ip62oj7qo0n2s8xqgaxc38nXXXXXXXXX"); | |
std_string different_medium_std{ different_medium }; | |
native_persistent_string different_medium_persistent{ different_medium }; | |
folly::fbstring different_medium_folly{ different_medium }; | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"native_persistent_string medium compare same", | |
[&] | |
{ | |
auto const ret(medium_persistent == another_medium_persistent); | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"std_string medium compare same", | |
[&] | |
{ | |
auto const ret(medium_std == another_medium_std); | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"folly_string medium compare same", | |
[&] | |
{ | |
auto const ret(medium_folly == another_medium_folly); | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"native_persistent_string medium compare different", | |
[&] | |
{ | |
auto const ret(medium_persistent == different_medium_persistent); | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"std_string medium compare different", | |
[&] | |
{ | |
auto const ret(medium_std == different_medium_std); | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
ankerl::nanobench::Bench().config(config).run | |
( | |
"folly_string medium compare different", | |
[&] | |
{ | |
auto const ret(medium_folly == different_medium_folly); | |
ankerl::nanobench::doNotOptimizeAway(ret); | |
} | |
); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment