Skip to content

Commit 19c0532

Browse files
Merge pull request #10 from rdeits/fix-similar
more type-stable versions of `similar()` and some tests
2 parents df6d8bb + ac56a49 commit 19c0532

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

src/array_partition.jl

+4-3
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ function ArrayPartition{T,T2<:Tuple}(x::T2,::Type{Val{T}}=Val{false})
99
return ArrayPartition{T2}((x...))
1010
end
1111
end
12-
Base.similar(A::ArrayPartition) = ArrayPartition((similar(x) for x in A.x)...)
13-
Base.similar(A::ArrayPartition,dims::Tuple) = ArrayPartition((similar(x,dim) for (x,dim) in zip(A.x,dims))...)
14-
Base.similar(A::ArrayPartition,T,dims::Tuple) = ArrayPartition((similar(x,T,dim) for (x,dim) in zip(A.x,dims))...)
12+
Base.similar(A::ArrayPartition) = ArrayPartition((similar.(A.x))...)
13+
Base.similar(A::ArrayPartition, dims::Tuple) = ArrayPartition(similar.(A.x, dims)...)
14+
Base.similar(A::ArrayPartition, T, dims::Tuple) = ArrayPartition(similar.(A.x, T, dims)...)
15+
1516
Base.copy(A::ArrayPartition) = Base.similar(A)
1617
Base.zeros(A::ArrayPartition) = ArrayPartition((zeros(x) for x in A.x)...)
1718

test/partitions_test.jl

+12
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,15 @@ p .= (*).(p,5)
2323
p .= (*).(p,a)
2424
p .= (*).(p,p2)
2525
K = (*).(p,p2)
26+
27+
x = ArrayPartition([1, 2], [3.0, 4.0])
28+
@inferred(similar(x))
29+
@inferred(similar(x, (2, 2)))
30+
@test_broken @inferred(similar(x, Int, (2, 2)))
31+
@test_broken @inferred(similar(x, (Int, Float64), (2, 2)))
32+
33+
_scalar_op(y) = y + 1
34+
# Can't do `@inferred(_scalar_op.(x))` so we wrap that in a function:
35+
_broadcast_wrapper(y) = _scalar_op.(y)
36+
# Issue #8
37+
@inferred(_broadcast_wrapper(x))

0 commit comments

Comments
 (0)