1
1
# From openlibm/test/libm-test-ulps.h, openlibm/test/libm-test.c
2
2
3
- using SpecialFunctions: _lgamma_r, _lgammaf_r
4
-
5
3
# lgamma_test block
6
- for (T, lgamma) in ((Float64, _lgamma_r), (Float32, _lgammaf_r))
4
+ # for (T, lgamma) in ((Float64, _lgamma_r), (Float32, _lgammaf_r))
5
+ for T in (Float64, Float32)
7
6
@testset " lgamma_test, $T " begin
8
- @test lgamma (T (Inf ))[1 ] === T (Inf )
9
- @test lgamma (T (0 ))[1 ] === T (Inf )
10
- @test lgamma (T (NaN ))[1 ] === T (NaN )
7
+ @test logabsgamma (T (Inf ))[1 ] === T (Inf )
8
+ @test logabsgamma (T (0 ))[1 ] === T (Inf )
9
+ @test logabsgamma (T (NaN ))[1 ] === T (NaN )
11
10
12
- @test lgamma (T (- 3 ))[1 ] === T (Inf )
13
- @test lgamma (T (- Inf ))[1 ] === T (Inf )
11
+ @test logabsgamma (T (- 3 ))[1 ] === T (Inf )
12
+ @test logabsgamma (T (- Inf ))[1 ] === T (Inf )
14
13
15
- # lgamma (1) == 0, lgamma (1) sets signgam to 1
16
- y, signgam = labsgamma (T (1 ))
14
+ # logabsgamma (1) == 0, lgamma (1) sets signgam to 1
15
+ y, signgam = logabsgamma (T (1 ))
17
16
@test y === T (0.0 )
18
17
@test signgam == 1
19
18
20
- # lgamma (3) == log(2), lgamma (3) sets signgam to 1
21
- y, signgam = labsgamma (T (3 ))
19
+ # logabsgamma (3) == log(2), lgamma (3) sets signgam to 1
20
+ y, signgam = logabsgamma (T (3 ))
22
21
@test y === log (T (2.0 ))
23
22
@test signgam == 1
24
23
25
- # lgamma (0.5) == log(sqrt(pi)), lgamma (0.5) sets signgam to 1
26
- y, signgam = labsgamma (T (0.5 ))
24
+ # logabsgamma (0.5) == log(sqrt(pi)), logabsgamma (0.5) sets signgam to 1
25
+ y, signgam = logabsgamma (T (0.5 ))
27
26
@test y === T (0.5 log (π))
28
27
@test signgam == 1
29
28
30
- # lgamma (-0.5) == log(2sqrt(pi)), lgamma (-0.5) sets signgam to -1
31
- y, signgam = labsgamma (T (- 0.5 ))
29
+ # logabsgamma (-0.5) == log(2sqrt(pi)), logabsgamma (-0.5) sets signgam to -1
30
+ y, signgam = logabsgamma (T (- 0.5 ))
32
31
@test y === T (0.5 log (4 π))
33
32
@test signgam == - 1
34
33
35
34
# In the two "broken" tests, an exact match not possible, even
36
35
# in Float64, thus, we check for as close a tolerance as
37
36
# possible.
38
37
39
- # lgamma (0.7) == 0.26086724653166651439, lgamma (0.7) sets signgam to 1
40
- y, signgam = labsgamma (T (0.7 ))
38
+ # logabsgamma (0.7) == 0.26086724653166651439, logabsgamma (0.7) sets signgam to 1
39
+ y, signgam = logabsgamma (T (0.7 ))
41
40
# @test_broken y === 0.26086724653166651439
42
41
if T === Float64
43
42
@test y ≈ 0.26086724653166651439 atol= 6e-17
@@ -46,8 +45,8 @@ for (T, lgamma) in ((Float64, _lgamma_r), (Float32, _lgammaf_r))
46
45
end
47
46
@test signgam == 1
48
47
49
- # lgamma (1.2) == -0.853740900033158497197e-1, lgamma (1.2) sets signgam to 1
50
- y, signgam = labsgamma (T (1.2 ))
48
+ # logabsgamma (1.2) == -0.853740900033158497197e-1, logabsgamma (1.2) sets signgam to 1
49
+ y, signgam = logabsgamma (T (1.2 ))
51
50
# @test_broken y === -0.853740900033158497197e-1
52
51
if T === Float64
53
52
@test y ≈ - 0.853740900033158497197e-1 atol= 2e-17
@@ -72,9 +71,7 @@ function openlibm_logabsgamma(x::Float32)
72
71
return y, Int (signp[])
73
72
end
74
73
75
- meetstol (x:: Float64 , atol) = isapprox (openlibm_logabsgamma (x)[1 ], _lgamma_r (x)[1 ], atol= atol)
76
- meetstol (x:: Float32 , atol) = isapprox (openlibm_logabsgamma (x)[1 ], _lgammaf_r (x)[1 ], atol= atol)
77
-
74
+ meetstol (x, atol) = isapprox (openlibm_logabsgamma (x)[1 ], logabsgamma (x)[1 ], atol= atol)
78
75
79
76
@testset " logabsgamma validation against OpenLibm, Float64" begin
80
77
@test all (x -> meetstol (x, 1e-13 ), - 50 : 1e-4 : 50 )
0 commit comments