Skip to content

Commit de34960

Browse files
committed
Expand proptest coverage of Enumerable tests
1 parent 087b8f5 commit de34960

1 file changed

Lines changed: 14 additions & 8 deletions

File tree

test/circular_buffer_test.exs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,20 +44,26 @@ defmodule CircularBufferTest do
4444
end
4545
end
4646

47-
property "member?/1" do
48-
items = such_that({a, b} <- {pos_integer(), pos_integer()}, when: a != b)
47+
property "member?/2 reflects buffer contents" do
48+
forall {size, is} <- size_and_list() do
49+
iis = Enum.with_index(is)
50+
buffer = Enum.reduce(iis, CB.new(size), fn i, cb -> CB.insert(cb, i) end)
4951

50-
forall {a, b} <- items do
51-
cb = CB.new(1) |> CB.insert(a)
52-
!Enum.member?(cb, b) && Enum.member?(cb, a)
52+
kept = Enum.take(iis, -size)
53+
evicted = Enum.drop(iis, -size)
54+
55+
Enum.all?(kept, &Enum.member?(buffer, &1)) and
56+
Enum.all?(evicted, fn x -> not Enum.member?(buffer, x) end) and
57+
not Enum.member?(buffer, :never_inserted)
5358
end
5459
end
5560

5661
property "implements Enumerable" do
57-
forall is <- list(integer()) do
58-
buffer = Enum.reduce(is, CB.new(length(is) + 1), fn i, cb -> CB.insert(cb, i) end)
62+
forall {size, is} <- size_and_list() do
63+
buffer = Enum.reduce(is, CB.new(size), fn i, cb -> CB.insert(cb, i) end)
5964

60-
Enum.reduce(buffer, 0, fn acc, i -> acc + i end) == Enum.sum(is)
65+
Enum.reduce(buffer, 0, fn elem, acc -> acc + elem end) ==
66+
Enum.sum(Enum.take(is, -size))
6167
end
6268
end
6369

0 commit comments

Comments
 (0)