From 63e252f44e3a3cdf508efb2af81ffd743c5eb7f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bogumi=C5=82=20Kami=C5=84ski?= Date: Fri, 14 Aug 2020 12:39:57 +0200 Subject: [PATCH] minor code fixes, bump version, and added tests --- Project.toml | 2 +- src/chainedvector.jl | 2 +- test/runtests.jl | 24 ++++++++++++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/Project.toml b/Project.toml index f45f63b..c6dfd55 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "SentinelArrays" uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" authors = ["Jacob Quinn "] -version = "1.2.10" +version = "1.2.11" [deps] Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" diff --git a/src/chainedvector.jl b/src/chainedvector.jl index ef6b4e4..20be359 100644 --- a/src/chainedvector.jl +++ b/src/chainedvector.jl @@ -19,6 +19,7 @@ function ChainedVector(arrays::Vector{A}) where {A <: AbstractVector{T}} where { inds = Vector{Int}(undef, n) x = 0 @inbounds for i = 1:n + # note that arrays[i] can have zero length x += length(arrays[i]) inds[i] = x end @@ -57,7 +58,6 @@ end while i > chunk_len chunk += 1 @inbounds chunk_len = A.inds[chunk] - i <= chunk_len && break end x = A.arrays[chunk][1] # find next valid index diff --git a/test/runtests.jl b/test/runtests.jl index 8a3b3e9..0c98517 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -542,4 +542,28 @@ c2 = copy(c) deleteat!(c2, Int[]) @test length(c2) == 15 +@testset "iteration protocol on ChainedVector" begin + @test isnothing(iterate(ChainedVector([[]]))) + for len in 0:6 + for j in 0:len + cv = ChainedVector([1:j, j+1:len]) + for (i, v) in enumerate(cv) + @test i == v + end + for k in j:len + cv = ChainedVector([1:j, j+1:k, k+1:len]) + for (i, v) in enumerate(cv) + @test i == v + end + for l in k:len + cv = ChainedVector([1:j, j+1:k, k+1:l, l+1:len]) + for (i, v) in enumerate(cv) + @test i == v + end + end + end + end + end +end + end