@@ -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