diff --git a/Bench.cpp b/Bench.cpp index 3efa2d4..6191aba 100644 --- a/Bench.cpp +++ b/Bench.cpp @@ -6,6 +6,7 @@ void monotonicallyIncreasing() { constexpr int kWindow = 100; ankerl::nanobench::Bench bench; Facade facade{0}; + bench.warmup(kWindow).run("monotonically increasing", [&] { const int64_t remove = __builtin_bswap64(facade.getVersion() - kWindow); const int64_t next = __builtin_bswap64(facade.getVersion()); @@ -17,11 +18,53 @@ void monotonicallyIncreasing() { }; facade.addMutations(mutations, sizeof(mutations) / sizeof(mutations[0]), facade.getVersion() + 1); - facade.viewAt(std::max(0, facade.getVersion() - kWindow / 2)) - .rangeRead({}, {0xff}, 0, false); - facade.setOldestVersion( - std::max(0, facade.getVersion() - kWindow)); }); + + const auto v = facade.getVersion() - kWindow / 2; + const auto begin = facade.versioned.begin(v); + const auto end = facade.versioned.end(v); + auto iter = begin; + + // Slow because all the clears from old versions are still around. + bench.run("scan", [&] { + for (iter = begin; iter != end; ++iter) { + } + }); + + bench.run("reverse scan", [&] { + iter = end; + do { + --iter; + } while (iter != begin); + }); + + bench.run("deref", [&] { bench.doNotOptimizeAway(*iter); }); + + iter = begin; + bench.run("++iter", [&] { + ++iter; + if (iter == end) { + iter = begin; + } + }); + + iter = end; + bench.run("--iter", [&] { + --iter; + if (iter == begin) { + iter = end; + } + }); + + bench.run("begin", [&] { facade.versioned.begin(v); }); + + bench.run("begin (firstGeq)", [&] { + weaselab::VersionedMap::Key key{nullptr, 0}; + weaselab::VersionedMap::Iterator iter; + facade.versioned.firstGeq(&key, &v, &iter, 1); + }); + + bench.run("end", [&] { facade.versioned.end(v); }); } int main() { monotonicallyIncreasing(); } \ No newline at end of file