#include #include #include #include #include #include "error_category_test.h" constexpr unsigned int loop_count = 100000000u; int main(int argc, char *argv[]) { volatile int err = argc>10; std::atomic_signal_fence(std::memory_order_acq_rel); auto start = std::chrono::steady_clock::now(); for (unsigned int i = 0u; i < loop_count; ++i) { std::atomic_signal_fence(std::memory_order_acq_rel); experimental::error_code ec(err, code_category); if (ec) std::puts("error"); std::atomic_signal_fence(std::memory_order_acq_rel); } auto stop = std::chrono::steady_clock::now(); std::atomic_signal_fence(std::memory_order_acq_rel); unsigned long dur = std::chrono::duration_cast< std::chrono::microseconds >(stop - start).count(); std::printf("Experimental test: %lu usec, %f tests per second\n", dur, static_cast< double >(loop_count) * 1000000.0 / static_cast< double >(dur)); std::atomic_signal_fence(std::memory_order_acq_rel); start = std::chrono::steady_clock::now(); for (unsigned int i = 0u; i < loop_count; ++i) { std::atomic_signal_fence(std::memory_order_acq_rel); experimental2::error_code ec(err, code_category); if (ec) std::puts("error"); std::atomic_signal_fence(std::memory_order_acq_rel); } stop = std::chrono::steady_clock::now(); std::atomic_signal_fence(std::memory_order_acq_rel); dur = std::chrono::duration_cast< std::chrono::microseconds >(stop - start).count(); std::printf("Experimental2 test: %lu usec, %f tests per second\n", dur, static_cast< double >(loop_count) * 1000000.0 / static_cast< double >(dur)); std::atomic_signal_fence(std::memory_order_acq_rel); start = std::chrono::steady_clock::now(); for (unsigned int i = 0u; i < loop_count; ++i) { std::atomic_signal_fence(std::memory_order_acq_rel); std::error_code ec(err, std::system_category()); if (ec) std::puts("error"); std::atomic_signal_fence(std::memory_order_acq_rel); } stop = std::chrono::steady_clock::now(); std::atomic_signal_fence(std::memory_order_acq_rel); dur = std::chrono::duration_cast< std::chrono::microseconds >(stop - start).count(); std::printf("std test: %lu usec, %f tests per second\n", dur, static_cast< double >(loop_count) * 1000000.0 / static_cast< double >(dur)); return 0; }