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