diff --git a/Project.toml b/Project.toml index a15fc6b..70e475e 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "DiskArrays" uuid = "3c3547ce-8d99-4f5e-a174-61eb10b00ae3" authors = ["Fabian Gans "] -version = "0.3.0" +version = "0.3.1" [compat] julia = "1.6" diff --git a/src/subarrays.jl b/src/subarrays.jl index dfd8fdb..90cb57d 100644 --- a/src/subarrays.jl +++ b/src/subarrays.jl @@ -32,5 +32,5 @@ function eachchunk_view(::Chunked, vv) newchunks = [subsetchunks(chunksparent.chunks[i], pinds[i]) for i in 1:length(pinds) if !in(i,iomit)] GridChunks(newchunks...) end -eachchunk_view(::Unchunked, a) = GridChunks(a,estimate_chunksize(a)) +eachchunk_view(::Unchunked, a) = estimate_chunksize(a) haschunks(a::SubDiskArray) = haschunks(parent(a.v)) diff --git a/test/runtests.jl b/test/runtests.jl index 342e522..ab7b74e 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -38,6 +38,19 @@ function DiskArrays.writeblock!(a::_DiskArray,v,i::AbstractUnitRange...) view(a.parent,i...) .= v end +struct UnchunkedDiskArray{T,N,P<:AbstractArray{T,N}} <: AbstractDiskArray{T,N} + p::P +end +DiskArrays.haschunks(::UnchunkedDiskArray) = DiskArrays.Unchunked() +Base.size(a::UnchunkedDiskArray) = size(a.p) +function DiskArrays.readblock!(a::UnchunkedDiskArray,aout,i::AbstractUnitRange...) + ndims(a) == length(i) || error("Number of indices is not correct") + all(r->isa(r,AbstractUnitRange),i) || error("Not all indices are unit ranges") + #println("reading from indices ", join(string.(i)," ")) + aout .= a.p[i...] +end + + function test_getindex(a) @test a[2,3,1] == 10 @test a[2,3] == 10 @@ -204,6 +217,13 @@ end @test DiskArrays.max_chunksize(gridc) == (5,2,4) end +@testset "Unchunked DiskArrays" begin + a = UnchunkedDiskArray(reshape(1:1000,(10,20,5))) + v = view(a,1:2,1,1:3) + @test v == [1 201 401; 2 202 402] +end + + @testset "Index interpretation" begin import DiskArrays: DimsDropper, Reshaper a = zeros(3,3,1)