diff --git a/.travis.yml b/.travis.yml index c2c0c84..9f2a546 100644 --- a/.travis.yml +++ b/.travis.yml @@ -57,3 +57,6 @@ after_success: --gcov-options '\-lp' --verbose; fi + +after_failure: + - cat ./test-suite.log diff --git a/include/cglm/quat.h b/include/cglm/quat.h index f5f29af..2ebc8b3 100644 --- a/include/cglm/quat.h +++ b/include/cglm/quat.h @@ -233,7 +233,7 @@ glm_quat_normalize_to(versor q, versor dest) { dot = glm_vec4_norm2(q); if (dot <= 0.0f) { - glm_quat_identity(q); + glm_quat_identity(dest); return; } diff --git a/include/cglm/vec4.h b/include/cglm/vec4.h index b94cf61..d053ed5 100644 --- a/include/cglm/vec4.h +++ b/include/cglm/vec4.h @@ -690,18 +690,9 @@ CGLM_INLINE float glm_vec4_distance(vec4 a, vec4 b) { #if defined( __SSE__ ) || defined( __SSE2__ ) - __m128 x0; - x0 = _mm_sub_ps(glmm_load(b), glmm_load(a)); - x0 = _mm_mul_ps(x0, x0); - x0 = _mm_add_ps(x0, glmm_shuff1(x0, 1, 0, 3, 2)); - return _mm_cvtss_f32(_mm_sqrt_ss(_mm_add_ss(x0, - glmm_shuff1(x0, 0, 1, 0, 1)))); + return glmm_norm(_mm_sub_ps(glmm_load(b), glmm_load(a))); #elif defined(CGLM_NEON_FP) - float32x4_t v0; - float32_t r; - v0 = vsubq_f32(vld1q_f32(a), vld1q_f32(b)); - r = vaddvq_f32(vmulq_f32(v0, v0)); - return sqrtf(r); + return glmm_norm(vsubq_f32(glmm_load(a), glmm_load(b))); #else return sqrtf(glm_pow2(b[0] - a[0]) + glm_pow2(b[1] - a[1]) diff --git a/post-build.sh b/post-build.sh index 9861ac4..6fa6e7a 100644 --- a/post-build.sh +++ b/post-build.sh @@ -8,12 +8,17 @@ cd $(dirname "$0") -mkdir -p .libs +mkdir -p "$(pwd)/.libs" + +libmocka_folder=$(pwd)/test/lib/cmocka/build/src/ if [ "$(uname)" = "Darwin" ]; then - ln -sf $(pwd)/test/lib/cmocka/build/src/libcmocka.0.dylib \ - .libs/libcmocka.0.dylib; + libcmocka=libcmocka.0.dylib else - ln -sf $(pwd)/test/lib/cmocka/build/src/libcmocka.so.0 \ - .libs/libcmocka.so.0; + libcmocka=libcmocka.so.0 +fi + +libcmocka_path="$libmocka_folder$libcmocka" +if [ -f "$libcmocka_path" ]; then + ln -sf "$libcmocka_path" "$(pwd)/.libs/$libcmocka"; fi diff --git a/test/src/test_bezier.c b/test/src/test_bezier.c index bd7c796..1c7bb11 100644 --- a/test/src/test_bezier.c +++ b/test/src/test_bezier.c @@ -51,8 +51,8 @@ test_bezier(void **state) { Bs_plain = test_bezier_plain(s, p0, c0, c1, p1); assert_true(glm_eq(Bs, Bs_plain)); - assert_true(glm_eq(smc, Bs_plain)); - assert_true(glm_eq(Bs, smc)); + test_assert_eqf(smc, Bs_plain); + test_assert_eqf(Bs, smc); /* test cubic hermite */ smc = glm_smc(s, GLM_HERMITE_MAT, (vec4){p0, p1, c0, c1}); diff --git a/test/src/test_common.c b/test/src/test_common.c index f835235..02ccaec 100644 --- a/test/src/test_common.c +++ b/test/src/test_common.c @@ -5,6 +5,7 @@ #include "test_common.h" #include +#include #define m 4 #define n 4 diff --git a/test/src/test_vec4.c b/test/src/test_vec4.c index 5fe3be8..02137b0 100644 --- a/test/src/test_vec4.c +++ b/test/src/test_vec4.c @@ -93,6 +93,13 @@ test_vec4(void **state) { /* 3. test SIMD norm2 */ test_rand_vec4(v); test_assert_eqf(test_vec4_norm2(v), glm_vec4_norm2(v)); + + /* 4. test SSE/SIMD distance */ + test_rand_vec4(v1); + test_rand_vec4(v2); + d1 = glm_vec4_distance(v1, v2); + d2 = sqrtf(powf(v1[0]-v2[0], 2.0f) + pow(v1[1]-v2[1], 2.0f) + pow(v1[2]-v2[2], 2.0f) + pow(v1[3]-v2[3], 2.0f)); + assert_true(fabsf(d1 - d2) <= 0.000009); } /* test zero */