@@ -47,23 +47,37 @@ void process(const std::vector<TestCase<T>> &lines,
4747 const std::array<BenchArgs<T>, Benchmarks::COUNT> &args,
4848 const std::vector<std::string> &algo_filter) {
4949 // We have a special algorithm for the string generation:
50- if (const std::string just_string = " just_string" ;
51- !algo_filtered_out (just_string, algo_filter)) {
50+ if (!algo_filtered_out (" just_string" , algo_filter)) {
5251 std::vector<diy_float_t > parsed;
5352 for (const auto d : lines) {
5453 const auto v = jkj::grisu_exact (d.value );
5554 parsed.emplace_back (v.significand , v.exponent , v.is_negative );
5655 }
57- pretty_print (parsed, just_string , [](const std::vector<diy_float_t >& parsed) -> int {
56+ pretty_print (parsed, " just_string_ours " , [](const std::vector<diy_float_t >& parsed) -> int {
5857 int volume = 0 ;
5958 char buf[100 ];
6059 std::span<char > bufspan (buf, sizeof (buf));
6160 for (const auto v : parsed)
6261 volume += to_chars (v.significand , v.exponent , v.is_negative , bufspan.data ());
6362 return volume;
6463 }, 100 );
64+ pretty_print (parsed, " just_string_dragonbox" , [](const std::vector<diy_float_t >& parsed) -> int {
65+ using traits = jkj::dragonbox::default_float_traits<T>;
66+ using carrier_uint = typename traits::carrier_uint;
67+ int volume = 0 ;
68+ char buf[100 ];
69+ std::span<char > bufspan (buf, sizeof (buf));
70+ for (const auto v : parsed) {
71+ char * ptr = bufspan.data ();
72+ if (v.is_negative ) *ptr++ = ' -' ;
73+ const char * end = jkj::dragonbox::to_chars_detail::to_chars<T, traits>(
74+ static_cast <carrier_uint>(v.significand ), v.exponent , ptr);
75+ volume += end - bufspan.data ();
76+ }
77+ return volume;
78+ }, 100 );
6579 } else {
66- fmt::println (" # skipping {} " , just_string);
80+ fmt::println (" # skipping just_string" );
6781 }
6882
6983 for (const auto &algo : args) {
0 commit comments