1 // RUN: %clang_builtins %s %librt -o %t && %run %t
2 // REQUIRES: librt_has_powixf2
3 // UNSUPPORTED: powerpc64
4 // REQUIRES: x86-target-arch
5 //===-- powixf2_test.cpp - Test __powixf2 ---------------------------------===//
7 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
8 // See https://llvm.org/LICENSE.txt for license information.
9 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
11 //===----------------------------------------------------------------------===//
13 // This file tests __powixf2 for the compiler_rt library.
15 //===----------------------------------------------------------------------===//
25 COMPILER_RT_ABI
long double __powixf2(long double a
, si_int b
);
27 int test__powixf2(long double a
, si_int b
, long double expected
)
29 long double x
= __powixf2(a
, b
);
30 int correct
= (x
== expected
) && (signbit(x
) == signbit(expected
));
32 printf("error in __powixf2(%Lf, %d) = %Lf, expected %Lf\n",
42 if (test__powixf2(0, 0, 1))
44 if (test__powixf2(1, 0, 1))
46 if (test__powixf2(1.5, 0, 1))
48 if (test__powixf2(2, 0, 1))
50 if (test__powixf2(INFINITY
, 0, 1))
53 if (test__powixf2(-0., 0, 1))
55 if (test__powixf2(-1, 0, 1))
57 if (test__powixf2(-1.5, 0, 1))
59 if (test__powixf2(-2, 0, 1))
61 if (test__powixf2(-INFINITY
, 0, 1))
64 if (test__powixf2(0, 1, 0))
66 if (test__powixf2(0, 2, 0))
68 if (test__powixf2(0, 3, 0))
70 if (test__powixf2(0, 4, 0))
72 if (test__powixf2(0, 0x7FFFFFFE, 0))
74 if (test__powixf2(0, 0x7FFFFFFF, 0))
77 if (test__powixf2(-0., 1, -0.))
79 if (test__powixf2(-0., 2, 0))
81 if (test__powixf2(-0., 3, -0.))
83 if (test__powixf2(-0., 4, 0))
85 if (test__powixf2(-0., 0x7FFFFFFE, 0))
87 if (test__powixf2(-0., 0x7FFFFFFF, -0.))
90 if (test__powixf2(1, 1, 1))
92 if (test__powixf2(1, 2, 1))
94 if (test__powixf2(1, 3, 1))
96 if (test__powixf2(1, 4, 1))
98 if (test__powixf2(1, 0x7FFFFFFE, 1))
100 if (test__powixf2(1, 0x7FFFFFFF, 1))
103 if (test__powixf2(INFINITY
, 1, INFINITY
))
105 if (test__powixf2(INFINITY
, 2, INFINITY
))
107 if (test__powixf2(INFINITY
, 3, INFINITY
))
109 if (test__powixf2(INFINITY
, 4, INFINITY
))
111 if (test__powixf2(INFINITY
, 0x7FFFFFFE, INFINITY
))
113 if (test__powixf2(INFINITY
, 0x7FFFFFFF, INFINITY
))
116 if (test__powixf2(-INFINITY
, 1, -INFINITY
))
118 if (test__powixf2(-INFINITY
, 2, INFINITY
))
120 if (test__powixf2(-INFINITY
, 3, -INFINITY
))
122 if (test__powixf2(-INFINITY
, 4, INFINITY
))
124 if (test__powixf2(-INFINITY
, 0x7FFFFFFE, INFINITY
))
126 if (test__powixf2(-INFINITY
, 0x7FFFFFFF, -INFINITY
))
129 if (test__powixf2(0, -1, INFINITY
))
131 if (test__powixf2(0, -2, INFINITY
))
133 if (test__powixf2(0, -3, INFINITY
))
135 if (test__powixf2(0, -4, INFINITY
))
137 if (test__powixf2(0, 0x80000002, INFINITY
))
139 if (test__powixf2(0, 0x80000001, INFINITY
))
141 if (test__powixf2(0, 0x80000000, INFINITY
))
144 if (test__powixf2(-0., -1, -INFINITY
))
146 if (test__powixf2(-0., -2, INFINITY
))
148 if (test__powixf2(-0., -3, -INFINITY
))
150 if (test__powixf2(-0., -4, INFINITY
))
152 if (test__powixf2(-0., 0x80000002, INFINITY
))
154 if (test__powixf2(-0., 0x80000001, -INFINITY
))
156 if (test__powixf2(-0., 0x80000000, INFINITY
))
159 if (test__powixf2(1, -1, 1))
161 if (test__powixf2(1, -2, 1))
163 if (test__powixf2(1, -3, 1))
165 if (test__powixf2(1, -4, 1))
167 if (test__powixf2(1, 0x80000002, 1))
169 if (test__powixf2(1, 0x80000001, 1))
171 if (test__powixf2(1, 0x80000000, 1))
174 if (test__powixf2(INFINITY
, -1, 0))
176 if (test__powixf2(INFINITY
, -2, 0))
178 if (test__powixf2(INFINITY
, -3, 0))
180 if (test__powixf2(INFINITY
, -4, 0))
182 if (test__powixf2(INFINITY
, 0x80000002, 0))
184 if (test__powixf2(INFINITY
, 0x80000001, 0))
186 if (test__powixf2(INFINITY
, 0x80000000, 0))
189 if (test__powixf2(-INFINITY
, -1, -0.))
191 if (test__powixf2(-INFINITY
, -2, 0))
193 if (test__powixf2(-INFINITY
, -3, -0.))
195 if (test__powixf2(-INFINITY
, -4, 0))
197 if (test__powixf2(-INFINITY
, 0x80000002, 0))
199 if (test__powixf2(-INFINITY
, 0x80000001, -0.))
201 if (test__powixf2(-INFINITY
, 0x80000000, 0))
204 if (test__powixf2(2, 10, 1024.))
206 if (test__powixf2(-2, 10, 1024.))
208 if (test__powixf2(2, -10, 1/1024.))
210 if (test__powixf2(-2, -10, 1/1024.))
213 if (test__powixf2(2, 19, 524288.))
215 if (test__powixf2(-2, 19, -524288.))
217 if (test__powixf2(2, -19, 1/524288.))
219 if (test__powixf2(-2, -19, -1/524288.))
222 if (test__powixf2(2, 31, 2147483648.))
224 if (test__powixf2(-2, 31, -2147483648.))
226 if (test__powixf2(2, -31, 1/2147483648.))
228 if (test__powixf2(-2, -31, -1/2147483648.))