@@ -314,27 +314,31 @@ int std_to_chars(T d, std::span<char>& buffer) {
314314}
315315
316316template <arithmetic_float T>
317- std::array<BenchArgs<T>, Benchmarks::COUNT> initArgs (bool errol = false ) {
318- std::array<BenchArgs<T>, Benchmarks::COUNT> args;
319- args[Benchmarks::DRAGON4] = { " dragon4" , Benchmarks::dragon4<T> , true , 10 };
320- args[Benchmarks::ERROL3] = { " errol3" , Benchmarks::errol3<T> , errol };
321- args[Benchmarks::TO_STRING] = { " std::to_string" , Benchmarks::to_string<T> , ERROL_SUPPORTED };
322- args[Benchmarks::FMT_FORMAT] = { " fmt::format" , Benchmarks::fmt_format<T> , true };
323- args[Benchmarks::NETLIB] = { " netlib" , Benchmarks::netlib<T> , NETLIB_SUPPORTED && std::is_same_v<T, double >, 10 };
324- args[Benchmarks::SNPRINTF] = { " snprintf" , Benchmarks::snprintf<T> , true };
325- args[Benchmarks::GRISU2] = { " grisu2" , Benchmarks::grisu2<T> , std::is_same_v<T, double > };
326- args[Benchmarks::GRISU_EXACT] = { " grisu_exact" , Benchmarks::grisu_exact<T> , true };
327- args[Benchmarks::SCHUBFACH] = { " schubfach" , Benchmarks::schubfach<T> , true };
328- args[Benchmarks::DRAGONBOX] = { " dragonbox" , Benchmarks::dragonbox<T> , true };
329- args[Benchmarks::RYU] = { " ryu" , Benchmarks::ryu<T> , true };
330- args[Benchmarks::TEJU_JAGUA] = { " teju_jagua" , Benchmarks::teju_jagua<T> , true };
331- args[Benchmarks::DOUBLE_CONVERSION] = { " double_conversion" , Benchmarks::double_conversion<T> , true };
332- args[Benchmarks::ABSEIL] = { " abseil" , Benchmarks::abseil<T> , ABSEIL_SUPPORTED };
333- args[Benchmarks::STD_TO_CHARS] = { " std::to_chars" , Benchmarks::std_to_chars<T> , TO_CHARS_SUPPORTED };
334- args[Benchmarks::GRISU3] = { " grisu3" , Benchmarks::grisu3<T> , std::is_same_v<T, double > };
335- args[Benchmarks::SWIFT_DTOA] = { " SwiftDtoa" , Benchmarks::swiftDtoa<T> , SWIFT_LIB_SUPPORTED };
336- args[Benchmarks::YY_DOUBLE] = { " yy_double" , Benchmarks::yy_double<T> , YY_DOUBLE_SUPPORTED && std::is_same_v<T, double > };
337- return args;
317+ std::array<BenchArgs<T>, Benchmarks::COUNT> initArgs (size_t fixed_size, bool use_errol = false ) {
318+ if (fixed_size == 0 ) { // shortest length representation
319+ std::array<BenchArgs<T>, Benchmarks::COUNT> args;
320+ args[Benchmarks::DRAGON4] = { " dragon4" , Benchmarks::dragon4<T> , true , 10 };
321+ args[Benchmarks::ERROL3] = { " errol3" , Benchmarks::errol3<T> , ERROL_SUPPORTED && use_errol };
322+ args[Benchmarks::TO_STRING] = { " std::to_string" , Benchmarks::to_string<T> , true };
323+ args[Benchmarks::FMT_FORMAT] = { " fmt::format" , Benchmarks::fmt_format<T> , true };
324+ args[Benchmarks::NETLIB] = { " netlib" , Benchmarks::netlib<T> , NETLIB_SUPPORTED && std::is_same_v<T, double >, 10 };
325+ args[Benchmarks::SNPRINTF] = { " snprintf" , Benchmarks::snprintf<T> , true };
326+ args[Benchmarks::GRISU2] = { " grisu2" , Benchmarks::grisu2<T> , std::is_same_v<T, double > };
327+ args[Benchmarks::GRISU_EXACT] = { " grisu_exact" , Benchmarks::grisu_exact<T> , true };
328+ args[Benchmarks::SCHUBFACH] = { " schubfach" , Benchmarks::schubfach<T> , true };
329+ args[Benchmarks::DRAGONBOX] = { " dragonbox" , Benchmarks::dragonbox<T> , true };
330+ args[Benchmarks::RYU] = { " ryu" , Benchmarks::ryu<T> , true };
331+ args[Benchmarks::TEJU_JAGUA] = { " teju_jagua" , Benchmarks::teju_jagua<T> , true };
332+ args[Benchmarks::DOUBLE_CONVERSION] = { " double_conversion" , Benchmarks::double_conversion<T> , true };
333+ args[Benchmarks::ABSEIL] = { " abseil" , Benchmarks::abseil<T> , ABSEIL_SUPPORTED };
334+ args[Benchmarks::STD_TO_CHARS] = { " std::to_chars" , Benchmarks::std_to_chars<T> , TO_CHARS_SUPPORTED };
335+ args[Benchmarks::GRISU3] = { " grisu3" , Benchmarks::grisu3<T> , std::is_same_v<T, double > };
336+ args[Benchmarks::SWIFT_DTOA] = { " SwiftDtoa" , Benchmarks::swiftDtoa<T> , SWIFT_LIB_SUPPORTED };
337+ args[Benchmarks::YY_DOUBLE] = { " yy_double" , Benchmarks::yy_double<T> , YY_DOUBLE_SUPPORTED && std::is_same_v<T, double > };
338+ return args;
339+ } else { // fixed-length representation
340+ throw std::runtime_error (" fixed length representation not yet implemented" );
341+ }
338342};
339343
340344} // namespace Benchmarks
0 commit comments