diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index fac82392e439..a14dfc24e305 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -110,6 +110,9 @@ add_fmt_test(enforce-checks-test) target_compile_definitions(enforce-checks-test PRIVATE -DFMT_ENFORCE_COMPILE_STRING) +add_executable(perf-sanity perf-sanity.cc) +target_link_libraries(perf-sanity fmt::fmt) + if (FMT_MODULE) # The tests need {fmt} to be compiled as traditional library # because of visibility of implementation details. @@ -233,7 +236,7 @@ if (FMT_PEDANTIC AND NOT WIN32 AND NOT ( "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}") endif () -# This test are disabled on Windows because it is only *NIX issue. +# This test is disabled on Windows because it is POSIX-specific. if (FMT_PEDANTIC AND NOT WIN32) add_test(static-export-test ${CMAKE_CTEST_COMMAND} -C ${CMAKE_BUILD_TYPE} diff --git a/test/perf-sanity.cc b/test/perf-sanity.cc new file mode 100644 index 000000000000..7696b2f1f3c3 --- /dev/null +++ b/test/perf-sanity.cc @@ -0,0 +1,26 @@ +// A quick and dirty performance test. +// For actual benchmarks see https://github.com/fmtlib/format-benchmark. + +#include +#include +#include + +#include "fmt/format.h" + +int main() { + const int n = 10000000; + + auto start = std::chrono::steady_clock::now(); + for (int iteration = 0; iteration < n; ++iteration) { + auto buf = fmt::memory_buffer(); + fmt::format_to(std::back_inserter(buf), + "Hello, {}. The answer is {} and {}.", 1, 2345, 6789); + } + std::atomic_signal_fence(std::memory_order_acq_rel); // Clobber memory. + auto end = std::chrono::steady_clock::now(); + + std::chrono::duration duration = end - start; + double total_time = duration.count() * 1000; // Convert to milliseconds. + fmt::print("Total time for formatting {} strings: {:.1f} ms.\n", n, + total_time); +}