Browse Source

Added quaternion tests

Christophe Riccio 14 years ago
parent
commit
f7d6ffc833
3 changed files with 112 additions and 6 deletions
  1. 2 2
      glm/gtc/quaternion.hpp
  2. 71 0
      test/gtc/gtc_quaternion.cpp
  3. 39 4
      test/gtx/gtx_quaternion.cpp

+ 2 - 2
glm/gtc/quaternion.hpp

@@ -122,13 +122,13 @@ namespace quaternion ///< GLM_GTC_quaternion extension: Quaternion types and fun
 	/// \addtogroup gtc_quaternion
 	///@{
 
-	//! Returns the length of the quaternion x. 
+	//! Returns the length of the quaternion. 
 	//! From GLM_GTC_quaternion extension.
     template <typename T> 
 	typename detail::tquat<T>::value_type length(
 		detail::tquat<T> const & q);
 
-    //! Returns the normalized quaternion of from x. 
+    //! Returns the normalized quaternion. 
 	//! From GLM_GTC_quaternion extension.
 	template <typename T> 
 	detail::tquat<T> normalize(

+ 71 - 0
test/gtc/gtc_quaternion.cpp

@@ -9,10 +9,81 @@
 
 #include <glm/glm.hpp>
 #include <glm/gtc/quaternion.hpp>
+#include <glm/gtx/epsilon.hpp>
+
+int test_quat_type()
+{
+    glm::quat A;
+    glm::dquat B;
+    
+    return 0;
+}
+
+int test_quat_slerp()
+{
+    int Error = 0;
+    
+    glm::quat A(0.0f, glm::vec3(0, 0, 1));
+    glm::quat B(90.0f, glm::vec3(0, 0, 1));
+    glm::quat C = glm::mix(A, B, 0.5f);
+    
+    Error += C != glm::quat(45.f, glm::vec3(0, 0, 1)) ? 0 : 1;
+    
+    return Error;
+}
+
+int test_quat_length()
+{
+    int Error = 0;
+    
+    float A = glm::length(glm::quat(45.0f, glm::vec3(0, 0, 1)));
+    Error += A == 1.0f ? 0 : 1;
+    float B = glm::length(glm::quat(90.0f, glm::vec3(0, 0, 2)));
+    Error += B == 2.0f ? 0 : 1;
+    
+    return Error;
+}
+
+int test_quat_normalize()
+{
+    int Error = 0;
+ 
+    {
+        glm::quat Q(45.0f, glm::vec3(0, 0, 1));
+        glm::quat N = glm::normalize(Q);
+        float L = glm::length(N);
+        Error += L == 1.0f ? 0 : 1;
+        float A = glm::angle(N);
+        Error += glm::equalEpsilon(A, 45.0f, 0.01f) ? 0 : 1;
+    }
+    {
+        glm::quat Q(45.0f, glm::vec3(0, 0, 2));
+        glm::quat N = glm::normalize(Q);
+        float L = glm::length(N);
+        Error += L == 1.0f ? 0 : 1;
+        float A = glm::angle(N);
+        Error += glm::equalEpsilon(A, 45.0f, 0.01f) ? 0 : 1;
+    }
+    {
+        glm::quat Q(45.0f, glm::vec3(1, 2, 3));
+        glm::quat N = glm::normalize(Q);
+        float L = glm::length(N);
+        Error += L == 1.0f ? 0 : 1;
+        float A = glm::angle(N);
+        Error += glm::equalEpsilon(A, 45.0f, 0.01f) ? 0 : 1;
+    }
+    
+    return Error;
+}
 
 int main()
 {
 	int Error = 0;
+    
+    Error += test_quat_type();
+    Error += test_quat_slerp();
+    Error += test_quat_length();
+    Error += test_quat_normalize();
 
 	return Error;
 }

+ 39 - 4
test/gtx/gtx_quaternion.cpp

@@ -1,18 +1,53 @@
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2010-09-16
-// Updated : 2010-05-07
+// Created : 2011-05-25
+// Updated : 2011-05-25
 // Licence : This source is under MIT licence
-// File    : test/gtc/quaternion.cpp
+// File    : test/gtx/quaternion.cpp
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 #include <glm/glm.hpp>
-#include <glm/gtc/quaternion.hpp>
+#include <glm/gtx/quaternion.hpp>
+#include <glm/gtx/epsilon.hpp>
+
+int test_quat_angle()
+{
+    int Error = 0;
+    
+    {
+        glm::quat Q(45.0f, glm::vec3(0, 0, 1));
+        glm::quat N = glm::normalize(Q);
+        float L = glm::length(N);
+        Error += L == 1.0f ? 0 : 1;
+        float A = glm::angle(N);
+        Error += glm::equalEpsilon(A, 45.0f, 0.01f) ? 0 : 1;
+    }
+    {
+        glm::quat Q(45.0f, glm::vec3(0, 0, 2));
+        glm::quat N = glm::normalize(Q);
+        float L = glm::length(N);
+        Error += L == 1.0f ? 0 : 1;
+        float A = glm::angle(N);
+        Error += glm::equalEpsilon(A, 45.0f, 0.01f) ? 0 : 1;
+    }
+    {
+        glm::quat Q(45.0f, glm::vec3(1, 2, 3));
+        glm::quat N = glm::normalize(Q);
+        float L = glm::length(N);
+        Error += L == 1.0f ? 0 : 1;
+        float A = glm::angle(N);
+        Error += glm::equalEpsilon(A, 45.0f, 0.01f) ? 0 : 1;
+    }
+    
+    return Error;
+}
 
 int main()
 {
 	int Error = 0;
+    
+    Error += test_quat_angle();
 
 	return Error;
 }