From d7f768718c36a4f65a2d2faeaed80cac8d9cb1f3 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Fri, 17 Dec 2010 01:33:17 +0000 Subject: [PATCH] Added tests to main repository --- CMakeLists.txt | 3 + glm/gen_external_templates.py | 59 ------------ glm/glm_core.cpp | 170 --------------------------------- glm/gtx/simd_vec4.hpp | 10 +- glm/gtx/simd_vec4.inl | 17 ++-- glm/setup.hpp | 2 +- test/CMakeLists.txt | 12 +++ test/bug/CMakeLists.txt | 0 test/core/CMakeLists.txt | 18 ++++ test/core/core_type_float.cpp | 18 ++++ test/core/core_type_half.cpp | 32 +++++++ test/core/core_type_int.cpp | 15 +++ test/core/core_type_mat2x2.cpp | 36 +++++++ test/core/core_type_mat2x3.cpp | 36 +++++++ test/core/core_type_mat2x4.cpp | 38 ++++++++ test/core/core_type_mat3x2.cpp | 37 +++++++ test/core/core_type_mat3x3.cpp | 63 ++++++++++++ test/core/core_type_mat3x4.cpp | 37 +++++++ test/core/core_type_mat4x2.cpp | 37 +++++++ test/core/core_type_mat4x3.cpp | 38 ++++++++ test/core/core_type_mat4x4.cpp | 64 +++++++++++++ test/core/core_type_vec1.cpp | 15 +++ test/core/core_type_vec2.cpp | 15 +++ test/core/core_type_vec3.cpp | 15 +++ test/core/core_type_vec4.cpp | 42 ++++++++ test/gtc/CMakeLists.txt | 0 test/gtx/CMakeLists.txt | 3 + test/gtx/gtx-bit.cpp | 134 ++++++++++++++++++++++++++ test/gtx/gtx-simd-mat4.cpp | 17 ++++ test/gtx/gtx-simd-vec4.cpp | 27 ++++++ test/img/CMakeLists.txt | 0 31 files changed, 769 insertions(+), 241 deletions(-) delete mode 100644 glm/gen_external_templates.py delete mode 100644 glm/glm_core.cpp create mode 100644 test/CMakeLists.txt create mode 100644 test/bug/CMakeLists.txt create mode 100644 test/core/CMakeLists.txt create mode 100644 test/core/core_type_float.cpp create mode 100644 test/core/core_type_half.cpp create mode 100644 test/core/core_type_int.cpp create mode 100644 test/core/core_type_mat2x2.cpp create mode 100644 test/core/core_type_mat2x3.cpp create mode 100644 test/core/core_type_mat2x4.cpp create mode 100644 test/core/core_type_mat3x2.cpp create mode 100644 test/core/core_type_mat3x3.cpp create mode 100644 test/core/core_type_mat3x4.cpp create mode 100644 test/core/core_type_mat4x2.cpp create mode 100644 test/core/core_type_mat4x3.cpp create mode 100644 test/core/core_type_mat4x4.cpp create mode 100644 test/core/core_type_vec1.cpp create mode 100644 test/core/core_type_vec2.cpp create mode 100644 test/core/core_type_vec3.cpp create mode 100644 test/core/core_type_vec4.cpp create mode 100644 test/gtc/CMakeLists.txt create mode 100644 test/gtx/CMakeLists.txt create mode 100644 test/gtx/gtx-bit.cpp create mode 100644 test/gtx/gtx-simd-mat4.cpp create mode 100644 test/gtx/gtx-simd-vec4.cpp create mode 100644 test/img/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index e0007705..e8fd8dec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,10 @@ project(glm) add_definitions(-D_CRT_SECURE_NO_WARNINGS) +include_directories(".") + add_subdirectory(glm) +add_subdirectory(test) add_subdirectory(doc) diff --git a/glm/gen_external_templates.py b/glm/gen_external_templates.py deleted file mode 100644 index 581f2f17..00000000 --- a/glm/gen_external_templates.py +++ /dev/null @@ -1,59 +0,0 @@ - -__author__="eloraiby" -__date__ ="$5-Sep-2010 9:35:29 PM$" - -atomic_types = ["unsigned char", "unsigned short", "unsigned int", - "signed char", "signed short", "signed int", - "float", "double"] - - -glsl_vector_types = ["tvec2", "tvec3", "tvec4"] -glsl_matrix_types = ["tmat2x2", "tmat2x3", "tmat2x4", - "tmat3x2", "tmat3x3", "tmat3x4", - "tmat4x2", "tmat4x3", "tmat4x4"] - -glsl_operators = [] - -def gen_vectors(): - for v in glsl_vector_types: - print - print "//" - print "// " + v + " type explicit instantiation" - print "//" - for a in atomic_types: - print "template struct " + v + "<" + a + ">;" - print - -def gen_matrices(): - for m in glsl_matrix_types: - print - print "//" - print "// " + m + " type explicit instantiation" - print "//" - for a in atomic_types: - print "template struct " + m + "<" + a + ">;" - print - -if __name__ == "__main__": - print "//" - print "// GLM External templates generator script version 0.1 for GLM core" - print "//" - print "// atomic types:", atomic_types - print "// GLSL vector types:", glsl_vector_types; - print "// GLSL matrix types:", glsl_matrix_types; - print "//" - print - print "#include \"glm.hpp\"" - print - print "namespace glm {" - print "namespace detail {" - - - gen_vectors() - gen_matrices() - - print "} // namespace detail" - print "} // namespace glm" - - - diff --git a/glm/glm_core.cpp b/glm/glm_core.cpp deleted file mode 100644 index 3942cc38..00000000 --- a/glm/glm_core.cpp +++ /dev/null @@ -1,170 +0,0 @@ -// -// GLM External templates generator script version 0.1 for GLM core -// -// atomic types: ['unsigned char', 'unsigned short', 'unsigned int', 'signed char', 'signed short', 'signed int', 'float', 'double'] -// GLSL vector types: ['tvec2', 'tvec3', 'tvec4'] -// GLSL matrix types: ['tmat2x2', 'tmat2x3', 'tmat2x4', 'tmat3x2', 'tmat3x3', 'tmat3x4', 'tmat4x2', 'tmat4x3', 'tmat4x4'] -// - -#include "glm.hpp" - -namespace glm { -namespace detail { - -// -// tvec2 type explicit instantiation -// -template struct tvec2; -template struct tvec2; -template struct tvec2; -template struct tvec2; -template struct tvec2; -template struct tvec2; -template struct tvec2; -template struct tvec2; - - -// -// tvec3 type explicit instantiation -// -template struct tvec3; -template struct tvec3; -template struct tvec3; -template struct tvec3; -template struct tvec3; -template struct tvec3; -template struct tvec3; -template struct tvec3; - - -// -// tvec4 type explicit instantiation -// -template struct tvec4; -template struct tvec4; -template struct tvec4; -template struct tvec4; -template struct tvec4; -template struct tvec4; -template struct tvec4; -template struct tvec4; - - -// -// tmat2x2 type explicit instantiation -// -template struct tmat2x2; -template struct tmat2x2; -template struct tmat2x2; -template struct tmat2x2; -template struct tmat2x2; -template struct tmat2x2; -template struct tmat2x2; -template struct tmat2x2; - - -// -// tmat2x3 type explicit instantiation -// -template struct tmat2x3; -template struct tmat2x3; -template struct tmat2x3; -template struct tmat2x3; -template struct tmat2x3; -template struct tmat2x3; -template struct tmat2x3; -template struct tmat2x3; - - -// -// tmat2x4 type explicit instantiation -// -template struct tmat2x4; -template struct tmat2x4; -template struct tmat2x4; -template struct tmat2x4; -template struct tmat2x4; -template struct tmat2x4; -template struct tmat2x4; -template struct tmat2x4; - - -// -// tmat3x2 type explicit instantiation -// -template struct tmat3x2; -template struct tmat3x2; -template struct tmat3x2; -template struct tmat3x2; -template struct tmat3x2; -template struct tmat3x2; -template struct tmat3x2; -template struct tmat3x2; - - -// -// tmat3x3 type explicit instantiation -// -template struct tmat3x3; -template struct tmat3x3; -template struct tmat3x3; -template struct tmat3x3; -template struct tmat3x3; -template struct tmat3x3; -template struct tmat3x3; -template struct tmat3x3; - - -// -// tmat3x4 type explicit instantiation -// -template struct tmat3x4; -template struct tmat3x4; -template struct tmat3x4; -template struct tmat3x4; -template struct tmat3x4; -template struct tmat3x4; -template struct tmat3x4; -template struct tmat3x4; - - -// -// tmat4x2 type explicit instantiation -// -template struct tmat4x2; -template struct tmat4x2; -template struct tmat4x2; -template struct tmat4x2; -template struct tmat4x2; -template struct tmat4x2; -template struct tmat4x2; -template struct tmat4x2; - - -// -// tmat4x3 type explicit instantiation -// -template struct tmat4x3; -template struct tmat4x3; -template struct tmat4x3; -template struct tmat4x3; -template struct tmat4x3; -template struct tmat4x3; -template struct tmat4x3; -template struct tmat4x3; - - -// -// tmat4x4 type explicit instantiation -// -template struct tmat4x4; -template struct tmat4x4; -template struct tmat4x4; -template struct tmat4x4; -template struct tmat4x4; -template struct tmat4x4; -template struct tmat4x4; -template struct tmat4x4; - -} // namespace detail -} // namespace glm diff --git a/glm/gtx/simd_vec4.hpp b/glm/gtx/simd_vec4.hpp index 0c2ac4ce..f042c1e4 100644 --- a/glm/gtx/simd_vec4.hpp +++ b/glm/gtx/simd_vec4.hpp @@ -90,15 +90,15 @@ namespace glm ////////////////////////////////////// // Swizzle operators - template + template fvec4SIMD& swizzle(); - template + template fvec4SIMD swizzle() const; - template + template fvec4SIMD swizzle() const; - template + template fvec4SIMD swizzle() const; - template + template fvec4SIMD swizzle() const; }; diff --git a/glm/gtx/simd_vec4.inl b/glm/gtx/simd_vec4.inl index 1ee922ed..87702ff2 100644 --- a/glm/gtx/simd_vec4.inl +++ b/glm/gtx/simd_vec4.inl @@ -11,6 +11,12 @@ namespace glm { namespace detail { + template + struct mask + { + enum{value = Value}; + }; + ////////////////////////////////////// // Implicit basic constructors @@ -146,25 +152,24 @@ namespace glm inline fvec4SIMD& fvec4SIMD::operator--() { - this->Data = _mm_sub_ps(this->Data , glm::detail::one); + this->Data = _mm_sub_ps(this->Data, glm::detail::one); return *this; } ////////////////////////////////////// // Swizzle operators - template + template inline fvec4SIMD fvec4SIMD::swizzle() const { - __m128 Data = _mm_shuffle_ps(this->Data, this->Data, ((int(d) << 6) | (int(c) << 4) | (int(b) << 2) | (int(a) << 0))); + __m128 Data = _mm_shuffle_ps(this->Data, this->Data, mask<(W << 6) | (Z << 4) | (Y << 2) | (X << 0)>::value); return fvec4SIMD(Data); } - template + template inline fvec4SIMD& fvec4SIMD::swizzle() { - enum{mask = (((int(d) << 6) | (int(c) << 4) | (int(b) << 2) | (int(a) << 0)))}; - this->Data = _mm_shuffle_ps(this->Data, this->Data, mask); + this->Data = _mm_shuffle_ps(this->Data, this->Data, mask<(W << 6) | (Z << 4) | (Y << 2) | (X << 0)>::value); return *this; } diff --git a/glm/setup.hpp b/glm/setup.hpp index 519a22e3..80698816 100644 --- a/glm/setup.hpp +++ b/glm/setup.hpp @@ -241,7 +241,7 @@ #if(defined(GLM_COMPILER) && (GLM_COMPILER & GLM_COMPILER_GCC)) # define GLM_INSTRUCTION_SET #elif(defined(GLM_COMPILER) && (GLM_COMPILER & GLM_COMPILER_VC)) -# ifdef(_M_CEE_PURE) +# ifdef _M_CEE_PURE # define GLM_INSTRUCTION_SET GLM_INSTRUCTION_SET_PURE # else # define GLM_INSTRUCTION_SET diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 00000000..75cfd8ea --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,12 @@ +function(glmCreateTestGTC NAME) + set(SAMPLE_NAME test-${NAME}) + + add_executable(${SAMPLE_NAME} ${NAME}.cpp) +endfunction(glmCreateTestGTC) + +add_subdirectory(bug) +add_subdirectory(core) +add_subdirectory(gtc) +add_subdirectory(gtx) +add_subdirectory(img) + diff --git a/test/bug/CMakeLists.txt b/test/bug/CMakeLists.txt new file mode 100644 index 00000000..e69de29b diff --git a/test/core/CMakeLists.txt b/test/core/CMakeLists.txt new file mode 100644 index 00000000..f3560f73 --- /dev/null +++ b/test/core/CMakeLists.txt @@ -0,0 +1,18 @@ +glmCreateTestGTC(core_type_float) +glmCreateTestGTC(core_type_half) +glmCreateTestGTC(core_type_int) +glmCreateTestGTC(core_type_mat2x2) +glmCreateTestGTC(core_type_mat2x3) +glmCreateTestGTC(core_type_mat2x4) +glmCreateTestGTC(core_type_mat3x2) +glmCreateTestGTC(core_type_mat3x3) +glmCreateTestGTC(core_type_mat3x4) +glmCreateTestGTC(core_type_mat4x2) +glmCreateTestGTC(core_type_mat4x3) +glmCreateTestGTC(core_type_mat4x4) +glmCreateTestGTC(core_type_vec1) +glmCreateTestGTC(core_type_vec2) +glmCreateTestGTC(core_type_vec3) +glmCreateTestGTC(core_type_vec4) + + diff --git a/test/core/core_type_float.cpp b/test/core/core_type_float.cpp new file mode 100644 index 00000000..2a5f3067 --- /dev/null +++ b/test/core/core_type_float.cpp @@ -0,0 +1,18 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2008-08-31 +// Updated : 2008-08-31 +// Licence : This source is under MIT License +// File : test/core/type_float.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +int main() +{ + return -1; +} + + + diff --git a/test/core/core_type_half.cpp b/test/core/core_type_half.cpp new file mode 100644 index 00000000..c6503a56 --- /dev/null +++ b/test/core/core_type_half.cpp @@ -0,0 +1,32 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2008-08-31 +// Updated : 2010-08-25 +// Licence : This source is under MIT licence +// File : test/core/type_half.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include + +int main() +{ + int Result = 0; + + glm::half A(1.0f); + glm::half B(2.0f); + glm::half C = A + B; + glm::half D(C); + float E = D; + int F = C; + glm::half G = B * C; + glm::half H = G / C; + H += glm::half(1.0f); + double J = H; + int I = H; + + Result = Result && J == 3.0; + + return Result != 0; +} diff --git a/test/core/core_type_int.cpp b/test/core/core_type_int.cpp new file mode 100644 index 00000000..eb295543 --- /dev/null +++ b/test/core/core_type_int.cpp @@ -0,0 +1,15 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2008-08-31 +// Updated : 2008-08-31 +// Licence : This source is under MIT License +// File : test/core/type_int.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +int main() +{ + return -1; +} diff --git a/test/core/core_type_mat2x2.cpp b/test/core/core_type_mat2x2.cpp new file mode 100644 index 00000000..6d710abf --- /dev/null +++ b/test/core/core_type_mat2x2.cpp @@ -0,0 +1,36 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2008-08-31 +// Updated : 2008-08-31 +// Licence : This source is under MIT License +// File : test/core/type_mat2x2.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +static bool test_operators() +{ + glm::mat2x2 m(1.0f); + glm::vec2 u(1.0f); + glm::vec2 v(1.0f); + float x = 1.0f; + glm::vec2 a = m * u; + glm::vec2 b = v * m; + glm::mat2x2 n = x / m; + glm::mat2x2 o = m / x; + glm::mat2x2 p = x * m; + glm::mat2x2 q = m * x; + + return true; +} + +int main() +{ + bool Result = true; + + Result = Result && test_operators(); + + assert(Result); + return Result; +} diff --git a/test/core/core_type_mat2x3.cpp b/test/core/core_type_mat2x3.cpp new file mode 100644 index 00000000..30197aaf --- /dev/null +++ b/test/core/core_type_mat2x3.cpp @@ -0,0 +1,36 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2008-08-31 +// Updated : 2008-08-31 +// Licence : This source is under MIT License +// File : test/core/type_mat2x3.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +static bool test_operators() +{ + glm::mat2x3 m(1.0f); + glm::vec2 u(1.0f); + glm::vec3 v(1.0f); + float x = 1.0f; + glm::vec3 a = m * u; + glm::vec2 b = v * m; + glm::mat2x3 n = x / m; + glm::mat2x3 o = m / x; + glm::mat2x3 p = x * m; + glm::mat2x3 q = m * x; + + return true; +} + +int main() +{ + bool Result = true; + + Result = Result && test_operators(); + + assert(Result); + return Result; +} diff --git a/test/core/core_type_mat2x4.cpp b/test/core/core_type_mat2x4.cpp new file mode 100644 index 00000000..2fd2efad --- /dev/null +++ b/test/core/core_type_mat2x4.cpp @@ -0,0 +1,38 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2008-08-31 +// Updated : 2008-08-31 +// Licence : This source is under MIT License +// File : test/core/type_mat2x4.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +static bool test_operators() +{ + glm::mat2x4 m(1.0f); + glm::vec2 u(1.0f); + glm::vec4 v(1.0f); + float x = 1.0f; + glm::vec4 a = m * u; + glm::vec2 b = v * m; + glm::mat2x4 n = x / m; + glm::mat2x4 o = m / x; + glm::mat2x4 p = x * m; + glm::mat2x4 q = m * x; + + return true; +} + +int main() +{ + bool Result = true; + + Result = Result && test_operators(); + + assert(Result); + return Result; +} + + diff --git a/test/core/core_type_mat3x2.cpp b/test/core/core_type_mat3x2.cpp new file mode 100644 index 00000000..5bc66174 --- /dev/null +++ b/test/core/core_type_mat3x2.cpp @@ -0,0 +1,37 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2008-08-31 +// Updated : 2008-08-31 +// Licence : This source is under MIT License +// File : test/core/type_mat3x2.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +static bool test_operators() +{ + glm::mat3x2 m(1.0f); + glm::vec3 u(1.0f); + glm::vec2 v(1.0f); + float x = 1.0f; + glm::vec2 a = m * u; + glm::vec3 b = v * m; + glm::mat3x2 n = x / m; + glm::mat3x2 o = m / x; + glm::mat3x2 p = x * m; + glm::mat3x2 q = m * x; + + return true; +} + +int main() +{ + bool Result = true; + + Result = Result && test_operators(); + + assert(Result); + return Result; +} + diff --git a/test/core/core_type_mat3x3.cpp b/test/core/core_type_mat3x3.cpp new file mode 100644 index 00000000..b6a143b1 --- /dev/null +++ b/test/core/core_type_mat3x3.cpp @@ -0,0 +1,63 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2008-08-31 +// Updated : 2008-08-31 +// Licence : This source is under MIT License +// File : test/core/type_mat3x3.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include + +void print(glm::dmat3 const & Mat0) +{ + printf("mat3(\n"); + printf("\tvec3(%2.3f, %2.3f, %2.3f)\n", Mat0[0][0], Mat0[0][1], Mat0[0][2]); + printf("\tvec3(%2.3f, %2.3f, %2.3f)\n", Mat0[1][0], Mat0[1][1], Mat0[1][2]); + printf("\tvec3(%2.3f, %2.3f, %2.3f))\n\n", Mat0[2][0], Mat0[2][1], Mat0[2][2]); +} + +bool test_mat3x3() +{ + glm::dmat3 Mat0( + glm::dvec3(0.6f, 0.2f, 0.3f), + glm::dvec3(0.2f, 0.7f, 0.5f), + glm::dvec3(0.3f, 0.5f, 0.7f)); + glm::dmat3 Inv0 = glm::inverse(Mat0); + glm::dmat3 Res0 = Mat0 * Inv0; + + print(Mat0); + print(Inv0); + print(Res0); + + return true; +} + +static bool test_operators() +{ + glm::mat3x3 m(1.0f); + glm::vec3 u(1.0f); + glm::vec3 v(1.0f); + float x = 1.0f; + glm::vec3 a = m * u; + glm::vec3 b = v * m; + glm::mat3x3 n = x / m; + glm::mat3x3 o = m / x; + glm::mat3x3 p = x * m; + glm::mat3x3 q = m * x; + + return true; +} + +int main() +{ + bool Result = true; + + Result = Result && test_mat3x3(); + Result = Result && test_operators(); + + assert(Result); + return Result; +} + diff --git a/test/core/core_type_mat3x4.cpp b/test/core/core_type_mat3x4.cpp new file mode 100644 index 00000000..82837629 --- /dev/null +++ b/test/core/core_type_mat3x4.cpp @@ -0,0 +1,37 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2008-08-31 +// Updated : 2008-08-31 +// Licence : This source is under MIT License +// File : test/core/type_mat3x4.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +static bool test_operators() +{ + glm::mat3x4 m(1.0f); + glm::vec3 u(1.0f); + glm::vec4 v(1.0f); + float x = 1.0f; + glm::vec4 a = m * u; + glm::vec3 b = v * m; + glm::mat3x4 n = x / m; + glm::mat3x4 o = m / x; + glm::mat3x4 p = x * m; + glm::mat3x4 q = m * x; + + return true; +} + +int main() +{ + bool Result = true; + + Result = Result && test_operators(); + + assert(Result); + return Result; +} + diff --git a/test/core/core_type_mat4x2.cpp b/test/core/core_type_mat4x2.cpp new file mode 100644 index 00000000..c0f8b694 --- /dev/null +++ b/test/core/core_type_mat4x2.cpp @@ -0,0 +1,37 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2008-08-31 +// Updated : 2008-08-31 +// Licence : This source is under MIT License +// File : test/core/type_mat4x2.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +static bool test_operators() +{ + glm::mat4x2 m(1.0f); + glm::vec4 u(1.0f); + glm::vec2 v(1.0f); + float x = 1.0f; + glm::vec2 a = m * u; + glm::vec4 b = v * m; + glm::mat4x2 n = x / m; + glm::mat4x2 o = m / x; + glm::mat4x2 p = x * m; + glm::mat4x2 q = m * x; + + return true; +} + +int main() +{ + bool Result = true; + + Result = Result && test_operators(); + + assert(Result); + return Result; +} + diff --git a/test/core/core_type_mat4x3.cpp b/test/core/core_type_mat4x3.cpp new file mode 100644 index 00000000..bf570fc7 --- /dev/null +++ b/test/core/core_type_mat4x3.cpp @@ -0,0 +1,38 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2008-08-31 +// Updated : 2008-08-31 +// Licence : This source is under MIT License +// File : test/core/type_mat4x3.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +static bool test_operators() +{ + glm::mat4x3 m(1.0f); + glm::vec4 u(1.0f); + glm::vec3 v(1.0f); + float x = 1.0f; + glm::vec3 a = m * u; + glm::vec4 b = v * m; + glm::mat4x3 n = x / m; + glm::mat4x3 o = m / x; + glm::mat4x3 p = x * m; + glm::mat4x3 q = m * x; + + return true; +} + +int main() +{ + bool Result = true; + + Result = Result && test_operators(); + + assert(Result); + return Result; +} + + diff --git a/test/core/core_type_mat4x4.cpp b/test/core/core_type_mat4x4.cpp new file mode 100644 index 00000000..9539c75d --- /dev/null +++ b/test/core/core_type_mat4x4.cpp @@ -0,0 +1,64 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2008-08-31 +// Updated : 2008-08-31 +// Licence : This source is under MIT License +// File : test/core/type_mat4x4.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include + +void print(glm::dmat4 const & Mat0) +{ + printf("mat4(\n"); + printf("\tvec4(%2.3f, %2.3f, %2.3f, %2.3f)\n", Mat0[0][0], Mat0[0][1], Mat0[0][2], Mat0[0][3]); + printf("\tvec4(%2.3f, %2.3f, %2.3f, %2.3f)\n", Mat0[1][0], Mat0[1][1], Mat0[1][2], Mat0[1][3]); + printf("\tvec4(%2.3f, %2.3f, %2.3f, %2.3f)\n", Mat0[2][0], Mat0[2][1], Mat0[2][2], Mat0[2][3]); + printf("\tvec4(%2.3f, %2.3f, %2.3f, %2.3f))\n\n", Mat0[3][0], Mat0[3][1], Mat0[3][2], Mat0[3][3]); +} + +bool test_mat4x4() +{ + glm::dmat4 Mat0( + glm::dvec4(0.6f, 0.2f, 0.3f, 0.4f), + glm::dvec4(0.2f, 0.7f, 0.5f, 0.3f), + glm::dvec4(0.3f, 0.5f, 0.7f, 0.2f), + glm::dvec4(0.4f, 0.3f, 0.2f, 0.6f)); + glm::dmat4 Inv0 = glm::inverse(Mat0); + glm::dmat4 Res0 = Mat0 * Inv0; + + print(Mat0); + print(Inv0); + print(Res0); + + return true; +} + +static bool test_operators() +{ + glm::mat4x4 m(1.0f); + glm::vec4 u(1.0f); + glm::vec4 v(1.0f); + float x = 1.0f; + glm::vec4 a = m * u; + glm::vec4 b = v * m; + glm::mat4x4 n = x / m; + glm::mat4x4 o = m / x; + glm::mat4x4 p = x * m; + glm::mat4x4 q = m * x; + + return true; +} + +int main() +{ + bool Result = true; + + Result = Result && test_mat4x4(); + Result = Result && test_operators(); + + assert(Result); + return Result; +} diff --git a/test/core/core_type_vec1.cpp b/test/core/core_type_vec1.cpp new file mode 100644 index 00000000..43aaf59e --- /dev/null +++ b/test/core/core_type_vec1.cpp @@ -0,0 +1,15 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2008-08-31 +// Updated : 2008-08-31 +// Licence : This source is under MIT License +// File : test/core/type_vec1.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +int main() +{ + return -1; +} diff --git a/test/core/core_type_vec2.cpp b/test/core/core_type_vec2.cpp new file mode 100644 index 00000000..b806c1ff --- /dev/null +++ b/test/core/core_type_vec2.cpp @@ -0,0 +1,15 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2008-08-31 +// Updated : 2008-08-31 +// Licence : This source is under MIT License +// File : test/core/type_vec2.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +int main() +{ + return -1; +} diff --git a/test/core/core_type_vec3.cpp b/test/core/core_type_vec3.cpp new file mode 100644 index 00000000..efbd336f --- /dev/null +++ b/test/core/core_type_vec3.cpp @@ -0,0 +1,15 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2008-08-31 +// Updated : 2008-08-31 +// Licence : This source is under MIT License +// File : test/core/type_vec3.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include + +int main() +{ + return -1; +} diff --git a/test/core/core_type_vec4.cpp b/test/core/core_type_vec4.cpp new file mode 100644 index 00000000..c8175811 --- /dev/null +++ b/test/core/core_type_vec4.cpp @@ -0,0 +1,42 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2008-08-31 +// Updated : 2008-08-31 +// Licence : This source is under MIT License +// File : test/core/type_vec4.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +template +struct mask +{ + enum{value = Value}; +}; + +enum comp +{ + X, + Y, + Z, + W +}; + +template +__m128 swizzle(glm::vec4 const & v) +{ + __m128 Src = _mm_set_ps(v.w, v.z, v.y, v.x); + return _mm_shuffle_ps(Src, Src, mask<(int(W) << 6) | (int(Z) << 4) | (int(Y) << 2) | (int(X) << 0)>::value); +} + +int main() +{ + __m128 DataA = swizzle(glm::vec4(1.0f, 2.0f, 3.0f, 4.0f)); + __m128 DataB = swizzle(glm::vec4(1.0f, 2.0f, 3.0f, 4.0f)); + + return 0; +} + diff --git a/test/gtc/CMakeLists.txt b/test/gtc/CMakeLists.txt new file mode 100644 index 00000000..e69de29b diff --git a/test/gtx/CMakeLists.txt b/test/gtx/CMakeLists.txt new file mode 100644 index 00000000..a10131e5 --- /dev/null +++ b/test/gtx/CMakeLists.txt @@ -0,0 +1,3 @@ +glmCreateTestGTC(gtx-bit) +glmCreateTestGTC(gtx-simd-vec4) +glmCreateTestGTC(gtx-simd-mat4) diff --git a/test/gtx/gtx-bit.cpp b/test/gtx/gtx-bit.cpp new file mode 100644 index 00000000..da4f39e1 --- /dev/null +++ b/test/gtx/gtx-bit.cpp @@ -0,0 +1,134 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2010-09-16 +// Updated : 2010-09-16 +// Licence : This source is under MIT licence +// File : test/gtx/bit.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include + +enum result +{ + SUCCESS, + FAIL, + ASSERT, + STATIC_ASSERT +}; + +namespace extractField +{ + template + struct type + { + genType Value; + sizeType BitFirst; + sizeType BitCount; + genType Return; + result Result; + }; + + typedef type typeU64; + + typeU64 const Data64[] = + { + {0xffffffffffffffff, 8, 0, 0x0000000000000000, SUCCESS}, + {0x0000000000000000, 0,64, 0x0000000000000000, SUCCESS}, + {0xffffffffffffffff, 0,64, 0xffffffffffffffff, SUCCESS}, + {0x0f0f0f0f0f0f0f0f, 0,64, 0x0f0f0f0f0f0f0f0f, SUCCESS}, + {0x0000000000000000, 8, 0, 0x0000000000000000, SUCCESS}, + {0x8000000000000000,63, 1, 0x0000000000000001, SUCCESS}, + {0x7fffffffffffffff,63, 1, 0x0000000000000000, SUCCESS}, + {0x0000000000000300, 8, 8, 0x0000000000000003, SUCCESS}, + {0x000000000000ff00, 8, 8, 0x00000000000000ff, SUCCESS}, + {0xfffffffffffffff0, 0, 5, 0x0000000000000010, SUCCESS}, + {0x00000000000000ff, 1, 3, 0x0000000000000007, SUCCESS}, + {0x00000000000000ff, 0, 3, 0x0000000000000007, SUCCESS}, + {0x0000000000000000, 0, 2, 0x0000000000000000, SUCCESS}, + {0xffffffffffffffff, 0, 8, 0x00000000000000ff, SUCCESS}, + {0xffffffff00000000,32,32, 0x00000000ffffffff, SUCCESS}, + {0xfffffffffffffff0, 0, 8, 0x0000000000000000, FAIL}, + {0xffffffffffffffff,32,32, 0x0000000000000000, FAIL}, + //{0xffffffffffffffff,64, 1, 0x0000000000000000, ASSERT}, /* Throw an assert */ + //{0xffffffffffffffff, 0,65, 0x0000000000000000, ASSERT}, /* Throw an assert */ + //{0xffffffffffffffff,33,32, 0x0000000000000000, ASSERT}, /* Throw an assert */ + }; + + int test() + { + glm::uint32 count = sizeof(Data64) / sizeof(typeU64); + + for(glm::uint32 i = 0; i < count; ++i) + { + glm::uint64 Return = glm::extractField( + Data64[i].Value, + Data64[i].BitFirst, + Data64[i].BitCount); + + bool Compare = Data64[i].Return == Return; + + if(Data64[i].Result == SUCCESS && Compare) + continue; + else if(Data64[i].Result == FAIL && !Compare) + continue; + + std::cout << "glm::extractfield test fail on test " << i << std::endl; + return 1; + } + + return 0; + } +}//extractField + +namespace bitRevert +{ + template + struct type + { + genType Value; + genType Return; + result Result; + }; + + typedef type typeU64; + + typeU64 const Data64[] = + { + {0xffffffffffffffff, 0xffffffffffffffff, SUCCESS}, + {0x0000000000000000, 0x0000000000000000, SUCCESS}, + {0xf000000000000000, 0x000000000000000f, SUCCESS}, + }; + + int test() + { + glm::uint32 count = sizeof(Data64) / sizeof(typeU64); + + for(glm::uint32 i = 0; i < count; ++i) + { + glm::uint64 Return = glm::bitRevert( + Data64[i].Value); + + bool Compare = Data64[i].Return == Return; + + if(Data64[i].Result == SUCCESS && Compare) + continue; + else if(Data64[i].Result == FAIL && !Compare) + continue; + + std::cout << "glm::extractfield test fail on test " << i << std::endl; + return 1; + } + + return 0; + } +}//bitRevert + +int main(int argc, void* argv[]) +{ + ::extractField::test(); + ::bitRevert::test(); +} diff --git a/test/gtx/gtx-simd-mat4.cpp b/test/gtx/gtx-simd-mat4.cpp new file mode 100644 index 00000000..c2860749 --- /dev/null +++ b/test/gtx/gtx-simd-mat4.cpp @@ -0,0 +1,17 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2010-09-16 +// Updated : 2010-09-16 +// Licence : This source is under MIT licence +// File : test/gtx/simd-mat4.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main(int argc, void* argv[]) +{ + +} diff --git a/test/gtx/gtx-simd-vec4.cpp b/test/gtx/gtx-simd-vec4.cpp new file mode 100644 index 00000000..4425c00a --- /dev/null +++ b/test/gtx/gtx-simd-vec4.cpp @@ -0,0 +1,27 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2010-09-16 +// Updated : 2010-09-16 +// Licence : This source is under MIT licence +// File : test/gtx/simd-vec4.cpp +/////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +int main(int argc, char* argv[]) +{ + glm::simd_vec4 A1(0.0f, 0.1f, 0.2f, 0.3f); + glm::simd_vec4 B1(0.4f, 0.5f, 0.6f, 0.7f); + glm::simd_vec4 C1 = A1 + B1; + glm::simd_vec4 D1 = A1.swizzle(); + + printf("A1(%2.3f, %2.3f, %2.3f, %2.3f)\n", A1.x, A1.y, A1.z, A1.w); + printf("B1(%2.3f, %2.3f, %2.3f, %2.3f)\n", B1.x, B1.y, B1.z, B1.w); + printf("C1(%2.3f, %2.3f, %2.3f, %2.3f)\n", C1.x, C1.y, C1.z, C1.w); + printf("D1(%2.3f, %2.3f, %2.3f, %2.3f)\n", D1.x, D1.y, D1.z, D1.w); + + return 0; +} diff --git a/test/img/CMakeLists.txt b/test/img/CMakeLists.txt new file mode 100644 index 00000000..e69de29b