xref: /openbsd-src/regress/lib/libm/modf/modf_test.c (revision 3a33360ffe34d766df55e0225e9706e366c93e3a)
1*3a33360fSmiod /*	$OpenBSD: modf_test.c,v 1.1 2023/08/13 07:02:36 miod Exp $	*/
2*3a33360fSmiod 
3*3a33360fSmiod /*
4*3a33360fSmiod  * Written by Willemijn Coene.  Public domain
5*3a33360fSmiod  */
6*3a33360fSmiod 
7*3a33360fSmiod #include <assert.h>
8*3a33360fSmiod #include <math.h>
9*3a33360fSmiod 
10*3a33360fSmiod void
modff_infnan(void)11*3a33360fSmiod modff_infnan(void)
12*3a33360fSmiod {
13*3a33360fSmiod 	float f, i;
14*3a33360fSmiod 
15*3a33360fSmiod 	f = modff(__builtin_inff(), &i);
16*3a33360fSmiod 	assert(isinf(i));
17*3a33360fSmiod 	assert(signbit(i) == 0);
18*3a33360fSmiod 	assert(f == 0.0f);
19*3a33360fSmiod 
20*3a33360fSmiod 	f = modff(-__builtin_inff(), &i);
21*3a33360fSmiod 	assert(isinf(i));
22*3a33360fSmiod 	assert(signbit(i) != 0);
23*3a33360fSmiod 	assert(f == -0.0f);
24*3a33360fSmiod 
25*3a33360fSmiod 	f = modff(NAN, &i);
26*3a33360fSmiod 	assert(isnan(i));
27*3a33360fSmiod 	assert(signbit(i) == 0);
28*3a33360fSmiod 	assert(isnan(f));
29*3a33360fSmiod 	assert(signbit(f) == 0);
30*3a33360fSmiod 
31*3a33360fSmiod 	f = modff(-NAN, &i);
32*3a33360fSmiod 	assert(isnan(i));
33*3a33360fSmiod 	assert(signbit(i) != 0);
34*3a33360fSmiod 	assert(isnan(f));
35*3a33360fSmiod 	assert(signbit(f) != 0);
36*3a33360fSmiod }
37*3a33360fSmiod 
38*3a33360fSmiod void
modfl_infnan(void)39*3a33360fSmiod modfl_infnan(void)
40*3a33360fSmiod {
41*3a33360fSmiod 	long double f, i;
42*3a33360fSmiod 
43*3a33360fSmiod 	f = modfl(__builtin_infl(), &i);
44*3a33360fSmiod 	assert(isinf(i));
45*3a33360fSmiod 	assert(signbit(i) == 0);
46*3a33360fSmiod 	assert(f == 0.0L);
47*3a33360fSmiod 
48*3a33360fSmiod 	f = modfl(-__builtin_infl(), &i);
49*3a33360fSmiod 	assert(isinf(i));
50*3a33360fSmiod 	assert(signbit(i) != 0);
51*3a33360fSmiod 	assert(f == -0.0L);
52*3a33360fSmiod 
53*3a33360fSmiod 	f = modfl(NAN, &i);
54*3a33360fSmiod 	assert(isnan(i));
55*3a33360fSmiod 	assert(signbit(i) == 0);
56*3a33360fSmiod 	assert(isnan(f));
57*3a33360fSmiod 	assert(signbit(f) == 0);
58*3a33360fSmiod 
59*3a33360fSmiod 	f = modfl(-NAN, &i);
60*3a33360fSmiod 	assert(isnan(i));
61*3a33360fSmiod 	assert(signbit(i) != 0);
62*3a33360fSmiod 	assert(isnan(f));
63*3a33360fSmiod 	assert(signbit(f) != 0);
64*3a33360fSmiod }
65*3a33360fSmiod 
66*3a33360fSmiod int
main(void)67*3a33360fSmiod main(void)
68*3a33360fSmiod {
69*3a33360fSmiod 	modff_infnan();
70*3a33360fSmiod 	modfl_infnan();
71*3a33360fSmiod }
72