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.2"}
]
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.33 min
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 large 34.48 M 0.0290 μs ±30.93% 0.0260 μs 0.0550 μs
size xlarge 34.12 M 0.0293 μs ±42.82% 0.0270 μs 0.0550 μs
size small 33.84 M 0.0296 μs ±45.22% 0.0270 μs 0.0550 μs
size medium 33.74 M 0.0296 μs ±47.19% 0.0270 μs 0.0550 μs
peek small 17.00 M 0.0588 μs ±22.32% 0.0550 μs 0.112 μs
peek medium 16.78 M 0.0596 μs ±24.11% 0.0550 μs 0.111 μs
peek large 16.59 M 0.0603 μs ±25.43% 0.0550 μs 0.112 μs
peek xlarge 16.47 M 0.0607 μs ±52.92% 0.0600 μs 0.150 μs
new small 8.35 M 0.120 μs ±245.21% 0.110 μs 0.30 μs
new medium 7.09 M 0.141 μs ±138.43% 0.130 μs 0.34 μs
new large 6.17 M 0.162 μs ±130.64% 0.150 μs 0.37 μs
new xlarge 5.58 M 0.179 μs ±113.06% 0.160 μs 0.38 μs
insert small 4.35 M 0.23 μs ±86.82% 0.21 μs 0.44 μs
insert medium 2.63 M 0.38 μs ±1428.77% 0.30 μs 0.80 μs
insert large 1.97 M 0.51 μs ±881.49% 0.40 μs 1.40 μs
insert xlarge 1.65 M 0.61 μs ±599.77% 0.50 μs 1.50 μs
to_list small 1.08 M 0.93 μs ±335.66% 0.80 μs 1.80 μs
to_list medium 0.102 M 9.78 μs ±368.74% 9 μs 19 μs
to_list large 0.00890 M 112.34 μs ±21.66% 104 μs 215 μs
to_list xlarge 0.00074 M 1360.77 μs ±19.33% 1269 μs 2511.29 μs
Comparison:
size large 34.48 M
size xlarge 34.12 M - 1.01x slower
size small 33.84 M - 1.02x slower
size medium 33.74 M - 1.02x slower
peek small 17.00 M - 2.03x slower
peek medium 16.78 M - 2.06x slower
peek large 16.59 M - 2.08x slower
peek xlarge 16.47 M - 2.09x slower
new small 8.35 M - 4.13x slower
new medium 7.09 M - 4.87x slower
new large 6.17 M - 5.59x slower
new xlarge 5.58 M - 6.18x slower
insert small 4.35 M - 7.92x slower
insert medium 2.63 M - 13.11x slower
insert large 1.97 M - 17.55x slower
insert xlarge 1.65 M - 20.86x slower
to_list small 1.08 M - 31.88x slower
to_list medium 0.102 M - 337.27x slower
to_list large 0.00890 M - 3872.89x slower
to_list xlarge 0.00074 M - 46913.41x slower
```