fnmatch: fix "[/b" test
[libc-test] / src / math / modf.c
1 #include <stdio.h>
2 #include <math.h>
3 #include "test.h"
4
5 static struct {
6         double x;
7         double yf;
8         double yi;
9 } t[] = {
10         0.7, 0x1.6666666666666p-1, 0.0,
11         -0.7, -0x1.6666666666666p-1, -0.0,
12         1.7, 0x1.6666666666666p-1, 1.0,
13         -1.7, -0x1.6666666666666p-1, -1.0,
14         2.0, 0.0, 2.0,
15         -2.0, -0.0, -2.0,
16         -0x1p99, -0.0, -0x1p99,
17         -0.0, -0.0, -0.0,
18         INFINITY, 0.0, INFINITY,
19         -INFINITY, -0.0, -INFINITY,
20         NAN, NAN, NAN,
21 };
22
23 static struct {
24         float x;
25         float yf;
26         float yi;
27 } tf[] = {
28         0.7, 0x1.666666p-1, 0.0,
29         -0.7, -0x1.666666p-1, -0.0,
30         1.7, 0x1.666668p-1, 1.0,
31         -1.7, -0x1.666668p-1, -1.0,
32         2.0, 0.0, 2.0,
33         -2.0, -0.0, -2.0,
34         -0x1p99, -0.0, -0x1p99,
35         -0.0, -0.0, -0.0,
36         INFINITY, 0.0, INFINITY,
37         -INFINITY, -0.0, -INFINITY,
38         NAN, NAN, NAN,
39 };
40
41 static struct {
42         long double x;
43         long double yf;
44         long double yi;
45 } tl[] = {
46         0.7L, 0x1.6666666666666666p-1L, 0.0,
47         -0.7L, -0x1.6666666666666666p-1L, -0.0,
48         1.7L, 0x1.6666666666666668p-1L, 1.0,
49         -1.7L, -0x1.6666666666666668p-1L, -1.0,
50         2.0, 0, 2.0,
51         -2.0, -0.0, -2.0,
52         -0x1p99, -0.0, -0x1p99,
53         -0.0, -0.0, -0.0,
54         INFINITY, 0.0, INFINITY,
55         -INFINITY, -0.0, -INFINITY,
56         NAN, NAN, NAN,
57 };
58
59 #define eq(a, b) ((isnan(a) && isnan(b)) || ((a) == (b) && signbit(a) == signbit(b)))
60
61 void test_modf()
62 {
63         double yf, yi;
64         int i;
65         for (i = 0; i < sizeof t/sizeof *t; i++) {
66                 yf = modf(t[i].x, &yi);
67                 if (!eq(yf,t[i].yf) || !eq(yi,t[i].yi))
68                         error("modf(%a) want %a %a got %a %a\n", t[i].x, t[i].yf, t[i].yi, yf, yi);
69         }
70 }
71 void test_modff()
72 {
73         float yf, yi;
74         int i;
75         for (i = 0; i < sizeof tf/sizeof *tf; i++) {
76                 yf = modff(tf[i].x, &yi);
77                 if (!eq(yf,tf[i].yf) || !eq(yi,tf[i].yi))
78                         error("modff(%a) want %a %a got %a %a\n", tf[i].x, tf[i].yf, tf[i].yi, yf, yi);
79         }
80 }
81 void test_modfl()
82 {
83         long double yf, yi;
84         int i;
85         for (i = 0; i < sizeof tl/sizeof *tl; i++) {
86                 yf = modfl(tl[i].x, &yi);
87                 if (!eq(yf,tl[i].yf) || !eq(yi,tl[i].yi))
88                         error("modfl(%La) want %La %La got %La %La\n", tl[i].x, tl[i].yf, tl[i].yi, yf, yi);
89         }
90 }
91
92 void bench_modf_small(int N)
93 {
94         int i;
95         double yi;
96         volatile double yf;
97
98         for (i = 0; i < N; i++)
99                 yf = modf(1234.5678, &yi);
100 }
101
102 void bench_modf_negint(int N)
103 {
104         int i;
105         double yi;
106         volatile double yf;
107
108         for (i = 0; i < N; i++)
109                 yf = modf(-1234.0, &yi);
110 }
111
112 void bench_modf_large(int N)
113 {
114         int i;
115         double yi;
116         volatile double yf;
117
118         for (i = 0; i < N; i++)
119                 yf = modf(1.2345678e300, &yi);
120 }
121
122
123 void bench_modff_small(int N)
124 {
125         int i;
126         float yi;
127         volatile float yf;
128
129         for (i = 0; i < N; i++)
130                 yf = modff(1234.5678, &yi);
131 }
132
133 void bench_modff_negint(int N)
134 {
135         int i;
136         float yi;
137         volatile float yf;
138
139         for (i = 0; i < N; i++)
140                 yf = modff(-1234.0, &yi);
141 }
142
143 void bench_modff_large(int N)
144 {
145         int i;
146         float yi;
147         volatile float yf;
148
149         for (i = 0; i < N; i++)
150                 yf = modff(1.2345678e100, &yi);
151 }