xref: /openbsd-src/regress/lib/libm/lgamma/lgamma.c (revision 4afe725ded347c5cfc9be84f90d0678e4afd60e6)
1*4afe725dSotto /*	$OpenBSD: lgamma.c,v 1.3 2016/10/23 18:46:03 otto Exp $	*/
2c97676a6Smartynas 
3c97676a6Smartynas /*
4c97676a6Smartynas  * Written by Martynas Venckus.  Public domain
5c97676a6Smartynas  */
6c97676a6Smartynas 
7*4afe725dSotto #define __POSIX_VISIBLE 201403
8*4afe725dSotto 
9c97676a6Smartynas #include <assert.h>
10c97676a6Smartynas #include <math.h>
11*4afe725dSotto #include <float.h>
12*4afe725dSotto 
13c97676a6Smartynas 
14c97676a6Smartynas int
main(int argc,char * argv[])15c97676a6Smartynas main(int argc, char *argv[])
16c97676a6Smartynas {
17c97676a6Smartynas 	assert(isnan(lgamma(NAN)));
18c97676a6Smartynas 	assert(isnan(lgammaf(NAN)));
19c97676a6Smartynas 
20c97676a6Smartynas 	signgam = 0;
21c97676a6Smartynas 	assert(lgamma(-HUGE_VAL) == HUGE_VAL && signgam == 1);
22c97676a6Smartynas 	signgam = 0;
23ca90fc32Smartynas 	assert(lgammaf(-HUGE_VALF) == HUGE_VALF && signgam == 1);
24ca90fc32Smartynas 	signgam = 0;
25ca90fc32Smartynas 	assert(lgammal(-HUGE_VALL) == HUGE_VALL && signgam == 1);
26c97676a6Smartynas 
27c97676a6Smartynas 	signgam = 0;
28c97676a6Smartynas 	assert(lgamma(HUGE_VAL) == HUGE_VAL && signgam == 1);
29c97676a6Smartynas 	signgam = 0;
30ca90fc32Smartynas 	assert(lgammaf(HUGE_VALF) == HUGE_VALF && signgam == 1);
31ca90fc32Smartynas 	signgam = 0;
32ca90fc32Smartynas 	assert(lgammal(HUGE_VALL) == HUGE_VALL && signgam == 1);
33c97676a6Smartynas 
34c97676a6Smartynas 	signgam = 0;
35c97676a6Smartynas 	assert(lgamma(-0.0) == HUGE_VAL && signgam == -1);
36c97676a6Smartynas 	signgam = 0;
37ca90fc32Smartynas 	assert(lgammaf(-0.0F) == HUGE_VALF && signgam == -1);
38ca90fc32Smartynas 	signgam = 0;
39ca90fc32Smartynas 	assert(lgammal(-0.0L) == HUGE_VALL && signgam == -1);
40c97676a6Smartynas 
41c97676a6Smartynas 	signgam = 0;
42c97676a6Smartynas 	assert(lgamma(0.0) == HUGE_VAL && signgam == 1);
43c97676a6Smartynas 	signgam = 0;
44ca90fc32Smartynas 	assert(lgammaf(0.0F) == HUGE_VALF && signgam == 1);
45ca90fc32Smartynas 	signgam = 0;
46ca90fc32Smartynas 	assert(lgammal(0.0L) == HUGE_VALL && signgam == 1);
47c97676a6Smartynas 
48c97676a6Smartynas 	signgam = 0;
49c97676a6Smartynas 	assert(lgamma(1.0) == 0.0 && signgam == 1);
50c97676a6Smartynas 	signgam = 0;
51ca90fc32Smartynas 	assert(lgammaf(1.0F) == 0.0F && signgam == 1);
52ca90fc32Smartynas 	signgam = 0;
53ca90fc32Smartynas 	assert(lgammal(1.0L) == 0.0L && signgam == 1);
54c97676a6Smartynas 
55c97676a6Smartynas 	signgam = 0;
56*4afe725dSotto 	assert(fabs(lgamma(3.0) - M_LN2) < DBL_EPSILON && signgam == 1);
57c97676a6Smartynas 	signgam = 0;
58*4afe725dSotto 	assert(fabsf(lgammaf(3.0F) - (float)M_LN2) < FLT_EPSILON && signgam == 1);
59ca90fc32Smartynas 	signgam = 0;
60*4afe725dSotto 	assert(fabsl(lgammal(3.0L) - M_LN2l) < LDBL_EPSILON && signgam == 1);
61c97676a6Smartynas 
62c97676a6Smartynas 	return (0);
63c97676a6Smartynas }
64