diff --git a/src/CircularArrayBuffers.jl b/src/CircularArrayBuffers.jl index bd110e6..c24a844 100644 --- a/src/CircularArrayBuffers.jl +++ b/src/CircularArrayBuffers.jl @@ -69,8 +69,8 @@ Base.getindex(cb::CircularVectorBuffer, i, j) = getindex(cb.buffer, _buffer_fram Base.setindex!(cb::CircularArrayBuffer{T,N}, v, i::Int) where {T,N} = setindex!(cb.buffer, v, _buffer_index(cb, i)) Base.setindex!(cb::CircularArrayBuffer{T,N}, v, I...) where {T,N} = setindex!(cb.buffer, v, Base.front(I)..., _buffer_frame(cb, Base.last(I))) -Base.view(cb::CircularArrayBuffer, i::Int) = view(cb.buffer, _buffer_index(cb, i)) -Base.view(cb::CircularArrayBuffer, I...) = view(cb.buffer, Base.front(I)..., _buffer_frame(cb, Base.last(I))) +Base.view(cb::CircularArrayBuffer, i::Int) = (@boundscheck checkbounds(cb, i); view(cb.buffer, _buffer_index(cb, i))) +Base.view(cb::CircularArrayBuffer, I...) = (@boundscheck checkbounds(cb, I...); view(cb.buffer, Base.front(I)..., _buffer_frame(cb, Base.last(I)))) capacity(cb::CircularArrayBuffer{T,N}) where {T,N} = size(cb.buffer, N) isfull(cb::CircularArrayBuffer) = cb.nframes == capacity(cb) diff --git a/test/runtests.jl b/test/runtests.jl index 1c58899..811bcf0 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -16,6 +16,13 @@ CUDA.allowscalar(false) @test b[1] == 0 end + # https://github.com/JuliaReinforcementLearning/CircularArrayBuffers.jl/issues/20 + @testset "bound check with view" begin + b = CircularArrayBuffer([1 2 3; 4 5 6]) + @test_throws BoundsError @view b[:, 4] + @test_throws BoundsError @view b[:, 9] + end + @testset "1D vector" begin b = CircularArrayBuffer([[1], [2, 3]]) push!(b, [4, 5, 6])