| 396 | |
| 397 | template <typename T> |
| 398 | void run_cmp_counts(const char * type_name) { |
| 399 | const size_t n = 100000; |
| 400 | const Pattern pats[] = { Pattern::Random, Pattern::Sorted, Pattern::Reverse, Pattern::Dups, Pattern::AllEqual }; |
| 401 | std::printf("\n## comparator-call counts — %s, N=%zu (why the adaptive cells are real)\n\n", type_name, n); |
| 402 | std::printf("| pattern | std::stable | #3 byte | #3 typed | #1 merge | #4 index |\n"); |
| 403 | std::printf("|------------|------------:|----------:|----------:|----------:|----------:|\n"); |
| 404 | for (Pattern p : pats) { |
| 405 | auto in = make_pattern<T>(p, n, 0xC0FFEEu); |
| 406 | auto count = [&](auto fn) -> uint64_t { auto a = in; g_cmp = 0; fn(a); return g_cmp; }; |
| 407 | uint64_t cs = count([](std::vector<T> & a) { std::stable_sort(a.begin(), a.end(), CountingLess<T>()); }); |
| 408 | uint64_t cb = count([](std::vector<T> & a) { das_stable_sort_r(a.data(), a.size(), sizeof(T), key_less_counted); }); |
| 409 | uint64_t ct = count([](std::vector<T> & a) { das_stable_sort(a.data(), a.data() + a.size(), CountingLess<T>()); }); |
| 410 | uint64_t cm = count([](std::vector<T> & a) { das_stable_merge_r(a.data(), a.size(), sizeof(T), key_less_counted); }); |
| 411 | uint64_t ci = count([](std::vector<T> & a) { das_stable_index_r(a.data(), a.size(), sizeof(T), key_less_counted); }); |
| 412 | std::printf("| %-10s | %11llu | %9llu | %9llu | %9llu | %9llu |\n", pattern_name(p), |
| 413 | (unsigned long long)cs, (unsigned long long)cb, (unsigned long long)ct, |
| 414 | (unsigned long long)cm, (unsigned long long)ci); |
| 415 | } |
| 416 | } |
| 417 | |
| 418 | } // anonymous |
| 419 |
nothing calls this directly
no test coverage detected