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