30 using namespace folly;
55 memset(rep_, 0,
sizeof(rep_));
72 template <
typename Coll>
73 void rand_bench(
int iters,
size_t size_add,
size_t size_contains) {
75 vector<uint8_t> seq_add;
76 vector<uint8_t> seq_contains;
78 uniform_int_distribution<uint8_t>
dist;
79 for (
size_t i = 0;
i < size_add; ++
i) {
80 seq_add.push_back(
dist(rng));
82 for (
size_t i = 0;
i < size_contains; ++
i) {
83 seq_contains.push_back(
dist(rng));
88 for (
auto b : seq_add) {
92 for (
auto b : seq_contains) {
93 q ^= coll.contains(
b);
100 void setup_rand_bench() {
101 vector<pair<size_t, size_t>> rand_bench_params = {
119 for (
auto kvp : rand_bench_params) {
120 size_t size_add, size_contains;
121 tie(size_add, size_contains) = kvp;
124 sformat(
"bitset_rand_bench({}, {})", size_add, size_contains).c_str(),
126 rand_bench<BitSetWrapper>(iters, size_add, size_contains);
131 sformat(
"%bool_array_set_rand_bench({}, {})", size_add, size_contains)
134 rand_bench<BoolArraySet>(iters, size_add, size_contains);
139 sformat(
"%sparse_byte_set_rand_bench({}, {})", size_add, size_contains)
142 rand_bench<SparseByteSet>(iters, size_add, size_contains);
152 gflags::ParseCommandLineFlags(&argc, &argv,
true);
std::string sformat(StringPiece fmt, Args &&...args)
—— Concurrent Priority Queue Implementation ——
Contains contains(Needle &&needle)
std::uniform_int_distribution< milliseconds::rep > dist
int main(int argc, char **argv)
auto dismissing(F f) -> invoke_result_t< F >
std::enable_if< boost::function_types::function_arity< decltype(&Lambda::operator())>::value==2 >::type addBenchmark(const char *file, const char *name, Lambda &&lambda)
auto doNotOptimizeAway(const T &datum) -> typename std::enable_if< !detail::DoNotOptimizeAwayNeedsIndirect< T >::value >::type