@@ -195,15 +195,31 @@ end
195195
196196 _x = [[1.0 , 2.0 , 3.0 ] [1.0 , 2.0 , 3.0 ] .+ 1000. ]
197197 for x in (_x, complex (_x))
198- @test @inferred (logsumexp (x; dims= 1 )) ≈ [3.40760596444438 1003.40760596444438 ]
199- @test @inferred (logsumexp (x; dims= [1 , 2 ])) ≈ [1003.4076059644444 ]
198+ expected = [3.40760596444438 1003.40760596444438 ]
199+ @test @inferred (logsumexp (x; dims= 1 )) ≈ expected
200+ out = Array {eltype(x)} (undef, 1 , 2 )
201+ @test @inferred (logsumexp! (out, x)) ≈ expected
202+ @test out ≈ expected
203+
200204 y = copy (x' )
201- @test @inferred (logsumexp (y; dims= 2 )) ≈ [3.40760596444438 , 1003.40760596444438 ]
205+ expected = [3.40760596444438 , 1003.40760596444438 ]
206+ @test @inferred (logsumexp (y; dims= 2 )) ≈ expected
207+ out = Array {eltype(y)} (undef, 2 )
208+ @test @inferred (logsumexp! (out, y)) ≈ expected
209+ @test out ≈ expected
210+
211+ expected = [1003.4076059644444 ]
212+ @test @inferred (logsumexp (x; dims= [1 , 2 ])) ≈ expected
213+ out = Array {eltype(x)} (undef, 1 )
214+ @test @inferred (logsumexp! (out, x)) ≈ expected
215+ @test out ≈ expected
202216 end
203217
204218 # check underflow
205219 @test logsumexp ([1e-20 , log (1e-20 )]) ≈ 2e-20
206220 @test logsumexp (Complex{Float64}[1e-20 , log (1e-20 )]) ≈ 2e-20
221+ @test logsumexp! ([1.0 ], [1e-20 , log (1e-20 )]) ≈ [2e-20 ]
222+ @test logsumexp! (Complex{Float64}[1.0 ], Complex{Float64}[1e-20 , log (1e-20 )]) ≈ [2e-20 ]
207223
208224 let cases = [([- Inf , - Inf ], - Inf ), # correct handling of all -Inf
209225 ([- Inf , - Inf32 ], - Inf ), # promotion
216232 @test logaddexp (arguments... ) ≡ result
217233 @test logsumexp (arguments) ≡ result
218234 @test logsumexp (complex (arguments)) ≡ complex (result)
235+
236+ FT = float (eltype (arguments))
237+ out = [one (FT)]
238+ @test logsumexp! (out, arguments)[1 ] ≡ result
239+ @test out[1 ] ≡ result
240+
241+ out = [one (complex (FT))]
242+ @test logsumexp! (out, complex (arguments))[1 ] ≡ complex (result)
243+ @test out[1 ] ≡ complex (result)
219244 end
220245 end
221246
250275 @test isnan (logsumexp (Complex{Float64}[NaN * im, 9.0 ]))
251276 @test isnan (logsumexp (Complex{Float64}[NaN * im, Inf ]))
252277 @test isnan (logsumexp (Complex{Float64}[NaN * im, - Inf ]))
278+ @test isnan (logsumexp! ([1.0 ], [NaN , 9.0 ])[1 ])
279+ @test isnan (logsumexp! ([1.0 ], [NaN , Inf ])[1 ])
280+ @test isnan (logsumexp! ([1.0 ], [NaN , - Inf ])[1 ])
281+ @test isnan (logsumexp! (Complex{Float64}[1.0 ], Complex{Float64}[NaN , 9.0 ])[1 ])
282+ @test isnan (logsumexp! (Complex{Float64}[1.0 ], Complex{Float64}[NaN , Inf ])[1 ])
283+ @test isnan (logsumexp! (Complex{Float64}[1.0 ], Complex{Float64}[NaN , - Inf ])[1 ])
284+ @test isnan (logsumexp! (Complex{Float64}[1.0 ], Complex{Float64}[NaN * im, 9.0 ])[1 ])
285+ @test isnan (logsumexp! (Complex{Float64}[1.0 ], Complex{Float64}[NaN * im, Inf ])[1 ])
286+ @test isnan (logsumexp! (Complex{Float64}[1.0 ], Complex{Float64}[NaN * im, - Inf ])[1 ])
253287
254288 # logsumexp with general iterables (issue #63)
255289 xs = range (- 500 , stop = 10 , length = 1000 )
0 commit comments