summaryrefslogtreecommitdiffstats
path: root/regress/lib/libm/lgamma/lgamma.c
blob: 1bc763c5966942f52779dabea7eab52b4d0649d9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*	$OpenBSD: lgamma.c,v 1.3 2016/10/23 18:46:03 otto Exp $	*/

/*
 * Written by Martynas Venckus.  Public domain
 */

#define __POSIX_VISIBLE 201403

#include <assert.h>
#include <math.h>
#include <float.h>


int
main(int argc, char *argv[])
{
	assert(isnan(lgamma(NAN)));
	assert(isnan(lgammaf(NAN)));

	signgam = 0;
	assert(lgamma(-HUGE_VAL) == HUGE_VAL && signgam == 1);
	signgam = 0;
	assert(lgammaf(-HUGE_VALF) == HUGE_VALF && signgam == 1);
	signgam = 0;
	assert(lgammal(-HUGE_VALL) == HUGE_VALL && signgam == 1);

	signgam = 0;
	assert(lgamma(HUGE_VAL) == HUGE_VAL && signgam == 1);
	signgam = 0;
	assert(lgammaf(HUGE_VALF) == HUGE_VALF && signgam == 1);
	signgam = 0;
	assert(lgammal(HUGE_VALL) == HUGE_VALL && signgam == 1);

	signgam = 0;
	assert(lgamma(-0.0) == HUGE_VAL && signgam == -1);
	signgam = 0;
	assert(lgammaf(-0.0F) == HUGE_VALF && signgam == -1);
	signgam = 0;
	assert(lgammal(-0.0L) == HUGE_VALL && signgam == -1);

	signgam = 0;
	assert(lgamma(0.0) == HUGE_VAL && signgam == 1);
	signgam = 0;
	assert(lgammaf(0.0F) == HUGE_VALF && signgam == 1);
	signgam = 0;
	assert(lgammal(0.0L) == HUGE_VALL && signgam == 1);

	signgam = 0;
	assert(lgamma(1.0) == 0.0 && signgam == 1);
	signgam = 0;
	assert(lgammaf(1.0F) == 0.0F && signgam == 1);
	signgam = 0;
	assert(lgammal(1.0L) == 0.0L && signgam == 1);

	signgam = 0;
	assert(fabs(lgamma(3.0) - M_LN2) < DBL_EPSILON && signgam == 1);
	signgam = 0;
	assert(fabsf(lgammaf(3.0F) - (float)M_LN2) < FLT_EPSILON && signgam == 1);
	signgam = 0;
	assert(fabsl(lgammal(3.0L) - M_LN2l) < LDBL_EPSILON && signgam == 1);

	return (0);
}