Skip to content

Instantly share code, notes, and snippets.

@jeaye
Created December 30, 2023 00:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jeaye/306d6aefd7ed6c29fdec6eef2cafbb1f to your computer and use it in GitHub Desktop.
Save jeaye/306d6aefd7ed6c29fdec6eef2cafbb1f to your computer and use it in GitHub Desktop.
{
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