|
278 | 278 |
|
279 | 279 | # parsing complex numbers (#22250)
|
280 | 280 | @testset "complex parsing" begin
|
281 |
| - for r in (1,0,-1), i in (1,0,-1), sign in ('-','+'), Im in ("i","j","im") |
282 |
| - for s1 in (""," "), s2 in (""," "), s3 in (""," "), s4 in (""," ") |
| 281 | + for sign in ('-','+'), Im in ("i","j","im"), s1 in (""," "), s2 in (""," "), s3 in (""," "), s4 in (""," ") |
| 282 | + for r in (1,0,-1), i in (1,0,-1), |
283 | 283 | n = Complex(r, sign == '+' ? i : -i)
|
284 | 284 | s = string(s1, r, s2, sign, s3, i, Im, s4)
|
285 | 285 | @test n === parse(Complex{Int}, s)
|
|
293 | 293 | @test n*parse(T,"1e-3") == parse(Complex{T}, string(s1, r, "e-3", s2, sign, s3, i, "e-3", Im, s4))
|
294 | 294 | end
|
295 | 295 | end
|
| 296 | + for r in (-1.0,-1e-9,Inf,-Inf,NaN), i in (-1.0,-1e-9,Inf,NaN) |
| 297 | + n = Complex(r, sign == '+' ? i : -i) |
| 298 | + s = lowercase(string(s1, r, s2, sign, s3, i, Im, s4)) |
| 299 | + @test n === parse(ComplexF64, s) |
| 300 | + @test Complex(r) === parse(ComplexF64, string(s1, r, s2)) |
| 301 | + @test Complex(0,i) === parse(ComplexF64, string(s3, i, Im, s4)) |
| 302 | + end |
296 | 303 | end
|
297 | 304 | @test parse(Complex{Float16}, "3.3+4i") === Complex{Float16}(3.3+4im)
|
298 | 305 | @test parse(Complex{Int}, SubString("xxxxxx1+2imxxxx", 7, 10)) === 1+2im
|
|
338 | 345 | # Ensure dotting binary doesn't break dotting unary
|
339 | 346 | @test Meta.parse(".~[1,2]") == Expr(:call, :.~, Expr(:vect, 1, 2))
|
340 | 347 | end
|
| 348 | + |
| 349 | +@testset "inf and nan parsing" begin |
| 350 | + for (v,vs) in ((NaN,"nan"), (Inf,"inf"), (Inf,"infinity")), sbefore in ("", " "), safter in ("", " "), sign in (+, -), case in (lowercase, uppercase) |
| 351 | + s = case(string(sbefore, sign, vs, safter)) |
| 352 | + @test isequal(parse(Float64, s), sign(v)) |
| 353 | + end |
| 354 | +end |
0 commit comments