diff --git a/base/array.jl b/base/array.jl index 04fd8bf09bf4a1..d0194e6490c4ec 100644 --- a/base/array.jl +++ b/base/array.jl @@ -821,36 +821,38 @@ function findmax(a) if isempty(a) throw(ArgumentError("collection must be non-empty")) end - i = start(a) - mi = i - m, i = next(a, i) - while !done(a, i) + s = start(a) + mi = i = 1 + m, s = next(a, s) + while !done(a, s) + i += 1 iold = i - ai, i = next(a, i) + ai, s = next(a, s) if ai > m || m!=m m = ai mi = iold end end - return (m, iterstate(mi)) + return (m, mi) end function findmin(a) if isempty(a) throw(ArgumentError("collection must be non-empty")) end - i = start(a) - mi = i - m, i = next(a, i) - while !done(a, i) + s = start(a) + mi = i = 1 + m, s = next(a, s) + while !done(a, s) + i += 1 iold = i - ai, i = next(a, i) + ai, s = next(a, s) if ai < m || m!=m m = ai mi = iold end end - return (m, iterstate(mi)) + return (m, mi) end indmax(a) = findmax(a)[2] diff --git a/test/arrayops.jl b/test/arrayops.jl index 7fd2cfe857026d..24d24c2d296249 100644 --- a/test/arrayops.jl +++ b/test/arrayops.jl @@ -306,7 +306,7 @@ for i = 1:3 end @test isequal(a,findn(z)) -#argmin argmax +#findmin findmax indmin indmax @test indmax([10,12,9,11]) == 2 @test indmin([10,12,9,11]) == 3 @test findmin([NaN,3.2,1.8]) == (1.8,3) @@ -316,6 +316,16 @@ end @test findmin([3.2,1.8,NaN,2.0]) == (1.8,2) @test findmax([3.2,1.8,NaN,2.0]) == (3.2,1) +# #14085 +@test findmax(4:9) == (9,6) +@test indmax(4:9) == 6 +@test findmin(4:9) == (4,1) +@test indmin(4:9) == 1 +@test findmax(5:-2:1) == (5,1) +@test indmax(5:-2:1) == 1 +@test findmin(5:-2:1) == (1,3) +@test indmin(5:-2:1) == 3 + ## permutedims ## #keeps the num of dim