diff --git a/benchmarks/benchmark.cpp b/benchmarks/benchmark.cpp index 6b9c98c..b8e2937 100644 --- a/benchmarks/benchmark.cpp +++ b/benchmarks/benchmark.cpp @@ -47,14 +47,13 @@ void process(const std::vector> &lines, const std::array, Benchmarks::COUNT> &args, const std::vector &algo_filter) { // We have a special algorithm for the string generation: - if (const std::string just_string = "just_string"; - !algo_filtered_out(just_string, algo_filter)) { + if (!algo_filtered_out("just_string", algo_filter)) { std::vector parsed; for(const auto d : lines) { const auto v = jkj::grisu_exact(d.value); parsed.emplace_back(v.significand, v.exponent, v.is_negative); } - pretty_print(parsed, just_string, [](const std::vector& parsed) -> int { + pretty_print(parsed, "just_string_ours", [](const std::vector& parsed) -> int { int volume = 0; char buf[100]; std::span bufspan(buf, sizeof(buf)); @@ -62,8 +61,23 @@ void process(const std::vector> &lines, volume += to_chars(v.significand, v.exponent, v.is_negative, bufspan.data()); return volume; }, 100); + pretty_print(parsed, "just_string_dragonbox", [](const std::vector& parsed) -> int { + using traits = jkj::dragonbox::default_float_traits; + using carrier_uint = typename traits::carrier_uint; + int volume = 0; + char buf[100]; + std::span bufspan(buf, sizeof(buf)); + for (const auto v : parsed) { + char* ptr = bufspan.data(); + if(v.is_negative) *ptr++ = '-'; + const char* end = jkj::dragonbox::to_chars_detail::to_chars( + static_cast(v.significand), v.exponent, ptr); + volume += end - bufspan.data(); + } + return volume; + }, 100); } else { - fmt::println("# skipping {}", just_string); + fmt::println("# skipping just_string"); } for (const auto &algo : args) {