10 for (
int i = 0; i < N; ++i) {
11 std::cout << x[i] <<
" ";
13 std::cout << std::endl;
20 return fabs(x - y) < 1.0e-5f;
22 template<
int N,
typename T>
25 return length2(x - y) < 1.0e-4f;
32 assert(
rsqrt(16.0f) == 0.25f);
33 assert(
rsqrt(16.0 ) == 0.25 );
196 v4[0] = 9; v4[2] = 8;
202 i4[0] = 9; i4[2] = 8;
219 assert(
vec3(1,2,3) ==
vec3(1,2,3));
220 assert(
vec3(1,2,3) !=
vec3(1,2,4));
224 assert(
vec4(1,2,3,4) ==
vec4(1,2,3,4));
225 assert(
vec4(1,2,3,4) !=
vec4(1,2,4,4));
288 assert((v3 +
vec3(4,5,6)) ==
vec3(5,7,9));
290 assert((v4 +
vec4(4,5,6,7)) ==
vec4(5,7,9,11));
291 assert((i4 +
ivec4(4,5,6,7)) ==
ivec4(5,7,9,11));
296 i4 +=
ivec4(2,3,4,5);
297 assert(v3 ==
vec3(3,5,7));
298 assert(i3 ==
ivec3(3,5,7));
299 assert(v4 ==
vec4(3,5,7,9));
300 assert(i4 ==
ivec4(3,5,7,9));
306 assert((v3 -
vec3(4,3,2)) ==
vec3(-3,-1,1));
307 assert((i3 -
ivec3(4,3,2)) ==
ivec3(-3,-1,1));
308 assert((v4 -
vec4(4,3,2,1)) ==
vec4(-3,-1,1,3));
309 assert((i4 -
ivec4(4,3,2,1)) ==
ivec4(-3,-1,1,3));
314 i4 -=
ivec4(2,4,6,8);
315 assert(v3 ==
vec3(-1,-2,-3));
316 assert(i3 ==
ivec3(-1,-2,-3));
317 assert(v4 ==
vec4(-1,-2,-3,-4));
318 assert(i4 ==
ivec4(-1,-2,-3,-4));
322 assert((-
vec3(4,-3,2)) ==
vec3(-4,3,-2));
324 assert((-
vec4(4,-3,2,-1)) ==
vec4(-4,3,-2,1));
325 assert((-
ivec4(4,-3,2,-1)) ==
ivec4(-4,3,-2,1));
332 assert((2.0f * v3) ==
vec3(0,4,-6));
333 assert((2 * i3) ==
ivec3(0,4,-6));
334 assert((2.0f * v4) ==
vec4(0,4,-6,8));
335 assert((2 * i4) ==
ivec4(0,4,-6,8));
337 assert((v3 * 2.0f) ==
vec3(0,4,-6));
338 assert((i3 * 2 ) ==
ivec3(0,4,-6));
339 assert((v4 * 2.0f) ==
vec4(0,4,-6,8));
340 assert((i4 * 2 ) ==
ivec4(0,4,-6,8));
342 vec3 w3(-1,2,-3);
vec4 w4(-1,2,-3,-4);
344 assert((v3 * w3) ==
vec3(0,4,9));
345 assert((i3 * j3) ==
ivec3(0,4,9));
346 assert((v4 * w4) ==
vec4(0,4,9,-16));
347 assert((i4 * j4) ==
ivec4(0,4,9,-16));
349 v3 *= 2.0f; assert(v3 ==
vec3(0,4,-6));
350 i3 *= 2; assert(i3 ==
ivec3(0,4,-6));
351 v4 *= 2.0f; assert(v4 ==
vec4(0,4,-6,8));
352 i4 *= 2; assert(i4 ==
ivec4(0,4,-6,8));
354 v3 *= w3; assert(v3 ==
vec3(0,8,18));
355 i3 *= j3; assert(i3 ==
ivec3(0,8,18));
356 v4 *= w4; assert(v4 ==
vec4(0,8,18,-32));
357 i4 *= j4; assert(i4 ==
ivec4(0,8,18,-32));
368 assert((v3 / 2.0f) ==
vec3(0,0.5f,-2));
369 assert((6.0f / w3) ==
vec3(-6,-3,3));
370 assert((v3 / w3) ==
vec3(0,-0.5f,-2));
372 vec4 v4( 2, 1,-4,-3);
373 vec4 w4(-1, 2, 2,-6);
382 assert(
min(
vec4(1,-2,5,-7),
vec4(0,2,-4,-3)) ==
vec4(0,-2,-4,-7));
383 assert(
min(
ivec4(1,-2,5,-7),
ivec4(0,2,-4,-3)) ==
ivec4(0,-2,-4,-7));
387 assert(
max(
vec4(1,-2,5,-7),
vec4(0,2,-4,-3)) ==
vec4(1,2,5,-3));
388 assert(
max(
ivec4(1,-2,5,-7),
ivec4(0,2,-4,-3)) ==
ivec4(1,2,5,-3));
392 assert(
clamp(
vec3(2,3,4),
vec3(0,4,-4),
vec3(4,7,0)) ==
vec3(2,4,0));
393 assert(
clamp(
ivec3(2,3,4),
ivec3(0,4,-4),
ivec3(4,7,0)) ==
ivec3(2,4,0));
394 assert(
clamp(
vec4(4,2,7,1),
vec4(0,3,2,1),
vec4(4,6,8,3)) ==
vec4(4,3,7,1));
395 assert(
clamp(
ivec4(4,2,7,1),
ivec4(0,3,2,1),
ivec4(4,6,8,3)) ==
ivec4(4,3,7,1));
404 assert(
sum(
vec3(4,-3,2)) == 3.0f);
406 assert(
sum(
vec4(4,-3,2,-1)) == 2.0f);
407 assert(
sum(
ivec4(4,-3,2,-1)) == 2 );
414 assert(
dot(
vec3(4,-3,2),
vec3(-1,3,2) ) == -9.0f);
416 assert(
dot(
vec4(4,-3,2,-1),
vec4(-1,3,2,-2)) == -7.0f);
436 assert(
length(
vec3(4,-3,2 )) == sqrtf(29.0f));
437 assert(
length(
vec4(4,-3,2,-1)) == sqrtf(30.0f));
476 z =
vec4(a, b, c, d);
693 y =
clamp(x, 0.0f, 1.0f);
T length(const vecN< N, T > &x)
T length2(const vecN< N, T > &x)
void test_extract0(const vec4 &x, float &z)
vecN< N, T > min(const vecN< N, T > &x, const vecN< N, T > &y)
void test_change0(float x, vec4 &z)
vecN< N, int > trunc(const vecN< N, T > &x)
vecN< N, T > normalize(const vecN< N, T > &x)
void test_sum(const vec4 &x, float &y)
void test_extract2(const vec4 &x, float &z)
vecN< N, T > max(const vecN< N, T > &x, const vecN< N, T > &y)
void test_recip(const vec4 &x, vec4 &y)
T sum(const vecN< N, T > &x)
vecN< 3, T > cross(const vecN< 3, T > &x, const vecN< 3, T > &y)
void test_div(const vec4 &x, const vec4 &y, vec4 &z)
vecN< N, T > recip(const vecN< N, T > &x)
void test_sum_broadcast(const vec4 &x, vec4 &y)
bool test_equal(const vec4 &x, const vec4 &y)
vecN< N, int > round(const vecN< N, T > &x)
void test_length(const vec4 &x, float &y)
void print(const vecN< N, T > &x)
void test_normalize(const vec4 &x, vec4 &y)
T dot(const vecN< N, T > &x, const vecN< N, T > &y)
vecN< N, T > clamp(const vecN< N, T > &x, const vecN< N, T > &minVal, const vecN< N, T > &maxVal)
void test_trunc(const vec4 &x, ivec4 &y)
void test_length2(const vec4 &x, float &y)
void test_change2(float x, vec4 &z)
void test_dot(const vec4 &x, const vec4 &y, float &z)
void test_min(const vec3 &x, const vec3 &y, vec3 &z)
void test_add(const vec4 &x, const vec4 &y, vec4 &z)
vecN< N, T > dot_broadcast(const vecN< N, T > &x, const vecN< N, T > &y)
bool test_not_equal(const vec4 &x, const vec4 &y)
void test_clamp(const vec3 &x, const vec3 &y, const vec3 &z, vec3 &w)
void test_constr(vec4 &z)
void test_dot_broadcast(const vec4 &x, const vec4 &y, vec4 &z)
void test_mul(const vec4 &x, const vec4 &y, vec4 &z)
vecN< N, T > sum_broadcast(const vecN< N, T > &x)
void test_round(const vec4 &x, ivec4 &y)
void test_negate(const vec4 &x, vec4 &y)