xref: /netbsd-src/sys/external/bsd/compiler_rt/dist/test/Unit/powisf2_test.c (revision b9829059e8a75f40496c2d279251f331078ac82e)
1*b9829059Sjoerg //===-- powisf2_test.cpp - Test __powisf2 ---------------------------------===//
2*b9829059Sjoerg //
3*b9829059Sjoerg //                     The LLVM Compiler Infrastructure
4*b9829059Sjoerg //
5*b9829059Sjoerg // This file is dual licensed under the MIT and the University of Illinois Open
6*b9829059Sjoerg // Source Licenses. See LICENSE.TXT for details.
7*b9829059Sjoerg //
8*b9829059Sjoerg //===----------------------------------------------------------------------===//
9*b9829059Sjoerg //
10*b9829059Sjoerg // This file tests __powisf2 for the compiler_rt library.
11*b9829059Sjoerg //
12*b9829059Sjoerg //===----------------------------------------------------------------------===//
13*b9829059Sjoerg 
14*b9829059Sjoerg #include "int_lib.h"
15*b9829059Sjoerg #include <stdio.h>
16*b9829059Sjoerg #include <math.h>
17*b9829059Sjoerg 
18*b9829059Sjoerg // Returns: a ^ b
19*b9829059Sjoerg 
20*b9829059Sjoerg float __powisf2(float a, si_int b);
21*b9829059Sjoerg 
test__powisf2(float a,si_int b,float expected)22*b9829059Sjoerg int test__powisf2(float a, si_int b, float expected)
23*b9829059Sjoerg {
24*b9829059Sjoerg     float x = __powisf2(a, b);
25*b9829059Sjoerg     int correct = (x == expected) && (signbit(x) == signbit(expected));
26*b9829059Sjoerg     if (!correct)
27*b9829059Sjoerg         printf("error in __powisf2(%f, %d) = %f, expected %f\n",
28*b9829059Sjoerg                a, b, x, expected);
29*b9829059Sjoerg     return !correct;
30*b9829059Sjoerg }
31*b9829059Sjoerg 
main()32*b9829059Sjoerg int main()
33*b9829059Sjoerg {
34*b9829059Sjoerg     if (test__powisf2(0, 0, 1))
35*b9829059Sjoerg         return 1;
36*b9829059Sjoerg     if (test__powisf2(1, 0, 1))
37*b9829059Sjoerg         return 1;
38*b9829059Sjoerg     if (test__powisf2(1.5, 0, 1))
39*b9829059Sjoerg         return 1;
40*b9829059Sjoerg     if (test__powisf2(2, 0, 1))
41*b9829059Sjoerg         return 1;
42*b9829059Sjoerg     if (test__powisf2(INFINITY, 0, 1))
43*b9829059Sjoerg         return 1;
44*b9829059Sjoerg 
45*b9829059Sjoerg     if (test__powisf2(-0., 0, 1))
46*b9829059Sjoerg         return 1;
47*b9829059Sjoerg     if (test__powisf2(-1, 0, 1))
48*b9829059Sjoerg         return 1;
49*b9829059Sjoerg     if (test__powisf2(-1.5, 0, 1))
50*b9829059Sjoerg         return 1;
51*b9829059Sjoerg     if (test__powisf2(-2, 0, 1))
52*b9829059Sjoerg         return 1;
53*b9829059Sjoerg     if (test__powisf2(-INFINITY, 0, 1))
54*b9829059Sjoerg         return 1;
55*b9829059Sjoerg 
56*b9829059Sjoerg     if (test__powisf2(0, 1, 0))
57*b9829059Sjoerg         return 1;
58*b9829059Sjoerg     if (test__powisf2(0, 2, 0))
59*b9829059Sjoerg         return 1;
60*b9829059Sjoerg     if (test__powisf2(0, 3, 0))
61*b9829059Sjoerg         return 1;
62*b9829059Sjoerg     if (test__powisf2(0, 4, 0))
63*b9829059Sjoerg         return 1;
64*b9829059Sjoerg     if (test__powisf2(0, 0x7FFFFFFE, 0))
65*b9829059Sjoerg         return 1;
66*b9829059Sjoerg     if (test__powisf2(0, 0x7FFFFFFF, 0))
67*b9829059Sjoerg         return 1;
68*b9829059Sjoerg 
69*b9829059Sjoerg     if (test__powisf2(-0., 1, -0.))
70*b9829059Sjoerg         return 1;
71*b9829059Sjoerg     if (test__powisf2(-0., 2, 0))
72*b9829059Sjoerg         return 1;
73*b9829059Sjoerg     if (test__powisf2(-0., 3, -0.))
74*b9829059Sjoerg         return 1;
75*b9829059Sjoerg     if (test__powisf2(-0., 4, 0))
76*b9829059Sjoerg         return 1;
77*b9829059Sjoerg     if (test__powisf2(-0., 0x7FFFFFFE, 0))
78*b9829059Sjoerg         return 1;
79*b9829059Sjoerg     if (test__powisf2(-0., 0x7FFFFFFF, -0.))
80*b9829059Sjoerg         return 1;
81*b9829059Sjoerg 
82*b9829059Sjoerg     if (test__powisf2(1, 1, 1))
83*b9829059Sjoerg         return 1;
84*b9829059Sjoerg     if (test__powisf2(1, 2, 1))
85*b9829059Sjoerg         return 1;
86*b9829059Sjoerg     if (test__powisf2(1, 3, 1))
87*b9829059Sjoerg         return 1;
88*b9829059Sjoerg     if (test__powisf2(1, 4, 1))
89*b9829059Sjoerg         return 1;
90*b9829059Sjoerg     if (test__powisf2(1, 0x7FFFFFFE, 1))
91*b9829059Sjoerg         return 1;
92*b9829059Sjoerg     if (test__powisf2(1, 0x7FFFFFFF, 1))
93*b9829059Sjoerg         return 1;
94*b9829059Sjoerg 
95*b9829059Sjoerg     if (test__powisf2(INFINITY, 1, INFINITY))
96*b9829059Sjoerg         return 1;
97*b9829059Sjoerg     if (test__powisf2(INFINITY, 2, INFINITY))
98*b9829059Sjoerg         return 1;
99*b9829059Sjoerg     if (test__powisf2(INFINITY, 3, INFINITY))
100*b9829059Sjoerg         return 1;
101*b9829059Sjoerg     if (test__powisf2(INFINITY, 4, INFINITY))
102*b9829059Sjoerg         return 1;
103*b9829059Sjoerg     if (test__powisf2(INFINITY, 0x7FFFFFFE, INFINITY))
104*b9829059Sjoerg         return 1;
105*b9829059Sjoerg     if (test__powisf2(INFINITY, 0x7FFFFFFF, INFINITY))
106*b9829059Sjoerg         return 1;
107*b9829059Sjoerg 
108*b9829059Sjoerg     if (test__powisf2(-INFINITY, 1, -INFINITY))
109*b9829059Sjoerg         return 1;
110*b9829059Sjoerg     if (test__powisf2(-INFINITY, 2, INFINITY))
111*b9829059Sjoerg         return 1;
112*b9829059Sjoerg     if (test__powisf2(-INFINITY, 3, -INFINITY))
113*b9829059Sjoerg         return 1;
114*b9829059Sjoerg     if (test__powisf2(-INFINITY, 4, INFINITY))
115*b9829059Sjoerg         return 1;
116*b9829059Sjoerg     if (test__powisf2(-INFINITY, 0x7FFFFFFE, INFINITY))
117*b9829059Sjoerg         return 1;
118*b9829059Sjoerg     if (test__powisf2(-INFINITY, 0x7FFFFFFF, -INFINITY))
119*b9829059Sjoerg         return 1;
120*b9829059Sjoerg 
121*b9829059Sjoerg     if (test__powisf2(0, -1, INFINITY))
122*b9829059Sjoerg         return 1;
123*b9829059Sjoerg     if (test__powisf2(0, -2, INFINITY))
124*b9829059Sjoerg         return 1;
125*b9829059Sjoerg     if (test__powisf2(0, -3, INFINITY))
126*b9829059Sjoerg         return 1;
127*b9829059Sjoerg     if (test__powisf2(0, -4, INFINITY))
128*b9829059Sjoerg         return 1;
129*b9829059Sjoerg     if (test__powisf2(0, 0x80000002, INFINITY))
130*b9829059Sjoerg         return 1;
131*b9829059Sjoerg     if (test__powisf2(0, 0x80000001, INFINITY))
132*b9829059Sjoerg         return 1;
133*b9829059Sjoerg     if (test__powisf2(0, 0x80000000, INFINITY))
134*b9829059Sjoerg         return 1;
135*b9829059Sjoerg 
136*b9829059Sjoerg     if (test__powisf2(-0., -1, -INFINITY))
137*b9829059Sjoerg         return 1;
138*b9829059Sjoerg     if (test__powisf2(-0., -2, INFINITY))
139*b9829059Sjoerg         return 1;
140*b9829059Sjoerg     if (test__powisf2(-0., -3, -INFINITY))
141*b9829059Sjoerg         return 1;
142*b9829059Sjoerg     if (test__powisf2(-0., -4, INFINITY))
143*b9829059Sjoerg         return 1;
144*b9829059Sjoerg     if (test__powisf2(-0., 0x80000002, INFINITY))
145*b9829059Sjoerg         return 1;
146*b9829059Sjoerg     if (test__powisf2(-0., 0x80000001, -INFINITY))
147*b9829059Sjoerg         return 1;
148*b9829059Sjoerg     if (test__powisf2(-0., 0x80000000, INFINITY))
149*b9829059Sjoerg         return 1;
150*b9829059Sjoerg 
151*b9829059Sjoerg     if (test__powisf2(1, -1, 1))
152*b9829059Sjoerg         return 1;
153*b9829059Sjoerg     if (test__powisf2(1, -2, 1))
154*b9829059Sjoerg         return 1;
155*b9829059Sjoerg     if (test__powisf2(1, -3, 1))
156*b9829059Sjoerg         return 1;
157*b9829059Sjoerg     if (test__powisf2(1, -4, 1))
158*b9829059Sjoerg         return 1;
159*b9829059Sjoerg     if (test__powisf2(1, 0x80000002, 1))
160*b9829059Sjoerg         return 1;
161*b9829059Sjoerg     if (test__powisf2(1, 0x80000001, 1))
162*b9829059Sjoerg         return 1;
163*b9829059Sjoerg     if (test__powisf2(1, 0x80000000, 1))
164*b9829059Sjoerg         return 1;
165*b9829059Sjoerg 
166*b9829059Sjoerg     if (test__powisf2(INFINITY, -1, 0))
167*b9829059Sjoerg         return 1;
168*b9829059Sjoerg     if (test__powisf2(INFINITY, -2, 0))
169*b9829059Sjoerg         return 1;
170*b9829059Sjoerg     if (test__powisf2(INFINITY, -3, 0))
171*b9829059Sjoerg         return 1;
172*b9829059Sjoerg     if (test__powisf2(INFINITY, -4, 0))
173*b9829059Sjoerg         return 1;
174*b9829059Sjoerg     if (test__powisf2(INFINITY, 0x80000002, 0))
175*b9829059Sjoerg         return 1;
176*b9829059Sjoerg     if (test__powisf2(INFINITY, 0x80000001, 0))
177*b9829059Sjoerg         return 1;
178*b9829059Sjoerg     if (test__powisf2(INFINITY, 0x80000000, 0))
179*b9829059Sjoerg         return 1;
180*b9829059Sjoerg 
181*b9829059Sjoerg     if (test__powisf2(-INFINITY, -1, -0.))
182*b9829059Sjoerg         return 1;
183*b9829059Sjoerg     if (test__powisf2(-INFINITY, -2, 0))
184*b9829059Sjoerg         return 1;
185*b9829059Sjoerg     if (test__powisf2(-INFINITY, -3, -0.))
186*b9829059Sjoerg         return 1;
187*b9829059Sjoerg     if (test__powisf2(-INFINITY, -4, 0))
188*b9829059Sjoerg         return 1;
189*b9829059Sjoerg     if (test__powisf2(-INFINITY, 0x80000002, 0))
190*b9829059Sjoerg         return 1;
191*b9829059Sjoerg     if (test__powisf2(-INFINITY, 0x80000001, -0.))
192*b9829059Sjoerg         return 1;
193*b9829059Sjoerg     if (test__powisf2(-INFINITY, 0x80000000, 0))
194*b9829059Sjoerg         return 1;
195*b9829059Sjoerg 
196*b9829059Sjoerg     if (test__powisf2(2, 10, 1024.))
197*b9829059Sjoerg         return 1;
198*b9829059Sjoerg     if (test__powisf2(-2, 10, 1024.))
199*b9829059Sjoerg         return 1;
200*b9829059Sjoerg     if (test__powisf2(2, -10, 1/1024.))
201*b9829059Sjoerg         return 1;
202*b9829059Sjoerg     if (test__powisf2(-2, -10, 1/1024.))
203*b9829059Sjoerg         return 1;
204*b9829059Sjoerg 
205*b9829059Sjoerg     if (test__powisf2(2, 19, 524288.))
206*b9829059Sjoerg         return 1;
207*b9829059Sjoerg     if (test__powisf2(-2, 19, -524288.))
208*b9829059Sjoerg         return 1;
209*b9829059Sjoerg     if (test__powisf2(2, -19, 1/524288.))
210*b9829059Sjoerg         return 1;
211*b9829059Sjoerg     if (test__powisf2(-2, -19, -1/524288.))
212*b9829059Sjoerg         return 1;
213*b9829059Sjoerg 
214*b9829059Sjoerg     if (test__powisf2(2, 31, 2147483648.))
215*b9829059Sjoerg         return 1;
216*b9829059Sjoerg     if (test__powisf2(-2, 31, -2147483648.))
217*b9829059Sjoerg         return 1;
218*b9829059Sjoerg     if (test__powisf2(2, -31, 1/2147483648.))
219*b9829059Sjoerg         return 1;
220*b9829059Sjoerg     if (test__powisf2(-2, -31, -1/2147483648.))
221*b9829059Sjoerg         return 1;
222*b9829059Sjoerg 
223*b9829059Sjoerg     return 0;
224*b9829059Sjoerg }
225