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