Packages
Benchwarmer is an Elixir micro-benchmarking utility that runs a function (or list of functions) repeatedly against a dataset for a period of time, and then reports on the average time each operation took to complete, allowing for easy comparison.
Current section
Files
Jump to
Current section
Files
benchwarmer
README.md
README.md
Benchwarmer
===========
Benchwarmer is an Elixir micro-benchmarking utility that runs a function (or list of functions) repeatedly against a dataset for a period of time, and then reports on the average time each operation took to complete, allowing for easy comparison.
Benchwarmer was inspired by the built-in benchmark operations in the Go test library.
Installation
------------
Add Benchwarmer to your `mix.exs` dependencies with whatever published semantic version you'd like to depend on.
```elixir
def deps do
[ { :benchwarmer, "~> x.y.z" } ]
end
```
Usage
-----
You can simply pass an inline function, results will be pretty printed to screen as well as returned in a struct:
```iex
iex> Benchwarmer.benchmark fn -> 123456*654321 end
*** #Function<20.90072148/0 in :erl_eval.expr/5> ***
1.2 sec 2M iterations 0.61 μs/op
[%Benchwarmer.Results{...}]
```
Comparing two different functions with the same data as an argument:
```iex
iex> alphabet = "abcdefghijklmnopqrstuvwxyz"
iex> Benchwarmer.benchmark [&String.first/1, &String.last/1], alphabet
*** &String.first/1 ***
1.9 sec 8M iterations 0.24 μs/op
*** &String.last/1 ***
1.9 sec 524K iterations 3.75 μs/op
[%Benchwarmer.Results{...}, %Benchwarmer.Results{...}]
```
Compared to other Elixir benchmarking tools
-------------------------------------------
For TDD-style benchmarking, you should probably check out [Benchfella][bf], which I discovered after starting this project. It's quite good.
This library is a little more focused on quick comparative benchmarks in IEx, working without adding a single line of code to your actual project files.
Work in Progress
----------------
Please note this library is a work in progress, and the API will likely change.
Pull requests are welcome!
[bf]: https://github.com/alco/benchfella