Current section
Files
Jump to
Current section
Files
lib/benchee/suite.ex
defmodule Benchee.Suite do
@moduledoc """
Main benchee data structure that aggregates the results from every step.
Different layers of the benchmarking rely on different data being present
here. For instance for `Benchee.Statistics.statistics/1` to work the
`run_times` key needs to be filled with the results from
`Benchee.Benchmark.measure/1`.
Formatters can then use the data to display all of the results and the
configuration.
"""
defstruct [
:configuration,
:system,
scenarios: []
]
@type key :: atom | String.t
@type optional_map :: map | nil
@type t :: %__MODULE__{
configuration: Benchee.Configuration.t | nil,
system: optional_map,
scenarios: [] | [Benchee.Benchmark.Scenario.t]
}
end
defimpl DeepMerge.Resolver, for: Benchee.Suite do
def resolve(original, override = %Benchee.Suite{}, resolver) do
cleaned_override = override
|> Map.from_struct
|> Enum.reject(fn({_key, value}) -> is_nil(value) end)
|> Map.new
Map.merge(original, cleaned_override, resolver)
end
def resolve(original, override, resolver) when is_map(override) do
Map.merge(original, override, resolver)
end
end