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