Skip to content

Commit fc683a2

Browse files
author
Christopher Keathley
committed
Merge branch 'chore/increase-code-coverage'
2 parents 38529cb + 8d6dcc6 commit fc683a2

File tree

4 files changed

+38
-39
lines changed

4 files changed

+38
-39
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.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
%{
22
"bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm", "7af5c7e09fe1d40f76c8e4f9dd2be7cebd83909f31fee7cd0e9eadc567da8353"},
3-
"credo": {:hex, :credo, "1.5.5", "e8f422026f553bc3bebb81c8e8bf1932f498ca03339856c7fec63d3faac8424b", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "dd8623ab7091956a855dc9f3062486add9c52d310dfd62748779c4315d8247de"},
3+
"credo": {:hex, :credo, "1.6.4", "ddd474afb6e8c240313f3a7b0d025cc3213f0d171879429bf8535d7021d9ad78", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "c28f910b61e1ff829bffa056ef7293a8db50e87f2c57a9b5c3f57eee124536b7"},
44
"dialyxir": {:hex, :dialyxir, "1.1.0", "c5aab0d6e71e5522e77beff7ba9e08f8e02bad90dfbeffae60eaf0cb47e29488", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "07ea8e49c45f15264ebe6d5b93799d4dd56a44036cf42d0ad9c960bc266c0b9a"},
55
"earmark_parser": {:hex, :earmark_parser, "1.4.13", "0c98163e7d04a15feb62000e1a891489feb29f3d10cb57d4f845c405852bbef8", [:mix], [], "hexpm", "d602c26af3a0af43d2f2645613f65841657ad6efc9f0e361c3b6c06b578214ba"},
66
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
77
"ex_doc": {:hex, :ex_doc, "0.24.2", "e4c26603830c1a2286dae45f4412a4d1980e1e89dc779fcd0181ed1d5a05c8d9", [:mix], [{:earmark_parser, "~> 1.4.0", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "e134e1d9e821b8d9e4244687fb2ace58d479b67b282de5158333b0d57c6fb7da"},
88
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
9-
"jason": {:hex, :jason, "1.2.2", "ba43e3f2709fd1aa1dce90aaabfd039d000469c05c56f0b8e31978e03fa39052", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "18a228f5f0058ee183f29f9eae0805c6e59d61c3b006760668d8d18ff0d12179"},
9+
"jason": {:hex, :jason, "1.3.0", "fa6b82a934feb176263ad2df0dbd91bf633d4a46ebfdffea0c8ae82953714946", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "53fc1f51255390e0ec7e50f9cb41e751c260d065dcba2bf0d08dc51a4002c2ac"},
1010
"libgraph": {:hex, :libgraph, "0.13.3", "20732b7bafb933dcf7351c479e03076ebd14a85fd3202c67a1c197f4f7c2466b", [:mix], [], "hexpm", "78f2576eef615440b46f10060b1de1c86640441422832052686df53dc3c148c6"},
1111
"makeup": {:hex, :makeup, "1.0.5", "d5a830bc42c9800ce07dd97fa94669dfb93d3bf5fcf6ea7a0c67b2e0e4a7f26c", [:mix], [{:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "cfa158c02d3f5c0c665d0af11512fed3fba0144cf1aadee0f2ce17747fba2ca9"},
1212
"makeup_elixir": {:hex, :makeup_elixir, "0.15.1", "b5888c880d17d1cc3e598f05cdb5b5a91b7b17ac4eaf5f297cb697663a1094dd", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.1", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "db68c173234b07ab2a07f645a5acdc117b9f99d69ebf521821d89690ae6c6ec8"},

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)