README.md

# Cbuf

A [circular buffer](https://en.wikipedia.org/wiki/Circular_buffer) based on Erlang's `array` module.

## Installation

```elixir
def deps do
  [
    {:cbuf, "~> 0.3"}
  ]
end
```

See the docs at [https://hexdocs.pm/cbuf](https://hexdocs.pm/cbuf) for usage information.

## Benchmarks

To run the benchmarks:

```
$ mix run bench.exs
```

```
clark$> mix run bench.exs
Operating System: macOS
CPU Information: Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz
Number of Available Cores: 8
Available memory: 16 GB
Elixir 1.6.0
Erlang 20.2.2
Benchmark suite executing with the following configuration:
warmup: 2 s
time: 5 s
parallel: 1
inputs: none specified
Estimated total run time: 2.80 min


Benchmarking count large...
Benchmarking count medium...
Benchmarking count small...
Benchmarking count xlarge...
Benchmarking insert large...
Benchmarking insert medium...
Benchmarking insert small...
Benchmarking insert xlarge...
Benchmarking new large...
Benchmarking new medium...
Benchmarking new small...
Benchmarking new xlarge...
Benchmarking peek large...
Benchmarking peek medium...
Benchmarking peek small...
Benchmarking peek xlarge...
Benchmarking size large...
Benchmarking size medium...
Benchmarking size small...
Benchmarking size xlarge...
Benchmarking to_list large...
Benchmarking to_list medium...
Benchmarking to_list small...
Benchmarking to_list xlarge...

Name                     ips        average  deviation         median         99th %
size small           37.86 M      0.0264 μs    ±16.42%      0.0250 μs      0.0460 μs
size xlarge          37.26 M      0.0268 μs    ±18.20%      0.0250 μs      0.0500 μs
size large           37.21 M      0.0269 μs    ±17.63%      0.0260 μs      0.0480 μs
size medium          37.16 M      0.0269 μs    ±18.61%      0.0260 μs      0.0520 μs
count medium         19.16 M      0.0522 μs    ±15.73%      0.0500 μs      0.0910 μs
count small          19.04 M      0.0525 μs    ±15.41%      0.0500 μs      0.0900 μs
count large          18.69 M      0.0535 μs    ±19.69%      0.0500 μs      0.0930 μs
count xlarge         18.52 M      0.0540 μs    ±42.24%      0.0500 μs       0.110 μs
peek large           17.08 M      0.0586 μs    ±15.42%      0.0550 μs      0.0980 μs
peek medium          17.04 M      0.0587 μs    ±15.43%      0.0560 μs      0.0990 μs
peek small           16.64 M      0.0601 μs    ±41.77%      0.0600 μs       0.130 μs
peek xlarge          16.63 M      0.0602 μs    ±43.48%      0.0600 μs       0.130 μs
new small             8.59 M       0.117 μs   ±284.71%       0.110 μs        0.27 μs
new large             6.48 M       0.154 μs   ±125.67%       0.140 μs        0.33 μs
new medium            5.85 M       0.171 μs  ±2990.97%       0.100 μs        0.30 μs
new xlarge            5.82 M       0.172 μs   ±139.40%       0.160 μs        0.36 μs
insert small          4.17 M        0.24 μs  ±2849.26%        0.20 μs        0.40 μs
insert medium         2.92 M        0.34 μs  ±1592.38%        0.30 μs        0.70 μs
insert large          2.22 M        0.45 μs   ±754.39%        0.40 μs        1.20 μs
insert xlarge         1.79 M        0.56 μs   ±642.11%        0.50 μs        1.40 μs
to_list small         1.37 M        0.73 μs   ±476.96%        0.70 μs        1.60 μs
to_list medium       0.127 M        7.88 μs   ±469.30%           7 μs          16 μs
to_list large       0.0110 M       91.04 μs    ±15.31%          86 μs         148 μs
to_list xlarge     0.00081 M     1232.97 μs    ±16.85%        1181 μs     2034.35 μs

Comparison:
size small           37.86 M
size xlarge          37.26 M - 1.02x slower
size large           37.21 M - 1.02x slower
size medium          37.16 M - 1.02x slower
count medium         19.16 M - 1.98x slower
count small          19.04 M - 1.99x slower
count large          18.69 M - 2.03x slower
count xlarge         18.52 M - 2.04x slower
peek large           17.08 M - 2.22x slower
peek medium          17.04 M - 2.22x slower
peek small           16.64 M - 2.27x slower
peek xlarge          16.63 M - 2.28x slower
new small             8.59 M - 4.41x slower
new large             6.48 M - 5.84x slower
new medium            5.85 M - 6.47x slower
new xlarge            5.82 M - 6.51x slower
insert small          4.17 M - 9.08x slower
insert medium         2.92 M - 12.96x slower
insert large          2.22 M - 17.08x slower
insert xlarge         1.79 M - 21.14x slower
to_list small         1.37 M - 27.65x slower
to_list medium       0.127 M - 298.47x slower
to_list large       0.0110 M - 3446.79x slower
to_list xlarge     0.00081 M - 46678.47x slower
```