Skip to content

Commit 1e59fc5

Browse files
committed
chore: increase unit test coverage, add some doctest
1 parent 38529cb commit 1e59fc5

File tree

4 files changed

+37
-38
lines changed

4 files changed

+37
-38
lines changed

config/config.exs

Lines changed: 0 additions & 30 deletions
This file was deleted.

lib/circular_buffer.ex

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ defmodule CircularBuffer do
1515

1616
defstruct [:a, :b, :max_size, :count]
1717
@typedoc "A circular buffer"
18-
@opaque t() :: %__MODULE__{a: list(), b: list(), max_size: pos_integer(), count: non_neg_integer()}
18+
@opaque t() :: %__MODULE__{
19+
a: list(),
20+
b: list(),
21+
max_size: pos_integer(),
22+
count: non_neg_integer()
23+
}
1924

2025
alias __MODULE__, as: CB
2126

@@ -37,7 +42,7 @@ defmodule CircularBuffer do
3742

3843
def insert(%CB{count: count, max_size: max_size} = cb, item) when count < max_size do
3944
%CB{cb | a: [item | cb.a], count: cb.count + 1}
40-
end
45+
end
4146

4247
def insert(%CB{b: []} = cb, item) do
4348
new_b = cb.a |> Enum.reverse() |> tl()
@@ -55,6 +60,16 @@ defmodule CircularBuffer do
5560

5661
@doc """
5762
Returns the newest element in the buffer
63+
64+
## Examples
65+
66+
iex> cb = CircularBuffer.new(3)
67+
iex> CircularBuffer.newest(cb)
68+
nil
69+
iex> cb = Enum.reduce(1..4, cb, fn n, cb -> CircularBuffer.insert(cb, n) end)
70+
iex> CircularBuffer.newest(cb)
71+
4
72+
5873
"""
5974
@spec newest(t()) :: any()
6075
def newest(%CB{a: [newest | _rest]}), do: newest
@@ -69,6 +84,17 @@ defmodule CircularBuffer do
6984

7085
@doc """
7186
Checks the buffer to see if its empty
87+
88+
Returns `true` if the given circular buffer is empty, otherwise `false`.
89+
90+
## Examples
91+
92+
iex> cb = CircularBuffer.new(1)
93+
iex> CircularBuffer.empty?(cb)
94+
true
95+
iex> cb |> CircularBuffer.insert(1) |> CircularBuffer.empty?()
96+
false
97+
7298
"""
7399
@spec empty?(t()) :: boolean()
74100
def empty?(%CB{} = cb) do

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
defmodule CircularBuffer.MixProject do
22
use Mix.Project
33

4-
@version "0.4.0"
4+
@version "0.4.1-dev"
55

66
def project do
77
[

test/circular_buffer_test.exs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
defmodule CircularBufferTest do
22
use ExUnit.Case, async: false
33
use PropCheck
4+
doctest CircularBuffer
45

56
alias CircularBuffer, as: CB
67

@@ -39,6 +40,7 @@ defmodule CircularBufferTest do
3940

4041
property "member?/1" do
4142
items = such_that({a, b} <- {pos_integer(), pos_integer()}, when: a != b)
43+
4244
forall {a, b} <- items do
4345
cb = CB.new(1) |> CB.insert(a)
4446
!Enum.member?(cb, b) && Enum.member?(cb, a)
@@ -47,7 +49,7 @@ defmodule CircularBufferTest do
4749

4850
property "implements Enumerable" do
4951
forall is <- list(integer()) do
50-
buffer = Enum.reduce(is, CB.new(length(is)+1), fn i, cb -> CB.insert(cb, i) end)
52+
buffer = Enum.reduce(is, CB.new(length(is) + 1), fn i, cb -> CB.insert(cb, i) end)
5153

5254
Enum.reduce(buffer, 0, fn acc, i -> acc + i end) == Enum.sum(is)
5355
end
@@ -103,15 +105,15 @@ defmodule CircularBufferTest do
103105
oldest =
104106
iis
105107
|> Enum.reverse()
106-
|> Enum.drop(size-1)
108+
|> Enum.drop(size - 1)
107109
|> Enum.at(0)
108110

109111
CB.oldest(buffer) == oldest
110112
end
111113
end
112114

113115
test "can be inspected" do
114-
str = inspect(Enum.into([1,2,3,4], CB.new(4)))
116+
str = inspect(Enum.into([1, 2, 3, 4], CB.new(4)))
115117
assert str == "#CircularBuffer<[1, 2, 3, 4]>"
116118
end
117119

@@ -148,16 +150,17 @@ defmodule CircularBufferTest do
148150

149151
def size_and_list do
150152
let size <- pos_integer() do
151-
let is <- ints(size*2, []) do
153+
let is <- ints(size * 2 + 1, []) do
152154
{size, is}
153155
end
154156
end
155157
end
156158

157159
defp ints(0, acc), do: acc
160+
158161
defp ints(size, acc) do
159162
let i <- integer() do
160-
ints(size-1, [i | acc])
163+
ints(size - 1, [i | acc])
161164
end
162165
end
163166
end

0 commit comments

Comments
 (0)