test_v4f.c (18963B)
1 /* Copyright (C) 2014-2019, 2021, 2023, 2025 Vincent Forest (vaplv@free.fr) 2 * 3 * The RSIMD library is free software: you can redistribute it and/or modify 4 * it under the terms of the GNU General Public License as published 5 * by the Free Software Foundation, either version 3 of the License, or 6 * (at your option) any later version. 7 * 8 * The RSIMD library is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public License 14 * along with the RSIMD library. If not, see <http://www.gnu.org/licenses/>. */ 15 16 #include "rsimd.h" 17 #include "math.h" 18 19 int 20 main(int argc, char** argv) 21 { 22 union { int32_t i[4]; float f[4]; } cast; 23 v4f_T i, j, k; 24 v4i_T l; 25 ALIGN(16) float tmp[5] = { 0.f, 1.f, 2.f, 3.f, 4.f }; 26 (void)argc, (void)argv; 27 28 i = v4f_loadu(tmp+1); 29 CHK(v4f_x(i) == 1.f); 30 CHK(v4f_y(i) == 2.f); 31 CHK(v4f_z(i) == 3.f); 32 CHK(v4f_w(i) == 4.f); 33 34 i = v4f_loadu3(tmp); 35 CHK(v4f_x(i) == 0.f); 36 CHK(v4f_y(i) == 1.f); 37 CHK(v4f_z(i) == 2.f); 38 39 i = v4f_load(tmp); 40 CHK(v4f_x(i) == 0.f); 41 CHK(v4f_y(i) == 1.f); 42 CHK(v4f_z(i) == 2.f); 43 CHK(v4f_w(i) == 3.f); 44 45 tmp[0] = tmp[1] = tmp[2] = tmp[3] = 0.f; 46 CHK(v4f_store(tmp, i) == tmp); 47 CHK(tmp[0] == 0.f); 48 CHK(tmp[1] == 1.f); 49 CHK(tmp[2] == 2.f); 50 CHK(tmp[3] == 3.f); 51 52 i = v4f_set(1.f, 2.f, 3.f, 4.f); 53 CHK(v4f_x(i) == 1.f); 54 CHK(v4f_y(i) == 2.f); 55 CHK(v4f_z(i) == 3.f); 56 CHK(v4f_w(i) == 4.f); 57 58 i = v4f_set1(-2.f); 59 CHK(v4f_x(i) == -2.f); 60 CHK(v4f_y(i) == -2.f); 61 CHK(v4f_z(i) == -2.f); 62 CHK(v4f_w(i) == -2.f); 63 64 i = v4f_zero(); 65 CHK(v4f_x(i) == 0.f); 66 CHK(v4f_y(i) == 0.f); 67 CHK(v4f_z(i) == 0.f); 68 CHK(v4f_w(i) == 0.f); 69 70 i = v4f_mask(~0, 0, ~0, ~0); 71 cast.f[0] = v4f_x(i); CHK(cast.i[0] == (int32_t)0xFFFFFFFF); 72 cast.f[1] = v4f_y(i); CHK(cast.i[1] == (int32_t)0x00000000); 73 cast.f[2] = v4f_z(i); CHK(cast.i[2] == (int32_t)0xFFFFFFFF); 74 cast.f[3] = v4f_w(i); CHK(cast.i[3] == (int32_t)0xFFFFFFFF); 75 76 i = v4f_mask1(8); 77 cast.f[0] = v4f_x(i); CHK(cast.i[0] == 8); 78 cast.f[1] = v4f_y(i); CHK(cast.i[1] == 8); 79 cast.f[2] = v4f_z(i); CHK(cast.i[2] == 8); 80 cast.f[3] = v4f_w(i); CHK(cast.i[3] == 8); 81 82 i = v4f_true(); 83 cast.f[0] = v4f_x(i); CHK(cast.i[0] == (int32_t)0xFFFFFFFF); 84 cast.f[1] = v4f_y(i); CHK(cast.i[1] == (int32_t)0xFFFFFFFF); 85 cast.f[2] = v4f_z(i); CHK(cast.i[2] == (int32_t)0xFFFFFFFF); 86 cast.f[3] = v4f_w(i); CHK(cast.i[3] == (int32_t)0xFFFFFFFF); 87 88 i = v4f_false(); 89 cast.f[0] = v4f_x(i); CHK(cast.i[0] == (int32_t)0x00000000); 90 cast.f[1] = v4f_y(i); CHK(cast.i[1] == (int32_t)0x00000000); 91 cast.f[2] = v4f_z(i); CHK(cast.i[2] == (int32_t)0x00000000); 92 cast.f[3] = v4f_w(i); CHK(cast.i[3] == (int32_t)0x00000000); 93 94 i = v4f_mask(~0, 0, ~0, ~0); 95 j = v4f_mask(0, 0, 0, ~0); 96 k = v4f_or(i, j); 97 cast.f[0] = v4f_x(k); CHK(cast.i[0] == (int32_t)0xFFFFFFFF); 98 cast.f[1] = v4f_y(k); CHK(cast.i[1] == (int32_t)0x00000000); 99 cast.f[2] = v4f_z(k); CHK(cast.i[2] == (int32_t)0xFFFFFFFF); 100 cast.f[3] = v4f_w(k); CHK(cast.i[3] == (int32_t)0xFFFFFFFF); 101 CHK(v4f_mask_x(i) == ~0); 102 CHK(v4f_mask_y(i) == 0); 103 CHK(v4f_mask_z(i) == ~0); 104 CHK(v4f_mask_w(i) == ~0); 105 106 k = v4f_and(i, j); 107 cast.f[0] = v4f_x(k); CHK(cast.i[0] == (int32_t)0x00000000); 108 cast.f[1] = v4f_y(k); CHK(cast.i[1] == (int32_t)0x00000000); 109 cast.f[2] = v4f_z(k); CHK(cast.i[2] == (int32_t)0x00000000); 110 cast.f[3] = v4f_w(k); CHK(cast.i[3] == (int32_t)0xFFFFFFFF); 111 112 k = v4f_xor(i, j); 113 cast.f[0] = v4f_x(k); CHK(cast.i[0] == (int32_t)0xFFFFFFFF); 114 cast.f[1] = v4f_y(k); CHK(cast.i[1] == (int32_t)0x00000000); 115 cast.f[2] = v4f_z(k); CHK(cast.i[2] == (int32_t)0xFFFFFFFF); 116 cast.f[3] = v4f_w(k); CHK(cast.i[3] == (int32_t)0x00000000); 117 118 i = v4f_mask(0x00010203, 0x04050607, 0x08090A0B, 0x0C0D0E0F); 119 j = v4f_mask(0x01020401, 0x70605040, 0x0F1F2F3F, 0x00000000); 120 k = v4f_andnot(i, j); 121 cast.f[0] = v4f_x(k); CHK(cast.i[0] == 0x01020400); 122 cast.f[1] = v4f_y(k); CHK(cast.i[1] == 0x70605040); 123 cast.f[2] = v4f_z(k); CHK(cast.i[2] == 0x07162534); 124 cast.f[3] = v4f_w(k); CHK(cast.i[3] == 0x00000000); 125 126 CHK(v4f_movemask(i) == 0); 127 i = v4f_mask(0x01020401, (int32_t)0x80605040, 0x7F1F2F3F, 0x00000000); 128 CHK(v4f_movemask(i) == 2); 129 130 i = v4f_set(1.f, 2.f, 3.f, 4.f); 131 j = v4f_set(5.f, 6.f, 7.f, 8.f); 132 k = v4f_sel(i, j, v4f_mask(~0, 0, 0, ~0)); 133 CHK(v4f_x(k) == 5.f); 134 CHK(v4f_y(k) == 2.f); 135 CHK(v4f_z(k) == 3.f); 136 CHK(v4f_w(k) == 8.f); 137 138 k = v4f_xayb(i, j); 139 CHK(v4f_x(k) == 1.f); 140 CHK(v4f_y(k) == 5.f); 141 CHK(v4f_z(k) == 2.f); 142 CHK(v4f_w(k) == 6.f); 143 144 k = v4f_xyab(i, j); 145 CHK(v4f_x(k) == 1.f); 146 CHK(v4f_y(k) == 2.f); 147 CHK(v4f_z(k) == 5.f); 148 CHK(v4f_w(k) == 6.f); 149 150 k = v4f_zcwd(i, j); 151 CHK(v4f_x(k) == 3.f); 152 CHK(v4f_y(k) == 7.f); 153 CHK(v4f_z(k) == 4.f); 154 CHK(v4f_w(k) == 8.f); 155 156 k = v4f_zwcd(i, j); 157 CHK(v4f_x(k) == 3.f); 158 CHK(v4f_y(k) == 4.f); 159 CHK(v4f_z(k) == 7.f); 160 CHK(v4f_w(k) == 8.f); 161 162 k = v4f_ayzw(i, j); 163 CHK(v4f_x(k) == 5.f); 164 CHK(v4f_y(k) == 2.f); 165 CHK(v4f_z(k) == 3.f); 166 CHK(v4f_w(k) == 4.f); 167 168 k = v4f_xycd(i, j); 169 CHK(v4f_x(k) == 1.f); 170 CHK(v4f_y(k) == 2.f); 171 CHK(v4f_z(k) == 7.f); 172 CHK(v4f_w(k) == 8.f); 173 174 k = v4f_ywbd(i, j); 175 CHK(v4f_x(k) == 2.f); 176 CHK(v4f_y(k) == 4.f); 177 CHK(v4f_z(k) == 6.f); 178 CHK(v4f_w(k) == 8.f); 179 180 k = v4f_xbzw(i, j); 181 CHK(v4f_x(k) == 1.f); 182 CHK(v4f_y(k) == 6.f); 183 CHK(v4f_z(k) == 3.f); 184 CHK(v4f_w(k) == 4.f); 185 186 k = v4f_xycw(i, j); 187 CHK(v4f_x(k) == 1.f); 188 CHK(v4f_y(k) == 2.f); 189 CHK(v4f_z(k) == 7.f); 190 CHK(v4f_w(k) == 4.f); 191 192 k = v4f_xyzd(i, j); 193 CHK(v4f_x(k) == 1.f); 194 CHK(v4f_y(k) == 2.f); 195 CHK(v4f_z(k) == 3.f); 196 CHK(v4f_w(k) == 8.f); 197 198 k = v4f_048C(v4f_set1(1.f), v4f_set1(2.f), v4f_set1(3.f), v4f_set1(4.f)); 199 CHK(v4f_x(k) == 1.f); 200 CHK(v4f_y(k) == 2.f); 201 CHK(v4f_z(k) == 3.f); 202 CHK(v4f_w(k) == 4.f); 203 204 i = v4f_set(-1.f, 2.f, -3.f, 4.f); 205 j = v4f_minus(i); 206 CHK(v4f_x(j) == 1.f); 207 CHK(v4f_y(j) == -2.f); 208 CHK(v4f_z(j) == 3.f); 209 CHK(v4f_w(j) == -4.f); 210 211 k = v4f_add(i, j); 212 CHK(v4f_x(k) == 0.f); 213 CHK(v4f_y(k) == 0.f); 214 CHK(v4f_z(k) == 0.f); 215 CHK(v4f_w(k) == 0.f); 216 217 k = v4f_sub(i, j); 218 CHK(v4f_x(k) == -2.f); 219 CHK(v4f_y(k) == 4.f); 220 CHK(v4f_z(k) == -6.f); 221 CHK(v4f_w(k) == 8.f); 222 223 k = v4f_mul(i, j); 224 CHK(v4f_x(k) == -1.f); 225 CHK(v4f_y(k) == -4.f); 226 CHK(v4f_z(k) == -9.f); 227 CHK(v4f_w(k) == -16.f); 228 229 k = v4f_div(k, i); 230 CHK(v4f_x(k) == 1.f); 231 CHK(v4f_y(k) == -2.f); 232 CHK(v4f_z(k) == 3.f); 233 CHK(v4f_w(k) == -4.f); 234 235 k = v4f_madd(i, j, k); 236 CHK(v4f_x(k) == 0.f); 237 CHK(v4f_y(k) == -6.f); 238 CHK(v4f_z(k) == -6.f); 239 CHK(v4f_w(k) == -20.f); 240 241 k = v4f_abs(i); 242 CHK(v4f_x(k) == 1.f); 243 CHK(v4f_y(k) == 2.f); 244 CHK(v4f_z(k) == 3.f); 245 CHK(v4f_w(k) == 4.f); 246 247 i = v4f_set(4.f, 9.f, 16.f, 25.f); 248 k = v4f_sqrt(i); 249 CHK(v4f_x(k) == 2.f); 250 CHK(v4f_y(k) == 3.f); 251 CHK(v4f_z(k) == 4.f); 252 CHK(v4f_w(k) == 5.f); 253 254 k = v4f_rsqrte(i); 255 CHK(eq_eps(v4f_x(k), 1.f/2.f, 1.e-3f) == 1); 256 CHK(eq_eps(v4f_y(k), 1.f/3.f, 1.e-3f) == 1); 257 CHK(eq_eps(v4f_z(k), 1.f/4.f, 1.e-3f) == 1); 258 CHK(eq_eps(v4f_w(k), 1.f/5.f, 1.e-3f) == 1); 259 260 k = v4f_rsqrt(i); 261 CHK(eq_eps(v4f_x(k), 1.f/2.f, 1.e-6f) == 1); 262 CHK(eq_eps(v4f_y(k), 1.f/3.f, 1.e-6f) == 1); 263 CHK(eq_eps(v4f_z(k), 1.f/4.f, 1.e-6f) == 1); 264 CHK(eq_eps(v4f_w(k), 1.f/5.f, 1.e-6f) == 1); 265 266 k = v4f_rcpe(i); 267 CHK(eq_eps(v4f_x(k), 1.f/4.f, 1.e-3f) == 1); 268 CHK(eq_eps(v4f_y(k), 1.f/9.f, 1.e-3f) == 1); 269 CHK(eq_eps(v4f_z(k), 1.f/16.f, 1.e-3f) == 1); 270 CHK(eq_eps(v4f_w(k), 1.f/25.f, 1.e-3f) == 1); 271 272 k = v4f_rcp(i); 273 CHK(eq_eps(v4f_x(k), 1.f/4.f, 1.e-6f) == 1); 274 CHK(eq_eps(v4f_y(k), 1.f/9.f, 1.e-6f) == 1); 275 CHK(eq_eps(v4f_z(k), 1.f/16.f, 1.e-6f) == 1); 276 CHK(eq_eps(v4f_w(k), 1.f/25.f, 1.e-6f) == 1); 277 278 i = v4f_set(0.f, 1.f, 2.f, 4.f); 279 j = v4f_set(1.f, 2.f, -1.f, 1.f); 280 k = v4f_lerp(i, j, v4f_set1(0.5f)); 281 CHK(v4f_x(k) == 0.5f); 282 CHK(v4f_y(k) == 1.5f); 283 CHK(v4f_z(k) == 0.5f); 284 CHK(v4f_w(k) == 2.5f); 285 286 k = v4f_sum(j); 287 CHK(v4f_x(k) == 3.f); 288 CHK(v4f_y(k) == 3.f); 289 CHK(v4f_z(k) == 3.f); 290 CHK(v4f_w(k) == 3.f); 291 292 k = v4f_dot(i, j); 293 CHK(v4f_x(k) == 4.f); 294 CHK(v4f_y(k) == 4.f); 295 CHK(v4f_z(k) == 4.f); 296 CHK(v4f_w(k) == 4.f); 297 298 k = v4f_len(i); 299 CHK(eq_eps(v4f_x(k), (float)sqrt(21.0), 1.e-6f) == 1); 300 CHK(eq_eps(v4f_y(k), (float)sqrt(21.0), 1.e-6f) == 1); 301 CHK(eq_eps(v4f_z(k), (float)sqrt(21.0), 1.e-6f) == 1); 302 CHK(eq_eps(v4f_w(k), (float)sqrt(21.0), 1.e-6f) == 1); 303 304 i = v4f_set(0.f, 4.f, 2.f, 3.f); 305 k = v4f_normalize(i); 306 CHK(eq_eps(v4f_x(k), 0.f, 1.e-6f) == 1); 307 CHK(eq_eps(v4f_y(k), 0.742781353f, 1.e-6f) == 1); 308 CHK(eq_eps(v4f_z(k), 0.371390676f, 1.e-6f) == 1); 309 CHK(eq_eps(v4f_w(k), 0.557086014f, 1.e-6f) == 1); 310 311 i = v4f_set(1.f, 4.f, 2.f, 3.f); 312 k = v4f_sum2(i); 313 CHK(v4f_x(k) == 5.f); 314 CHK(v4f_y(k) == 5.f); 315 CHK(v4f_z(k) == 5.f); 316 CHK(v4f_w(k) == 5.f); 317 318 j = v4f_set(2.f, 3.f, 5.f, 1.f); 319 k = v4f_dot2(i, j); 320 CHK(v4f_x(k) == 14.f); 321 CHK(v4f_y(k) == 14.f); 322 CHK(v4f_z(k) == 14.f); 323 CHK(v4f_w(k) == 14.f); 324 325 k = v4f_len2(i); 326 CHK(eq_eps(v4f_x(k), (float)sqrt(17.0), 1.e-6f) == 1); 327 CHK(eq_eps(v4f_y(k), (float)sqrt(17.0), 1.e-6f) == 1); 328 CHK(eq_eps(v4f_z(k), (float)sqrt(17.0), 1.e-6f) == 1); 329 CHK(eq_eps(v4f_w(k), (float)sqrt(17.0), 1.e-6f) == 1); 330 331 i = v4f_set(1.f, -2.f, 2.f, 5.f); 332 j = v4f_set(3.f, 1.f, 1.f, 5.f); 333 k = v4f_cross2(i, j); 334 CHK(v4f_x(k) == 7.f); 335 CHK(v4f_y(k) == 7.f); 336 CHK(v4f_z(k) == 7.f); 337 CHK(v4f_w(k) == 7.f); 338 339 k = v4f_cross2(j, i); 340 CHK(v4f_x(k) == -7.f); 341 CHK(v4f_y(k) == -7.f); 342 CHK(v4f_z(k) == -7.f); 343 CHK(v4f_w(k) == -7.f); 344 345 i = v4f_set(0.f, 4.f, 5.f, 7.f); 346 k = v4f_normalize2(i); 347 CHK(eq_eps(v4f_x(k), 0.f, 1.e-6f) == 1); 348 CHK(eq_eps(v4f_y(k), 1.f, 1.e-6f) == 1); 349 350 k = v4f_sum3(i); 351 CHK(v4f_x(k) == 9.f); 352 CHK(v4f_y(k) == 9.f); 353 CHK(v4f_z(k) == 9.f); 354 CHK(v4f_w(k) == 9.f); 355 356 i = v4f_set(2.f, 3.f, 2.f, 4.f); 357 j = v4f_set(0.f, 4.f, 2.f, 19.f); 358 k = v4f_dot3(i, j); 359 CHK(v4f_x(k) == 16.f); 360 CHK(v4f_y(k) == 16.f); 361 CHK(v4f_z(k) == 16.f); 362 CHK(v4f_w(k) == 16.f); 363 364 k = v4f_len3(j); 365 CHK(eq_eps(v4f_x(k), (float)sqrt(20.0), 1.e-6f) == 1); 366 CHK(eq_eps(v4f_y(k), (float)sqrt(20.0), 1.e-6f) == 1); 367 CHK(eq_eps(v4f_z(k), (float)sqrt(20.0), 1.e-6f) == 1); 368 CHK(eq_eps(v4f_w(k), (float)sqrt(20.0), 1.e-6f) == 1); 369 370 k = v4f_normalize3(j); 371 CHK(eq_eps(v4f_x(k), 0.f, 1.e-6f) == 1); 372 CHK(eq_eps(v4f_y(k), 0.8944271910f, 1.e-6f) == 1); 373 CHK(eq_eps(v4f_z(k), 0.4472135995f, 1.e-6f) == 1); 374 375 i = v4f_set(1.f, -2.f, 2.f, 4.f); 376 j = v4f_set(3.f, 1.f, -1.5f, 2.f); 377 k = v4f_cross3(i, j); 378 CHK(v4f_x(k) == 1.f); 379 CHK(v4f_y(k) == 7.5f); 380 CHK(v4f_z(k) == 7.f); 381 382 i = v4f_set(1.f, 2.f, 3.f, 4.f); 383 j = v4f_set(-2.f, -4.f, 3.f, 6.f); 384 k = v4f_eq(i, j); 385 cast.f[0] = v4f_x(k); CHK(cast.i[0] == (int32_t)0x00000000); 386 cast.f[1] = v4f_y(k); CHK(cast.i[1] == (int32_t)0x00000000); 387 cast.f[2] = v4f_z(k); CHK(cast.i[2] == (int32_t)0xFFFFFFFF); 388 cast.f[3] = v4f_w(k); CHK(cast.i[3] == (int32_t)0x00000000); 389 390 k = v4f_neq(i, j); 391 cast.f[0] = v4f_x(k); CHK(cast.i[0] == (int32_t)0xFFFFFFFF); 392 cast.f[1] = v4f_y(k); CHK(cast.i[1] == (int32_t)0xFFFFFFFF); 393 cast.f[2] = v4f_z(k); CHK(cast.i[2] == (int32_t)0x00000000); 394 cast.f[3] = v4f_w(k); CHK(cast.i[3] == (int32_t)0xFFFFFFFF); 395 396 k = v4f_gt(i, j); 397 cast.f[0] = v4f_x(k); CHK(cast.i[0] == (int32_t)0xFFFFFFFF); 398 cast.f[1] = v4f_y(k); CHK(cast.i[1] == (int32_t)0xFFFFFFFF); 399 cast.f[2] = v4f_z(k); CHK(cast.i[2] == (int32_t)0x00000000); 400 cast.f[3] = v4f_w(k); CHK(cast.i[3] == (int32_t)0x00000000); 401 402 k = v4f_lt(i, j); 403 cast.f[0] = v4f_x(k); CHK(cast.i[0] == (int32_t)0x00000000); 404 cast.f[1] = v4f_y(k); CHK(cast.i[1] == (int32_t)0x00000000); 405 cast.f[2] = v4f_z(k); CHK(cast.i[2] == (int32_t)0x00000000); 406 cast.f[3] = v4f_w(k); CHK(cast.i[3] == (int32_t)0xFFFFFFFF); 407 408 k = v4f_ge(i, j); 409 cast.f[0] = v4f_x(k); CHK(cast.i[0] == (int32_t)0xFFFFFFFF); 410 cast.f[1] = v4f_y(k); CHK(cast.i[1] == (int32_t)0xFFFFFFFF); 411 cast.f[2] = v4f_z(k); CHK(cast.i[2] == (int32_t)0xFFFFFFFF); 412 cast.f[3] = v4f_w(k); CHK(cast.i[3] == (int32_t)0x00000000); 413 414 k = v4f_le(i, j); 415 cast.f[0] = v4f_x(k); CHK(cast.i[0] == (int32_t)0x00000000); 416 cast.f[1] = v4f_y(k); CHK(cast.i[1] == (int32_t)0x00000000); 417 cast.f[2] = v4f_z(k); CHK(cast.i[2] == (int32_t)0xFFFFFFFF); 418 cast.f[3] = v4f_w(k); CHK(cast.i[3] == (int32_t)0xFFFFFFFF); 419 420 i = v4f_set(1.01f, 2.01f, 3.02f, 0.02f); 421 j = v4f_set(1.f, 2.f, 3.f, 0.f); 422 k = v4f_set(0.f, 0.01f, 0.02f, 0.f); 423 k = v4f_eq_eps(i, j, k); 424 cast.f[0] = v4f_x(k); CHK(cast.i[0] == (int32_t)0x00000000); 425 cast.f[1] = v4f_y(k); CHK(cast.i[1] == (int32_t)0xFFFFFFFF); 426 cast.f[2] = v4f_z(k); CHK(cast.i[2] == (int32_t)0xFFFFFFFF); 427 cast.f[3] = v4f_w(k); CHK(cast.i[3] == (int32_t)0x00000000); 428 429 i = v4f_set(1.f, 2.f, 3.f, 4.f); 430 j = v4f_set(-2.f, -4.f, 3.f, 6.f); 431 k = v4f_min(i, j); 432 CHK(v4f_x(k) == -2.f); 433 CHK(v4f_y(k) == -4.f); 434 CHK(v4f_z(k) == 3.f); 435 CHK(v4f_w(k) == 4.f); 436 437 k = v4f_max(i, j); 438 CHK(v4f_x(k) == 1.f); 439 CHK(v4f_y(k) == 2.f); 440 CHK(v4f_z(k) == 3.f); 441 CHK(v4f_w(k) == 6.f); 442 443 k = v4f_reduce_min(i); 444 CHK(v4f_x(k) == 1.f); 445 CHK(v4f_y(k) == 1.f); 446 CHK(v4f_z(k) == 1.f); 447 CHK(v4f_w(k) == 1.f); 448 449 k = v4f_reduce_min(j); 450 CHK(v4f_x(k) == -4.f); 451 CHK(v4f_y(k) == -4.f); 452 CHK(v4f_z(k) == -4.f); 453 CHK(v4f_w(k) == -4.f); 454 455 k = v4f_reduce_max(i); 456 CHK(v4f_x(k) == 4.f); 457 CHK(v4f_y(k) == 4.f); 458 CHK(v4f_z(k) == 4.f); 459 CHK(v4f_w(k) == 4.f); 460 461 k = v4f_reduce_max(j); 462 CHK(v4f_x(k) == 6.f); 463 CHK(v4f_y(k) == 6.f); 464 CHK(v4f_z(k) == 6.f); 465 CHK(v4f_w(k) == 6.f); 466 467 k = v4f_clamp(i, v4f_set(0.f, 0.f, -1.f, 3.f), v4f_set(1.f, 3.f, 2.f, 3.1f)); 468 CHK(v4f_x(k) == 1.f); 469 CHK(v4f_y(k) == 2.f); 470 CHK(v4f_z(k) == 2.f); 471 CHK(v4f_w(k) == 3.1f); 472 473 l = v4f_to_v4i(j); 474 CHK(v4i_x(l) == -2); 475 CHK(v4i_y(l) == -4); 476 CHK(v4i_z(l) == 3); 477 CHK(v4i_w(l) == 6); 478 479 k = v4i_to_v4f(l); 480 CHK(v4f_x(k) == -2.f); 481 CHK(v4f_y(k) == -4.f); 482 CHK(v4f_z(k) == 3.f); 483 CHK(v4f_w(k) == 6.f); 484 485 i = v4f_set(1.5f, 2.51f, 3.2f, 4.35f); 486 l = v4f_to_v4i(i); 487 CHK(v4i_x(l) == 2); 488 CHK(v4i_y(l) == 3); 489 CHK(v4i_z(l) == 3); 490 CHK(v4i_w(l) == 4); 491 492 l = v4f_trunk_v4i(i); 493 CHK(v4i_x(l) == 1); 494 CHK(v4i_y(l) == 2); 495 CHK(v4i_z(l) == 3); 496 CHK(v4i_w(l) == 4); 497 498 cast.f[0] = 1.f; 499 cast.f[1] = 2.f; 500 cast.f[2] = 3.14f; 501 cast.f[3] = -9.2f; 502 503 i = v4f_set(cast.f[0], cast.f[1], cast.f[2], cast.f[3]); 504 l = v4f_rcast_v4i(i); 505 CHK(v4i_x(l) == cast.i[0]); 506 CHK(v4i_y(l) == cast.i[1]); 507 CHK(v4i_z(l) == cast.i[2]); 508 CHK(v4i_w(l) == cast.i[3]); 509 510 i = v4i_rcast_v4f(l); 511 CHK(v4f_x(i) == cast.f[0]); 512 CHK(v4f_y(i) == cast.f[1]); 513 CHK(v4f_z(i) == cast.f[2]); 514 CHK(v4f_w(i) == cast.f[3]); 515 516 k = v4f_xxxx(j); 517 CHK(v4f_x(k) == -2.f); 518 CHK(v4f_y(k) == -2.f); 519 CHK(v4f_z(k) == -2.f); 520 CHK(v4f_w(k) == -2.f); 521 522 k = v4f_yyxx(j); 523 CHK(v4f_x(k) == -4.f); 524 CHK(v4f_y(k) == -4.f); 525 CHK(v4f_z(k) == -2.f); 526 CHK(v4f_w(k) == -2.f); 527 528 k = v4f_wwxy(j); 529 CHK(v4f_x(k) == 6.f); 530 CHK(v4f_y(k) == 6.f); 531 CHK(v4f_z(k) == -2.f); 532 CHK(v4f_w(k) == -4.f); 533 534 k = v4f_zyzy(j); 535 CHK(v4f_x(k) == 3.f); 536 CHK(v4f_y(k) == -4.f); 537 CHK(v4f_z(k) == 3.f); 538 CHK(v4f_w(k) == -4.f); 539 540 k = v4f_wyyz(j); 541 CHK(v4f_x(k) == 6.f); 542 CHK(v4f_y(k) == -4.f); 543 CHK(v4f_z(k) == -4.f); 544 CHK(v4f_w(k) == 3.f); 545 546 i = v4f_xyz_to_rthetaphi(v4f_set(10.f, 5.f, 3.f, 0.f)); 547 CHK(eq_eps(v4f_x(i), 11.575836f, 1.e-5f) == 1); 548 CHK(eq_eps(v4f_y(i), 1.308643f, 1.e-5f) == 1); 549 CHK(eq_eps(v4f_z(i), 0.463647f, 1.e-5f) == 1); 550 i = v4f_xyz_to_rthetaphi(v4f_set(8.56f, 7.234f, 33.587f, 0.f)); 551 CHK(eq_eps(v4f_x(i), 35.407498f, 1.e-5f) == 1); 552 CHK(eq_eps(v4f_y(i), 0.322063f, 1.e-5f) == 1); 553 CHK(eq_eps(v4f_z(i), 0.701638f, 1.e-5f) == 1); 554 555 i = v4f_xyz_to_rthetaphi(v4f_set(0.f, 0.f, 0.f, 0.f)); 556 CHK(eq_eps(v4f_x(i), 0.f, 1.e-5f) == 1); 557 CHK(eq_eps(v4f_y(i), 0.f, 1.e-5f) == 1); 558 CHK(eq_eps(v4f_z(i), 0.f, 1.e-5f) == 1); 559 i = v4f_xyz_to_rthetaphi(v4f_set(4.53f, 0.f, 0.f, 0.f)); 560 CHK(eq_eps(v4f_x(i), 4.53f, 1.e-5f) == 1); 561 CHK(eq_eps(v4f_y(i), 1.570796f, 1.e-5f) == 1); 562 CHK(eq_eps(v4f_z(i), 0.f, 1.e-5f) == 1); 563 i = v4f_xyz_to_rthetaphi(v4f_set(0.f, 7.2f, 0.f, 0.f)); 564 CHK(eq_eps(v4f_x(i), 7.2f, 1.e-5f) == 1); 565 CHK(eq_eps(v4f_y(i), 1.570796f, 1.e-5f) == 1); 566 CHK(eq_eps(v4f_z(i), 1.570796f, 1.e-5f) == 1); 567 i = v4f_xyz_to_rthetaphi(v4f_set(4.53f, 7.2f, 0.f, 0.f)); 568 CHK(eq_eps(v4f_x(i), 8.506521f, 1.e-5f) == 1); 569 CHK(eq_eps(v4f_y(i), 1.570796f, 1.e-5f) == 1); 570 CHK(eq_eps(v4f_z(i), 1.009206f, 1.e-5f) == 1); 571 i = v4f_xyz_to_rthetaphi(v4f_set(0.f, 0.f, 3.1f, 0.f)); 572 CHK(eq_eps(v4f_x(i), 3.1f, 1.e-5f) == 1); 573 CHK(eq_eps(v4f_y(i), 0.f, 1.e-5f) == 1); 574 CHK(eq_eps(v4f_z(i), 0.f, 1.e-5f) == 1); 575 i = v4f_xyz_to_rthetaphi(v4f_set(4.53f, 0.f, 3.1f, 0.f)); 576 CHK(eq_eps(v4f_x(i), 5.489162f, 1.e-5f) == 1); 577 CHK(eq_eps(v4f_y(i), 0.970666f, 1.e-5f) == 1); 578 CHK(eq_eps(v4f_z(i), 0.f, 1.e-5f) == 1); 579 i = v4f_xyz_to_rthetaphi(v4f_set(0.f, 7.2f, 3.1f, 0.f)); 580 CHK(eq_eps(v4f_x(i), 7.839005f, 1.e-5f) == 1); 581 CHK(eq_eps(v4f_y(i), 1.164229f, 1.e-5f) == 1); 582 CHK(eq_eps(v4f_z(i), 1.570796f, 1.e-5f) == 1); 583 i = v4f_xyz_to_rthetaphi(v4f_set(4.53f, 7.2f, 3.1f, 0.f)); 584 CHK(eq_eps(v4f_x(i), 9.053778f, 1.e-5f) == 1); 585 CHK(eq_eps(v4f_y(i), 1.221327f, 1.e-5f) == 1); 586 CHK(eq_eps(v4f_z(i), 1.009206f, 1.e-5f) == 1); 587 588 i = v4f_xyz_to_rthetaphi(v4f_set(-4.53f, 7.2f, 3.1f, 0.f)); 589 CHK(eq_eps(v4f_x(i), 9.053778f, 1.e-5f) == 1); 590 CHK(eq_eps(v4f_y(i), 1.221327f, 1.e-5f) == 1); 591 CHK(eq_eps(v4f_z(i), 2.132386f, 1.e-5f) == 1); 592 i = v4f_xyz_to_rthetaphi(v4f_set(-4.53f, -7.2f, 3.1f, 0.f)); 593 CHK(eq_eps(v4f_x(i), 9.053778f, 1.e-5f) == 1); 594 CHK(eq_eps(v4f_y(i), 1.221327f, 1.e-5f) == 1); 595 CHK(eq_eps(v4f_z(i), -2.132386f, 1.e-5f) 596 || eq_eps(v4f_z(i), 2*PI - 2.132386f, 1.e-5f)); 597 i = v4f_xyz_to_rthetaphi(v4f_set(4.53f, -7.2f, 3.1f, 0.f)); 598 CHK(eq_eps(v4f_x(i), 9.053778f, 1.e-5f) == 1); 599 CHK(eq_eps(v4f_y(i), 1.221327f, 1.e-5f) == 1); 600 CHK(eq_eps(v4f_z(i), -1.009206f, 1.e-5f) 601 || eq_eps(v4f_z(i), 2*PI - 1.009206f, 1.e-5f)); 602 i = v4f_xyz_to_rthetaphi(v4f_set(4.53f, 7.2f, -3.1f, 0.f)); 603 CHK(eq_eps(v4f_x(i), 9.053778f, 1.e-5f) == 1); 604 CHK(eq_eps(v4f_y(i), 1.920264f, 1.e-5f) == 1); 605 CHK(eq_eps(v4f_z(i), 1.009206f, 1.e-5f) == 1); 606 i = v4f_xyz_to_rthetaphi(v4f_set(-4.53f, 7.2f, -3.1f, 0.f)); 607 CHK(eq_eps(v4f_x(i), 9.053778f, 1.e-5f) == 1); 608 CHK(eq_eps(v4f_y(i), 1.920264f, 1.e-5f) == 1); 609 CHK(eq_eps(v4f_z(i), 2.132386f, 1.e-5f) == 1); 610 i = v4f_xyz_to_rthetaphi(v4f_set(4.53f, -7.2f, -3.1f, 0.f)); 611 CHK(eq_eps(v4f_x(i), 9.053778f, 1.e-5f) == 1); 612 CHK(eq_eps(v4f_y(i), 1.920264f, 1.e-5f) == 1); 613 CHK(eq_eps(v4f_z(i), -1.009206f, 1.e-5f) 614 || eq_eps(v4f_z(i), 2*PI - 1.009206f, 1.e-5f)); 615 i = v4f_xyz_to_rthetaphi(v4f_set(-4.53f, -7.2f, -3.1f, 0.f)); 616 CHK(eq_eps(v4f_x(i), 9.053778f, 1.e-5f) == 1); 617 CHK(eq_eps(v4f_y(i), 1.920264f, 1.e-5f) == 1); 618 CHK(eq_eps(v4f_z(i), -2.132386f, 1.e-5f) 619 || eq_eps(v4f_z(i), 2*PI - 2.132386f, 1.e-5f)); 620 return 0; 621 } 622