# `Benchee.Benchmark`
[🔗](https://github.com/bencheeorg/benchee/blob/1.5.1/lib/benchee/benchmark.ex#L1)

Functions related to building and running benchmarking scenarios.
Exposes `benchmark/4` and `collect/3` functions.

# `no_input`

```elixir
@type no_input() :: :__no_input
```

# `benchmark`

```elixir
@spec benchmark(
  Benchee.Suite.t(),
  Benchee.Suite.key(),
  Benchee.Scenario.to_benchmark(),
  module()
) ::
  Benchee.Suite.t()
```

Takes the current suite and adds a new benchmarking scenario (represented by a
%Scenario{} struct) with the given name and function to the suite's scenarios.
If there are inputs in the suite's config, a scenario will be added for the given
function for each input.

# `collect`

```elixir
@spec collect(Benchee.Suite.t(), module(), module()) :: Benchee.Suite.t()
```

Kicks off the benchmarking of all scenarios defined in the given suite.

Hence, this might take a while ;) Passes a list of scenarios and a scenario context to our
benchmark runner. For more information on how benchmarks are actually run, see the
`Benchee.Benchmark.Runner` code (API considered private).

# `no_input`

```elixir
@spec no_input() :: no_input()
```

Public access for the special key representing no input for a scenario.

