@@ -168,12 +168,14 @@ void describe(const std::variant<std::vector<TestCase<float>>, std::vector<TestC
168168 std::vector<std::string> shortest (lines.size ());
169169 std::vector<size_t > min_digits (lines.size (), std::numeric_limits<size_t >::max ());
170170 std::vector<std::string> min_digits_str (lines.size ());
171- std::vector<std::tuple<std::string, size_t , double , bool >> results;
171+ std::vector<std::tuple<std::string, size_t , double , size_t , double , bool >> results;
172172 size_t min_size = std::numeric_limits<size_t >::max ();
173173 for (const auto &algo : args) {
174174 if (!algo.used ) continue ;
175175 if (algo_filtered_out (algo.name , algo_filter)) continue ;
176176 size_t total_size = 0 ;
177+ size_t total_digits = 0 ;
178+
177179 std::vector<char > buffer (100 );
178180 std::span<char > bufspan (buffer);
179181 bool precise = true ;
@@ -191,6 +193,7 @@ void describe(const std::variant<std::vector<TestCase<float>>, std::vector<TestC
191193 min_digits_str[i].assign (bufspan.data (), len);
192194 }
193195 total_size += len;
196+ total_digits += digits;
194197 std::string_view sv (buffer.data (), len);
195198 auto parsed = parse_float<T>(sv);
196199 if (!parsed.has_value () || parsed.value () != d.value ) {
@@ -199,7 +202,9 @@ void describe(const std::variant<std::vector<TestCase<float>>, std::vector<TestC
199202 }
200203 }
201204 double avg = total_size / double (lines.size ());
202- results.emplace_back (algo.name , total_size, avg, precise);
205+ double avg_digits = total_digits / double (lines.size ());
206+
207+ results.emplace_back (algo.name , total_size, avg, total_digits, avg_digits, precise);
203208 if (precise && total_size < min_size) min_size = total_size;
204209 }
205210 std::map<std::string, std::tuple<bool , bool >> algo_results;
@@ -265,10 +270,10 @@ void describe(const std::variant<std::vector<TestCase<float>>, std::vector<TestC
265270 algo_results[algo.name ] = std::make_tuple (howmany == 0 , howmany_digits == 0 );
266271
267272 }
268- for (const auto &[name, total_size, avg, precise] : results) {
273+ for (const auto &[name, total_size, avg, total_digits, avg_digits, precise] : results) {
269274 auto [is_shortest, is_min_digits_algo] = algo_results[name];
270- fmt::print (" {:<18} {:>12} ({:>5.3f} chars/f) {:<18} {:<12} {:<15}\n " ,
271- name, total_size, avg,
275+ fmt::print (" {:<18} {:>12} ({:>5.3f} chars/f) {:>12} ({:>5.3f} d/f) {: <18} {:<12} {:<15}\n " ,
276+ name, total_size, avg, total_digits, avg_digits,
272277 is_shortest ? " [minimal string]" : " [non minimal]" ,
273278 precise ? " [precise]" : " [imprecise]" ,
274279 is_min_digits_algo ? " [min digits]" : " [non min digits]" );
0 commit comments