From 79dd7e32c246071bdeef7362c1bf4d1ddf45d881 Mon Sep 17 00:00:00 2001 From: Tobias Pfeiffer Date: Fri, 22 Dec 2023 09:30:53 +0100 Subject: [PATCH] find and fix particularly nasty bug that lead to real bad output always appending 0 ns --- lib/benchee/conversion/duration.ex | 3 +++ lib/benchee/conversion/format.ex | 5 +++++ test/benchee/conversion/duration_test.exs | 5 +++++ 3 files changed, 13 insertions(+) diff --git a/lib/benchee/conversion/duration.ex b/lib/benchee/conversion/duration.ex index 45d58895..a935654c 100644 --- a/lib/benchee/conversion/duration.ex +++ b/lib/benchee/conversion/duration.ex @@ -288,6 +288,9 @@ defmodule Benchee.Conversion.Duration do iex> format_human(0) "0 ns" + + iex> format_human(2 * 1000 * 1000 * 1000) + "2 s" """ def format_human(duration) do Format.format_human(duration, __MODULE__) diff --git a/lib/benchee/conversion/format.ex b/lib/benchee/conversion/format.ex index acf1c6bb..da3776b1 100644 --- a/lib/benchee/conversion/format.ex +++ b/lib/benchee/conversion/format.ex @@ -85,6 +85,10 @@ defmodule Benchee.Conversion.Format do format(0, module) end + def format_human(+0.0, module) do + format(0, module) + end + def format_human(number, module) when is_number(number) do number |> split_into_place_values(module) @@ -108,6 +112,7 @@ defmodule Benchee.Conversion.Format do @spec place_values(number, [Unit.t()]) :: [{number, Unit.t()}] defp place_values(0, _units), do: [] + defp place_values(+0.0, _units), do: [] # smalles unit, carries the decimal defp place_values(number, [base_unit = %Unit{magnitude: 1}]), do: [{number, base_unit}] diff --git a/test/benchee/conversion/duration_test.exs b/test/benchee/conversion/duration_test.exs index 3592f448..1d33f8b4 100644 --- a/test/benchee/conversion/duration_test.exs +++ b/test/benchee/conversion/duration_test.exs @@ -74,6 +74,11 @@ defmodule Benchee.Conversion.DurationTest do assert format_human(9_008) == "9 μs 8 ns" end + # particularly nasty bug + test ".format_human()" do + assert format_human(2_000_000_000.0) == "2 s" + end + test ".format_human(9_876.54321)" do assert format_human(9_876.54321) == "9 μs 876.54 ns" end