Skip to content

Commit d5699ed

Browse files
Basic tests, but not comprehensive assessment of ulp error
1 parent 200a611 commit d5699ed

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

test/e_lgamma_r.jl

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# From openlibm/test/libm-test-ulps.h, openlibm/test/libm-test.c
2+
3+
using SpecialFunctions: _lgamma_r, _loggamma_r, _lgammaf_r, _loggammaf_r
4+
5+
# lgamma_test block
6+
for (T, lgamma, labsgamma) in ((Float64, _loggamma_r, _lgamma_r),
7+
(Float32, _loggammaf_r, _lgammaf_r))
8+
@testset "lgamma_test, $T" begin
9+
@test lgamma(T(Inf)) === T(Inf)
10+
@test lgamma(T(0)) === T(Inf)
11+
@test lgamma(T(NaN)) === T(NaN)
12+
13+
@test lgamma(T(-3)) === T(Inf)
14+
@test lgamma(T(-Inf)) === T(Inf)
15+
16+
# lgamma(1) == 0, lgamma (1) sets signgam to 1
17+
y, signgam = labsgamma(T(1))
18+
@test y === T(0.0)
19+
@test signgam == 1
20+
21+
# lgamma(3) == log(2), lgamma (3) sets signgam to 1
22+
y, signgam = labsgamma(T(3))
23+
@test y === log(T(2.0))
24+
@test signgam == 1
25+
26+
# lgamma(0.5) == log(sqrt(pi)), lgamma(0.5) sets signgam to 1
27+
y, signgam = labsgamma(T(0.5))
28+
@test y === T(0.5log(π))
29+
@test signgam == 1
30+
31+
# lgamma(-0.5) == log(2sqrt(pi)), lgamma(-0.5) sets signgam to -1
32+
y, signgam = labsgamma(T(-0.5))
33+
@test y === T(0.5log(4π))
34+
@test signgam == -1
35+
@test_throws DomainError lgamma(T(-0.5))
36+
37+
# In the two "broken" tests, an exact match not possible, even
38+
# in Float64, thus, we check for as close a tolerance as
39+
# possible.
40+
41+
# lgamma(0.7) == 0.26086724653166651439, lgamma(0.7) sets signgam to 1
42+
y, signgam = labsgamma(T(0.7))
43+
# @test_broken y === 0.26086724653166651439
44+
if T === Float64
45+
@test y 0.26086724653166651439 atol=6e-17
46+
else
47+
@test y 0.26086724653166651439 atol=3e-8
48+
end
49+
@test signgam == 1
50+
51+
# lgamma(1.2) == -0.853740900033158497197e-1, lgamma(1.2) sets signgam to 1
52+
y, signgam = labsgamma(T(1.2))
53+
# @test_broken y === -0.853740900033158497197e-1
54+
if T === Float64
55+
@test y -0.853740900033158497197e-1 atol=2e-17
56+
else
57+
@test y -0.853740900033158497197e-1 atol=2e-8
58+
end
59+
@test signgam == 1
60+
end
61+
end

0 commit comments

Comments
 (0)