Skip to content

Commit 2437e12

Browse files
authored
Implement similar and copy for 0-dimensional arrays (#286)
* Add failing test * Add similar overloads for zero-dimensional broadcast * Add copy overloads for zero-dimensional broadcast * Increment patch number * Generalize test to support bool * Make sure test covers both cases
1 parent 7c32df4 commit 2437e12

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "DiskArrays"
22
uuid = "3c3547ce-8d99-4f5e-a174-61eb10b00ae3"
33
authors = ["Fabian Gans <fgans@bgc-jena.mpg.de>"]
4-
version = "0.4.18"
4+
version = "0.4.19"
55

66
[deps]
77
ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9"

src/broadcast.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ Base.copy(a::BroadcastDiskArray) = copyto!(zeros(eltype(a), size(a)), a.broadcas
2828

2929
Base.copy(broadcasted::Broadcasted{ChunkStyle{N}}) where {N} =
3030
BroadcastDiskArray(flatten(broadcasted))
31+
@inline Base.copy(broadcasted::Broadcasted{ChunkStyle{0}}) = broadcasted[CartesianIndex()]
3132
function Base.copyto!(dest::AbstractArray, broadcasted::Broadcasted{ChunkStyle{N}}) where {N}
3233
bcf = flatten(broadcasted)
3334
# Get a list of chunks to apply
@@ -42,6 +43,13 @@ function Base.copyto!(dest::AbstractArray, broadcasted::Broadcasted{ChunkStyle{N
4243
return dest
4344
end
4445

46+
function Base.similar(::Broadcasted{ChunkStyle{0}}, ::Type{ElType}, dims) where {ElType}
47+
return similar(Array{ElType, length(dims)}, dims)
48+
end
49+
function Base.similar(::Broadcasted{ChunkStyle{0}}, ::Type{Bool}, dims)
50+
return similar(BitArray, dims)
51+
end
52+
4553
# DiskArrays interface
4654

4755
haschunks(a::BroadcastDiskArray) = Chunked()

test/runtests.jl

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,28 @@ end
357357
@test a[] == 6
358358
end
359359

360+
# https://github.com/JuliaIO/DiskArrays.jl/issues/285
361+
@testset "basic array ops work for 0-dimensional arrays" begin
362+
@testset "Int" begin
363+
aval, bval = 2, 3
364+
a = UnchunkedDiskArray(fill(aval))
365+
b = UnchunkedDiskArray(fill(bval))
366+
@testset for op in (-, +)
367+
cval = op(aval, bval)
368+
c = @inferred op(a, b)
369+
@test c isa Array{typeof(cval),0}
370+
@test c[] == cval
371+
end
372+
end
373+
@testset "Bool" begin
374+
a = UnchunkedDiskArray(fill(true))
375+
cval = true * false
376+
c = @inferred a * false
377+
@test c isa BitArray{0}
378+
@test c[] == cval
379+
end
380+
end
381+
360382
@testset "Views" begin
361383
a = AccessCountDiskArray(zeros(Int, 4, 5, 1))
362384
test_view(a)

0 commit comments

Comments
 (0)