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