Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 28 additions & 39 deletions test/testsuite/reductions.jl
Original file line number Diff line number Diff line change
@@ -1,19 +1,3 @@
@testsuite "reductions/mapreducedim!" (AT, eltypes)->begin
@testset "$ET" for ET in eltypes
range = ET <: Real ? (ET(1):ET(10)) : ET
for (sz,red) in [(10,)=>(1,), (10,10)=>(1,1), (10,10,10)=>(1,1,1), (10,10,10)=>(10,10,10),
(10,10,10)=>(1,10,10), (10,10,10)=>(10,1,10), (10,10,10)=>(10,10,1),
(0,)=>(1,)]
@test compare((A,R)->Base.mapreducedim!(identity, +, R, A), AT, rand(range, sz), zeros(ET, red))
@test compare((A,R)->Base.mapreducedim!(identity, *, R, A), AT, rand(range, sz), ones(ET, red))
@test compare((A,R)->Base.mapreducedim!(x->x+x, +, R, A), AT, rand(range, sz), zeros(ET, red))
end

# implicit singleton dimensions
@test compare((A,R)->Base.mapreducedim!(identity, +, R, A), AT, rand(range, (2,2)), zeros(ET, (2,)))
@test compare((A,R)->Base.mapreducedim!(identity, +, R, A), AT, rand(range, (2,3)), zeros(ET, (2,)))
end
end

@testsuite "reductions/mapreducedim!_large" (AT, eltypes)->begin
@testset "$ET" for ET in eltypes
Expand All @@ -31,15 +15,25 @@ end
end
end

@testsuite "reductions/reducedim!" (AT, eltypes)->begin
@testsuite "reductions/mapreducedim!" (AT, eltypes)->begin
@testset "$ET" for ET in eltypes
range = ET <: Real ? (ET(1):ET(10)) : ET
for (sz,red) in [(10,)=>(1,), (10,10)=>(1,1), (10,10,10)=>(1,1,1), (10,10,10)=>(10,10,10),
(10,10,10)=>(1,10,10), (10,10,10)=>(10,1,10), (10,10,10)=>(10,10,1),
(0,)=>(1,)]
# mapreducedim!
@test compare((A,R)->Base.mapreducedim!(identity, +, R, A), AT, rand(range, sz), zeros(ET, red))
@test compare((A,R)->Base.mapreducedim!(identity, *, R, A), AT, rand(range, sz), ones(ET, red))
@test compare((A,R)->Base.mapreducedim!(x->x+x, +, R, A), AT, rand(range, sz), zeros(ET, red))

# reducedim!
@test compare((A,R)->Base.reducedim!(+, R, A), AT, rand(range, sz), zeros(ET, red))
@test compare((A,R)->Base.reducedim!(*, R, A), AT, rand(range, sz), ones(ET, red))
end

# implicit singleton dimensions
@test compare((A,R)->Base.mapreducedim!(identity, +, R, A), AT, rand(range, (2,2)), zeros(ET, (2,)))
@test compare((A,R)->Base.mapreducedim!(identity, +, R, A), AT, rand(range, (2,3)), zeros(ET, (2,)))
end
end

Expand All @@ -50,41 +44,22 @@ end
(10,)=>:, (10,10)=>:, (10,10,10)=>:,
(10,10,10)=>[1], (10,10,10)=>[2], (10,10,10)=>[3],
(0,)=>[1]]
# mapreduce
@test compare(A->mapreduce(identity, +, A; dims=dims, init=zero(ET)), AT, rand(range, sz))
@test compare(A->mapreduce(identity, *, A; dims=dims, init=one(ET)), AT, rand(range, sz))
@test compare(A->mapreduce(x->x+x, +, A; dims=dims, init=zero(ET)), AT, rand(range, sz))
end
end
# Test more corner cases. Tests from AcceleraterKernels.jl
# Cover empty (size 0) and non-singleton (size 3) axes; the size-10 loop above
# already covers the common non-edge shape.
for dims in [1,2,3,4,[1,2],[1,3],[1,4],[2,3],[2,4],[3,4],[1,2,3],[1,2,4],[1,3,4],[2,3,4],[1,2,3,4]],
isize in (0, 3), jsize in (0, 3), ksize in (0, 3)
@test compare(A->mapreduce(x->x+x, +, A; init=zero(Int32), dims), AT, rand(Int32(1):Int32(10), isize, jsize, ksize))
end
end

@testsuite "reductions/reduce" (AT, eltypes)->begin
@testset "$ET" for ET in eltypes
range = ET <: Real ? (ET(1):ET(10)) : ET
for (sz,dims) in [(10,)=>[1], (10,10)=>[1,2], (10,10,10)=>[1,2,3], (10,10,10)=>[],
(10,)=>:, (10,10)=>:, (10,10,10)=>:,
(10,10,10)=>[1], (10,10,10)=>[2], (10,10,10)=>[3],
(0,)=>[1]]
# reduce
@test compare(A->reduce(+, A; dims=dims, init=zero(ET)), AT, rand(range, sz))
@test compare(A->reduce(*, A; dims=dims, init=one(ET)), AT, rand(range, sz))
if ET <: Integer
@test compare(A->reduce(&, A; dims=dims, init=~zero(ET)), AT, rand(range, sz))
@test compare(A->reduce(|, A; dims=dims, init=zero(ET)), AT, rand(range, sz))
@test compare(A->reduce(⊻, A; dims=dims, init=zero(ET)), AT, rand(range, sz))
end
end
end
# Test more corner cases. Tests from AcceleraterKernels.jl
# Cover empty (size 0) and non-singleton (size 3) axes; the size-10 loop above
# already covers the common non-edge shape.
for dims in [1,2,3,4,[1,2],[1,3],[1,4],[2,3],[2,4],[3,4],[1,2,3],[1,2,4],[1,3,4],[2,3,4],[1,2,3,4]],
isize in (0, 3), jsize in (0, 3), ksize in (0, 3)
@test compare(A->mapreduce(x->x+x, +, A; init=zero(Int32), dims), AT, rand(Int32(1):Int32(10), isize, jsize, ksize))
@test compare(A->reduce(+, A; init=zero(Int32), dims), AT, rand(Int32(1):Int32(10), isize, jsize, ksize))
end
end
Expand Down Expand Up @@ -124,6 +99,20 @@ end
end
end

@testsuite "reductions/and or xor" (AT, eltypes)->begin
@testset "$ET" for ET in filter(x -> x <: Integer, eltypes)
range = ET <: Real ? (ET(1):ET(10)) : ET
for (sz,dims) in [(10,)=>[1], (10,10)=>[1,2], (10,10,10)=>[1,2,3], (10,10,10)=>[],
(10,)=>:, (10,10)=>:, (10,10,10)=>:,
(10,10,10)=>[1], (10,10,10)=>[2], (10,10,10)=>[3],
(0,)=>[1]]
@test compare(A->reduce(&, A; dims=dims, init=~zero(ET)), AT, rand(range, sz))
@test compare(A->reduce(|, A; dims=dims, init=zero(ET)), AT, rand(range, sz))
@test compare(A->reduce(⊻, A; dims=dims, init=zero(ET)), AT, rand(range, sz))
end
end
end

@testsuite "reductions/minimum maximum extrema" (AT, eltypes)->begin
@testset "$ET" for ET in eltypes
ET <: Complex && continue
Expand Down
Loading