diff --git a/benchmarks/algorithms.h b/benchmarks/algorithms.h index 64801a4..6c219ae 100644 --- a/benchmarks/algorithms.h +++ b/benchmarks/algorithms.h @@ -17,6 +17,9 @@ #include // Netlib #endif +#include +#include +#include #include #include @@ -286,7 +289,9 @@ int to_string(T d, std::span& buffer) { template int fmt_format(T d, std::span& buffer) { - const auto it = fmt::format_to(buffer.data(), "{}", d); + // FMT_COMPILE is a macro provided by the {fmt} library that tells the library to fully process + // a format string at compile time rather than at runtime. + const auto it = fmt::format_to(buffer.data(), FMT_COMPILE("{}"), d); return std::distance(buffer.data(), it); } @@ -520,27 +525,29 @@ int snprintf(T d, std::span& buffer) { template int fmt_format(T d, std::span& buffer) { + // FMT_COMPILE is a macro provided by the {fmt} library that tells the library to fully process + // a format string at compile time rather than at runtime. switch(BenchArgs::fixedSize) { - case 0: return fmt::format_to(buffer.data(), "{}", d) - buffer.data(); - case 1: return fmt::format_to(buffer.data(), "{:.1g}", d) - buffer.data(); - case 2: return fmt::format_to(buffer.data(), "{:.2g}", d) - buffer.data(); - case 3: return fmt::format_to(buffer.data(), "{:.3g}", d) - buffer.data(); - case 4: return fmt::format_to(buffer.data(), "{:.4g}", d) - buffer.data(); - case 5: return fmt::format_to(buffer.data(), "{:.5g}", d) - buffer.data(); - case 6: return fmt::format_to(buffer.data(), "{:.6g}", d) - buffer.data(); - case 7: return fmt::format_to(buffer.data(), "{:.7g}", d) - buffer.data(); - case 8: return fmt::format_to(buffer.data(), "{:.8g}", d) - buffer.data(); - case 9: return fmt::format_to(buffer.data(), "{:.9g}", d) - buffer.data(); - case 10: return fmt::format_to(buffer.data(), "{:.10g}", d) - buffer.data(); - case 11: return fmt::format_to(buffer.data(), "{:.11g}", d) - buffer.data(); - case 12: return fmt::format_to(buffer.data(), "{:.12g}", d) - buffer.data(); - case 13: return fmt::format_to(buffer.data(), "{:.13g}", d) - buffer.data(); - case 14: return fmt::format_to(buffer.data(), "{:.14g}", d) - buffer.data(); - case 15: return fmt::format_to(buffer.data(), "{:.15g}", d) - buffer.data(); - case 16: return fmt::format_to(buffer.data(), "{:.16g}", d) - buffer.data(); - case 17: return fmt::format_to(buffer.data(), "{:.17g}", d) - buffer.data(); + case 0: return fmt::format_to(buffer.data(), FMT_COMPILE("{}"), d) - buffer.data(); + case 1: return fmt::format_to(buffer.data(), FMT_COMPILE("{:.1}"), d) - buffer.data(); + case 2: return fmt::format_to(buffer.data(), FMT_COMPILE("{:.2}"), d) - buffer.data(); + case 3: return fmt::format_to(buffer.data(), FMT_COMPILE("{:.3}"), d) - buffer.data(); + case 4: return fmt::format_to(buffer.data(), FMT_COMPILE("{:.4}"), d) - buffer.data(); + case 5: return fmt::format_to(buffer.data(), FMT_COMPILE("{:.5}"), d) - buffer.data(); + case 6: return fmt::format_to(buffer.data(), FMT_COMPILE("{:.6}"), d) - buffer.data(); + case 7: return fmt::format_to(buffer.data(), FMT_COMPILE("{:.7}"), d) - buffer.data(); + case 8: return fmt::format_to(buffer.data(), FMT_COMPILE("{:.8}"), d) - buffer.data(); + case 9: return fmt::format_to(buffer.data(), FMT_COMPILE("{:.9}"), d) - buffer.data(); + case 10: return fmt::format_to(buffer.data(), FMT_COMPILE("{:.10}"), d) - buffer.data(); + case 11: return fmt::format_to(buffer.data(), FMT_COMPILE("{:.11}"), d) - buffer.data(); + case 12: return fmt::format_to(buffer.data(), FMT_COMPILE("{:.12}"), d) - buffer.data(); + case 13: return fmt::format_to(buffer.data(), FMT_COMPILE("{:.13}"), d) - buffer.data(); + case 14: return fmt::format_to(buffer.data(), FMT_COMPILE("{:.14}"), d) - buffer.data(); + case 15: return fmt::format_to(buffer.data(), FMT_COMPILE("{:.15}"), d) - buffer.data(); + case 16: return fmt::format_to(buffer.data(), FMT_COMPILE("{:.16}"), d) - buffer.data(); + case 17: return fmt::format_to(buffer.data(), FMT_COMPILE("{:.17}"), d) - buffer.data(); default: - return fmt::format_to(buffer.data(), "{:.17g}", d) - buffer.data(); + return fmt::format_to(buffer.data(), FMT_COMPILE("{:.17}"), d) - buffer.data(); } } @@ -607,13 +614,13 @@ std::vector> initArgs(bool use_errol = false, size_t repeat = 0, si args.emplace_back("dragon4" , wrap(s::dragon4) , true , 10); args.emplace_back("netlib" , wrap(s::netlib) , NETLIB_SUPPORTED && std::is_same_v , 10); args.emplace_back("errol3" , wrap(s::errol3) , ERROL_SUPPORTED && use_errol); - args.emplace_back("fmt_format" , wrap(s::fmt_format) , true); + args.emplace_back("fmt_format 12.1.0" , wrap(s::fmt_format) , true); // args.emplace_back("grisu2" , wrap(s::grisu2) , std::is_same_v); args.emplace_back("grisu3" , wrap(s::grisu3) , std::is_same_v); args.emplace_back("grisu_exact" , wrap(s::grisu_exact) , true); args.emplace_back("schubfach" , wrap(s::schubfach) , true); args.emplace_back("dragonboxlm" , wrap(s::dragonboxlm) , true); - args.emplace_back("dragonbox" , wrap(s::dragonbox) , true); + args.emplace_back("dragonbox 1.1.3" , wrap(s::dragonbox) , true); args.emplace_back("ryu" , wrap(s::ryu) , true); args.emplace_back("teju_jagua" , wrap(s::teju_jagua) , true); args.emplace_back("double_conversion" , wrap(s::double_conversion) , true); @@ -632,7 +639,7 @@ std::vector> initArgs(bool use_errol = false, size_t repeat = 0, si args.emplace_back("netlib" , wrap(f::netlib) , NETLIB_SUPPORTED , 10); args.emplace_back("abseil" , wrap(f::abseil) , ABSEIL_SUPPORTED); args.emplace_back("snprintf" , wrap(f::snprintf) , true); - args.emplace_back("fmt_format" , wrap(f::fmt_format) , true); + args.emplace_back("fmt_format 12.1.0" , wrap(f::fmt_format) , true); args.emplace_back("ryu" , wrap(f::ryu) , std::is_same_v); args.emplace_back("double_conversion" , wrap(f::double_conversion) , true); args.emplace_back("std::to_chars" , wrap(f::std_to_chars) , TO_CHARS_SUPPORTED); diff --git a/dependencies/CMakeLists.txt b/dependencies/CMakeLists.txt index 72c9c9b..01df512 100644 --- a/dependencies/CMakeLists.txt +++ b/dependencies/CMakeLists.txt @@ -167,7 +167,7 @@ target_include_directories(dragon_schubfach_lib PUBLIC ${drachennest_SOURCE_DIR}/src ) -CPMAddPackage("gh:fmtlib/fmt#11.1.4") +CPMAddPackage("gh:fmtlib/fmt#12.1.0") CPMAddPackage( GITHUB_REPOSITORY jarro2783/cxxopts VERSION 3.2.0