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
10void
11modff_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
38void
39modfl_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
66int
67main(void)
68{
69	modff_infnan();
70	modfl_infnan();
71}
72