|  | 
| 1 | 1 | ### domain errors | 
|  | 2 | +using IrrationalConstants | 
| 2 | 3 | 
 | 
| 3 | 4 | @test_throws DomainError lambertw(-2.0, 0) | 
| 4 | 5 | @test_throws DomainError lambertw(-2.0, -1) | 
|  | 
| 21 | 22 | @test @inferred(lambertw(MathConstants.e, 0)) == 1 | 
| 22 | 23 | 
 | 
| 23 | 24 | ## value at branch point where real branches meet | 
| 24 |  | -@test lambertw(-inv(MathConstants.e), 0) == lambertw(-inv(MathConstants.e), -1) == -1 | 
| 25 |  | -@test typeof(lambertw(-inv(MathConstants.e), 0)) == typeof(lambertw(-inv(MathConstants.e), -1)) <: AbstractFloat | 
|  | 25 | +@test lambertw(-inve, 0) == lambertw(-inve, -1) == -1 | 
|  | 26 | +@test typeof(lambertw(-inve, 0)) == typeof(lambertw(-inve, -1)) <: AbstractFloat | 
| 26 | 27 | 
 | 
| 27 | 28 | ## convert irrationals to float | 
| 28 | 29 | 
 | 
|  | 
| 76 | 77 | # bug fix | 
| 77 | 78 | # The routine will start at -1/e + eps * im, rather than -1/e + 0im, | 
| 78 | 79 | # otherwise root finding will fail | 
| 79 |  | -@test lambertw(-inv(MathConstants.e) + 0im, -1) ≈ -1 atol=1e-7 | 
|  | 80 | +@test lambertw(-inve + 0im, -1) ≈ -1 atol=1e-7 | 
| 80 | 81 | 
 | 
| 81 | 82 | # lambertw for BigFloat is more precise than Float64. Note | 
| 82 | 83 | # that 70 digits in test is about 35 digits in W | 
|  | 
| 104 | 105 | @testset "lambertwbp()" begin | 
| 105 | 106 |     # not a domain error, but not implemented | 
| 106 | 107 |     @test_throws ArgumentError lambertwbp(1, 1) | 
| 107 |  | -    @test_throws ArgumentError lambertwbp(inv(MathConstants.e) + 1e-5, 2) | 
| 108 |  | -    @test_throws DomainError lambertwbp(inv(MathConstants.e) + 1e-5, 0) | 
| 109 |  | -    @test_throws DomainError lambertwbp(inv(MathConstants.e) + 1e-5, -1) | 
|  | 108 | +    @test_throws ArgumentError lambertwbp(inve + 1e-5, 2) | 
|  | 109 | +    @test_throws DomainError lambertwbp(inve + 1e-5, 0) | 
|  | 110 | +    @test_throws DomainError lambertwbp(inve + 1e-5, -1) | 
| 110 | 111 | 
 | 
| 111 | 112 |     # Expansions about branch point converges almost to machine precision | 
| 112 | 113 |     # except near the radius of convergence. | 
|  | 
| 116 | 117 |         setprecision(2048) do | 
| 117 | 118 |             z = BigFloat(10)^(-12) | 
| 118 | 119 |             for _ in 1:300 | 
| 119 |  | -                @test lambertwbp(Float64(z)) ≈ 1 + lambertw(z - inv(big(MathConstants.e))) atol=5e-16 | 
| 120 |  | -                @test lambertwbp(Float64(z), -1) ≈ 1 + lambertw(z - inv(big(MathConstants.e)), -1) atol=5e-16 | 
|  | 120 | +                @test lambertwbp(Float64(z)) ≈ 1 + lambertw(z - big(inve)) atol=5e-16 | 
|  | 121 | +                @test lambertwbp(Float64(z), -1) ≈ 1 + lambertw(z - big(inve), -1) atol=5e-15 | 
| 121 | 122 | 
 | 
| 122 | 123 |                 z *= 1.1 | 
| 123 | 124 |                 if z > 0.23 break end | 
|  | 
| 127 | 128 | 
 | 
| 128 | 129 |     # test the expansion about branch point for k=-1, | 
| 129 | 130 |     # by comparing to exact BigFloat calculation. | 
| 130 |  | -    @test @inferred(lambertwbp(1e-20, -1)) ≈ 1 + lambertw(-inv(big(MathConstants.e)) + BigFloat(10)^(-20), -1) atol=1e-16 | 
|  | 131 | +    @test @inferred(lambertwbp(1e-20, -1)) ≈ 1 + lambertw(-big(inve) + BigFloat(10)^(-20), -1) atol=1e-16 | 
| 131 | 132 |     @test @inferred(lambertwbp(Complex(.01, .01), -1)) ≈ Complex(-0.2755038208041206, -0.1277888928494641) atol=1e-14 | 
| 132 | 133 | end | 
0 commit comments