Skip to content

Commit 4b5f6cb

Browse files
Defining neutral_element for xor () and fix it for and (&). (#602)
* Defining zero(T) as the neutral element for xor. * Modify neutral_element for & to ~zero(T). Included logical operators in the test suite.
1 parent 3c16583 commit 4b5f6cb

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

src/host/mapreduce.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@ neutral_element(op, T) =
1515
Please pass it as an explicit argument to `GPUArrays.mapreducedim!`,
1616
or register it globally by defining `GPUArrays.neutral_element(::typeof($op), T)`.""")
1717
neutral_element(::typeof(Base.:(|)), T) = zero(T)
18+
neutral_element(::typeof(Base.:()), T) = zero(T)
19+
neutral_element(::typeof(Base.:(&)), T) = ~zero(T)
1820
neutral_element(::typeof(Base.:(+)), T) = zero(T)
1921
neutral_element(::typeof(Base.add_sum), T) = zero(T)
20-
neutral_element(::typeof(Base.:(&)), T) = one(T)
2122
neutral_element(::typeof(Base.:(*)), T) = one(T)
2223
neutral_element(::typeof(Base.mul_prod), T) = one(T)
2324
neutral_element(::typeof(Base.min), T) = typemax(T)

test/testsuite/reductions.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@ end
6666
(0,)=>[1]]
6767
@test compare(A->reduce(+, A; dims=dims, init=zero(ET)), AT, rand(range, sz))
6868
@test compare(A->reduce(*, A; dims=dims, init=one(ET)), AT, rand(range, sz))
69+
if ET <: Integer
70+
@test compare(A->reduce(&, A; dims=dims, init=~zero(ET)), AT, rand(range, sz))
71+
@test compare(A->reduce(|, A; dims=dims, init=zero(ET)), AT, rand(range, sz))
72+
@test compare(A->reduce(, A; dims=dims, init=zero(ET)), AT, rand(range, sz))
73+
end
6974
end
7075
end
7176
end

0 commit comments

Comments
 (0)