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