#include #include #include #include #include #include #include #include #include #include void a(std::vector& v, std::span s); void b(std::vector& v, std::span s); void c(std::vector& v, std::span s); void d(std::vector& v, std::span s); int main(int argc, char* argv[]) { if(argc < 2) { std::println("Need arg"); std::exit(EXIT_FAILURE); } char arg = *argv[1]; std::vector vec; vec.reserve(4096); std::array arr; std::iota(arr.begin(), arr.end(), 0); std::span sp {reinterpret_cast(arr.data()), sizeof(arr)}; auto bench = [&](auto func) { for(size_t i {0}; i < 65536; ++i) { func(vec, sp); vec.clear(); } std::exit(EXIT_SUCCESS); }; switch(arg) { case 'a': bench(a); case 'b': bench(b); case 'c': bench(c); case 'd': bench(d); } std::println("Unknown arg"); std::exit(EXIT_FAILURE); }