Skip to content

Commit 57d5e64

Browse files
stevengjKristofferC
authored andcommitted
fix parse(ComplexF64, "inf")
(cherry picked from commit c36e70b)
1 parent da169f1 commit 57d5e64

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

base/parse.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ function tryparse_internal(::Type{Complex{T}}, s::Union{String,SubString{String}
309309
end
310310

311311
if i₊ == 0 # purely real or imaginary value
312-
if iᵢ > 0 # purely imaginary
312+
if iᵢ > i && !(iᵢ == i+1 && s[i] in ('+','-')) # purely imaginary (not "±inf")
313313
x = tryparse_internal(T, s, i, iᵢ-1, raise)
314314
x === nothing && return nothing
315315
return Complex{T}(zero(x),x)

test/parse.jl

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,8 +268,8 @@ end
268268

269269
# parsing complex numbers (#22250)
270270
@testset "complex parsing" begin
271-
for r in (1,0,-1), i in (1,0,-1), sign in ('-','+'), Im in ("i","j","im")
272-
for s1 in (""," "), s2 in (""," "), s3 in (""," "), s4 in (""," ")
271+
for sign in ('-','+'), Im in ("i","j","im"), s1 in (""," "), s2 in (""," "), s3 in (""," "), s4 in (""," ")
272+
for r in (1,0,-1), i in (1,0,-1),
273273
n = Complex(r, sign == '+' ? i : -i)
274274
s = string(s1, r, s2, sign, s3, i, Im, s4)
275275
@test n === parse(Complex{Int}, s)
@@ -283,6 +283,13 @@ end
283283
@test n*parse(T,"1e-3") == parse(Complex{T}, string(s1, r, "e-3", s2, sign, s3, i, "e-3", Im, s4))
284284
end
285285
end
286+
for r in (-1.0,-1e-9,Inf,-Inf,NaN), i in (-1.0,-1e-9,Inf,NaN)
287+
n = Complex(r, sign == '+' ? i : -i)
288+
s = lowercase(string(s1, r, s2, sign, s3, i, Im, s4))
289+
@test n === parse(ComplexF64, s)
290+
@test Complex(r) === parse(ComplexF64, string(s1, r, s2))
291+
@test Complex(0,i) === parse(ComplexF64, string(s3, i, Im, s4))
292+
end
286293
end
287294
@test parse(Complex{Float16}, "3.3+4i") === Complex{Float16}(3.3+4im)
288295
@test parse(Complex{Int}, SubString("xxxxxx1+2imxxxx", 7, 10)) === 1+2im

0 commit comments

Comments
 (0)