Browse Source

Fixed error: comparing floating point with == or != is unsafe

Groove 7 years ago
parent
commit
6684535016

+ 4 - 9
test/core/core_type_mat2x2.cpp

@@ -65,8 +65,7 @@ int test_ctr()
 		glm::highp_mat2x2 const B(A);
 		glm::highp_mat2x2 const B(A);
 		glm::mediump_mat2x2 const C(B);
 		glm::mediump_mat2x2 const C(B);
 
 
-		for(glm::length_t i = 0; i < A.length(); ++i)
-			Error += glm::all(glm::equal(A[i], C[i])) ? 0 : 1;
+		Error += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;
 	}
 	}
 
 
 #if GLM_HAS_INITIALIZER_LISTS
 #if GLM_HAS_INITIALIZER_LISTS
@@ -80,11 +79,8 @@ int test_ctr()
 		{0, 1},
 		{0, 1},
 		{2, 3}};
 		{2, 3}};
 
 
-	for(glm::length_t i = 0; i < m0.length(); ++i)
-		Error += glm::all(glm::equal(m0[i], m2[i])) ? 0 : 1;
-
-	for(glm::length_t i = 0; i < m1.length(); ++i)
-		Error += glm::all(glm::equal(m1[i], m2[i])) ? 0 : 1;
+	Error += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;
+	Error += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;
 
 
 	std::vector<glm::mat2x2> v1{
 	std::vector<glm::mat2x2> v1{
 		{0, 1, 2, 3},
 		{0, 1, 2, 3},
@@ -118,8 +114,7 @@ namespace cast
 		glm::mat2 B(A);
 		glm::mat2 B(A);
 		glm::mat2 Identity(1.0f);
 		glm::mat2 Identity(1.0f);
 
 
-		for(glm::length_t i = 0, length = B.length(); i < length; ++i)
-			Error += glm::all(glm::equal(B[i], Identity[i])) ? 0 : 1;
+		Error += glm::all(glm::equal(B, Identity, glm::epsilon<float>())) ? 0 : 1;
 
 
 		return Error;
 		return Error;
 	}
 	}

+ 5 - 8
test/core/core_type_mat2x3.cpp

@@ -1,4 +1,5 @@
-#include <glm/vector_relational.hpp>
+#include <glm/ext/vector_relational.hpp>
+#include <glm/gtc/constants.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x3.hpp>
 #include <glm/mat2x3.hpp>
 #include <glm/mat2x4.hpp>
 #include <glm/mat2x4.hpp>
@@ -44,11 +45,8 @@ int test_ctr()
 		{0, 1, 2},
 		{0, 1, 2},
 		{3, 4, 5}};
 		{3, 4, 5}};
 	
 	
-	for(glm::length_t i = 0; i < m0.length(); ++i)
-		Error += glm::all(glm::equal(m0[i], m2[i])) ? 0 : 1;
-	
-	for(glm::length_t i = 0; i < m1.length(); ++i)
-		Error += glm::all(glm::equal(m1[i], m2[i])) ? 0 : 1;
+	Error += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;
+	Error += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;
 	
 	
 	std::vector<glm::mat2x3> v1{
 	std::vector<glm::mat2x3> v1{
 		{0, 1, 2, 3, 4, 5},
 		{0, 1, 2, 3, 4, 5},
@@ -82,8 +80,7 @@ namespace cast
 		glm::mat2x3 B(A);
 		glm::mat2x3 B(A);
 		glm::mat2x3 Identity(1.0f);
 		glm::mat2x3 Identity(1.0f);
 
 
-		for(glm::length_t i = 0, length = B.length(); i < length; ++i)
-			Error += glm::all(glm::equal(B[i], Identity[i])) ? 0 : 1;
+		Error += glm::all(glm::equal(B, Identity, glm::epsilon<float>())) ? 0 : 1;
 
 
 		return Error;
 		return Error;
 	}
 	}

+ 7 - 10
test/core/core_type_mat2x4.cpp

@@ -1,6 +1,6 @@
 #include <glm/gtc/epsilon.hpp>
 #include <glm/gtc/epsilon.hpp>
 #include <glm/gtc/constants.hpp>
 #include <glm/gtc/constants.hpp>
-#include <glm/vector_relational.hpp>
+#include <glm/ext/vector_relational.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x3.hpp>
 #include <glm/mat2x3.hpp>
 #include <glm/mat2x4.hpp>
 #include <glm/mat2x4.hpp>
@@ -39,19 +39,16 @@ int test_ctr()
 	glm::mat2x4 m0(
 	glm::mat2x4 m0(
 		glm::vec4(0, 1, 2, 3),
 		glm::vec4(0, 1, 2, 3),
 		glm::vec4(4, 5, 6, 7));
 		glm::vec4(4, 5, 6, 7));
-	
+
 	glm::mat2x4 m1{0, 1, 2, 3, 4, 5, 6, 7};
 	glm::mat2x4 m1{0, 1, 2, 3, 4, 5, 6, 7};
-	
+
 	glm::mat2x4 m2{
 	glm::mat2x4 m2{
 		{0, 1, 2, 3},
 		{0, 1, 2, 3},
 		{4, 5, 6, 7}};
 		{4, 5, 6, 7}};
-	
-	for(glm::length_t i = 0; i < m0.length(); ++i)
-		Error += glm::all(glm::equal(m0[i], m2[i])) ? 0 : 1;
-	
-	for(glm::length_t i = 0; i < m1.length(); ++i)
-		Error += glm::all(glm::equal(m1[i], m2[i])) ? 0 : 1;
-	
+
+	Error += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;
+	Error += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;
+
 	std::vector<glm::mat2x4> v1{
 	std::vector<glm::mat2x4> v1{
 		{0, 1, 2, 3, 4, 5, 6, 7},
 		{0, 1, 2, 3, 4, 5, 6, 7},
 		{0, 1, 2, 3, 4, 5, 6, 7}
 		{0, 1, 2, 3, 4, 5, 6, 7}

+ 7 - 10
test/core/core_type_mat3x2.cpp

@@ -1,4 +1,5 @@
-#include <glm/vector_relational.hpp>
+#include <glm/gtc/constants.hpp>
+#include <glm/ext/vector_relational.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x3.hpp>
 #include <glm/mat2x3.hpp>
 #include <glm/mat2x4.hpp>
 #include <glm/mat2x4.hpp>
@@ -45,13 +46,10 @@ int test_ctr()
 		{0, 1},
 		{0, 1},
 		{2, 3},
 		{2, 3},
 		{4, 5}};
 		{4, 5}};
-	
-	for(glm::length_t i = 0; i < m0.length(); ++i)
-		Error += glm::all(glm::equal(m0[i], m2[i])) ? 0 : 1;
-	
-	for(glm::length_t i = 0; i < m1.length(); ++i)
-		Error += glm::all(glm::equal(m1[i], m2[i])) ? 0 : 1;
-	
+
+	Error += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;
+	Error += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;
+
 	std::vector<glm::mat3x2> v1{
 	std::vector<glm::mat3x2> v1{
 		{0, 1, 2, 3, 4, 5},
 		{0, 1, 2, 3, 4, 5},
 		{0, 1, 2, 3, 4, 5}
 		{0, 1, 2, 3, 4, 5}
@@ -86,8 +84,7 @@ namespace cast
 		glm::mat3x2 B(A);
 		glm::mat3x2 B(A);
 		glm::mat3x2 Identity(1.0f);
 		glm::mat3x2 Identity(1.0f);
 
 
-		for(glm::length_t i = 0, length = B.length(); i < length; ++i)
-			Error += glm::all(glm::equal(B[i], Identity[i])) ? 0 : 1;
+		Error += glm::all(glm::equal(B, Identity, glm::epsilon<float>())) ? 0 : 1;
 
 
 		return Error;
 		return Error;
 	}
 	}

+ 13 - 16
test/core/core_type_mat3x3.cpp

@@ -1,4 +1,5 @@
-#include <glm/gtc/epsilon.hpp>
+#include <glm/gtc/constants.hpp>
+#include <glm/ext/vector_relational.hpp>
 #include <glm/matrix.hpp>
 #include <glm/matrix.hpp>
 #include <glm/vector_relational.hpp>
 #include <glm/vector_relational.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x2.hpp>
@@ -68,9 +69,9 @@ int test_inverse()
 		glm::mat3 const Inverse = glm::inverse(Matrix);
 		glm::mat3 const Inverse = glm::inverse(Matrix);
 		glm::mat3 const Identity = Matrix * Inverse;
 		glm::mat3 const Identity = Matrix * Inverse;
 
 
-		Error += glm::all(glm::epsilonEqual(Identity[0], glm::vec3(1.0f, 0.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;
-		Error += glm::all(glm::epsilonEqual(Identity[1], glm::vec3(0.0f, 1.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;
-		Error += glm::all(glm::epsilonEqual(Identity[2], glm::vec3(0.0f, 0.0f, 1.0f), glm::vec3(0.01f))) ? 0 : 1;
+		Error += glm::all(glm::equal(Identity[0], glm::vec3(1.0f, 0.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;
+		Error += glm::all(glm::equal(Identity[1], glm::vec3(0.0f, 1.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;
+		Error += glm::all(glm::equal(Identity[2], glm::vec3(0.0f, 0.0f, 1.0f), glm::vec3(0.01f))) ? 0 : 1;
 	}
 	}
 
 
 	{
 	{
@@ -80,9 +81,9 @@ int test_inverse()
 			glm::vec3(0.3f, 0.5f, 0.7f));
 			glm::vec3(0.3f, 0.5f, 0.7f));
 		glm::mat3 const Identity = Matrix / Matrix;
 		glm::mat3 const Identity = Matrix / Matrix;
 
 
-		Error += glm::all(glm::epsilonEqual(Identity[0], glm::vec3(1.0f, 0.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;
-		Error += glm::all(glm::epsilonEqual(Identity[1], glm::vec3(0.0f, 1.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;
-		Error += glm::all(glm::epsilonEqual(Identity[2], glm::vec3(0.0f, 0.0f, 1.0f), glm::vec3(0.01f))) ? 0 : 1;
+		Error += glm::all(glm::equal(Identity[0], glm::vec3(1.0f, 0.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;
+		Error += glm::all(glm::equal(Identity[1], glm::vec3(0.0f, 1.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;
+		Error += glm::all(glm::equal(Identity[2], glm::vec3(0.0f, 0.0f, 1.0f), glm::vec3(0.01f))) ? 0 : 1;
 	}
 	}
 
 
 	return Error;
 	return Error;
@@ -104,13 +105,10 @@ int test_ctr()
 		{0, 1, 2},
 		{0, 1, 2},
 		{3, 4, 5},
 		{3, 4, 5},
 		{6, 7, 8}};
 		{6, 7, 8}};
-	
-	for(glm::length_t i = 0; i < m0.length(); ++i)
-		Error += glm::all(glm::equal(m0[i], m2[i])) ? 0 : 1;
-	
-	for(glm::length_t i = 0; i < m1.length(); ++i)
-		Error += glm::all(glm::equal(m1[i], m2[i])) ? 0 : 1;
-	
+
+	Error += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;
+	Error += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;
+
 	std::vector<glm::mat3x3> v1{
 	std::vector<glm::mat3x3> v1{
 		{0, 1, 2, 3, 4, 5, 6, 7, 8},
 		{0, 1, 2, 3, 4, 5, 6, 7, 8},
 		{0, 1, 2, 3, 4, 5, 6, 7, 8}
 		{0, 1, 2, 3, 4, 5, 6, 7, 8}
@@ -145,8 +143,7 @@ namespace cast
 		glm::mat3x3 B(A);
 		glm::mat3x3 B(A);
 		glm::mat3x3 Identity(1.0f);
 		glm::mat3x3 Identity(1.0f);
 
 
-		for(glm::length_t i = 0, length = B.length(); i < length; ++i)
-			Error += glm::all(glm::equal(B[i], Identity[i])) ? 0 : 1;
+		Error += glm::all(glm::equal(B, Identity, glm::epsilon<float>())) ? 0 : 1;
 
 
 		return Error;
 		return Error;
 	}
 	}

+ 7 - 10
test/core/core_type_mat3x4.cpp

@@ -1,6 +1,6 @@
 #include <glm/gtc/epsilon.hpp>
 #include <glm/gtc/epsilon.hpp>
 #include <glm/gtc/constants.hpp>
 #include <glm/gtc/constants.hpp>
-#include <glm/vector_relational.hpp>
+#include <glm/ext/vector_relational.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x3.hpp>
 #include <glm/mat2x3.hpp>
 #include <glm/mat2x4.hpp>
 #include <glm/mat2x4.hpp>
@@ -40,20 +40,17 @@ int test_ctr()
 		glm::vec4(0, 1, 2, 3),
 		glm::vec4(0, 1, 2, 3),
 		glm::vec4(4, 5, 6, 7),
 		glm::vec4(4, 5, 6, 7),
 		glm::vec4(8, 9, 10, 11));
 		glm::vec4(8, 9, 10, 11));
-	
+
 	glm::mat3x4 m1{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
 	glm::mat3x4 m1{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
-	
+
 	glm::mat3x4 m2{
 	glm::mat3x4 m2{
 		{0, 1, 2, 3},
 		{0, 1, 2, 3},
 		{4, 5, 6, 7},
 		{4, 5, 6, 7},
 		{8, 9, 10, 11}};
 		{8, 9, 10, 11}};
-	
-	for(glm::length_t i = 0; i < m0.length(); ++i)
-		Error += glm::all(glm::equal(m0[i], m2[i])) ? 0 : 1;
-	
-	for(glm::length_t i = 0; i < m1.length(); ++i)
-		Error += glm::all(glm::equal(m1[i], m2[i])) ? 0 : 1;
-	
+
+	Error += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;
+	Error += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;
+
 	std::vector<glm::mat3x4> v1{
 	std::vector<glm::mat3x4> v1{
 		{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},
 		{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},
 		{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
 		{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}

+ 5 - 8
test/core/core_type_mat4x2.cpp

@@ -1,4 +1,5 @@
-#include <glm/vector_relational.hpp>
+#include <glm/gtc/constants.hpp>
+#include <glm/ext/vector_relational.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x3.hpp>
 #include <glm/mat2x3.hpp>
 #include <glm/mat2x4.hpp>
 #include <glm/mat2x4.hpp>
@@ -48,11 +49,8 @@ int test_ctr()
 		{4, 5},
 		{4, 5},
 		{6, 7}};
 		{6, 7}};
 
 
-	for(glm::length_t i = 0; i < m0.length(); ++i)
-		Error += glm::all(glm::equal(m0[i], m2[i])) ? 0 : 1;
-
-	for(glm::length_t i = 0; i < m1.length(); ++i)
-		Error += glm::all(glm::equal(m1[i], m2[i])) ? 0 : 1;
+	Error += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;
+	Error += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;
 
 
 	std::vector<glm::mat4x2> v1{
 	std::vector<glm::mat4x2> v1{
 		{0, 1, 2, 3, 4, 5, 6, 7},
 		{0, 1, 2, 3, 4, 5, 6, 7},
@@ -90,8 +88,7 @@ namespace cast
 		glm::mat4x2 B(A);
 		glm::mat4x2 B(A);
 		glm::mat4x2 Identity(1.0f);
 		glm::mat4x2 Identity(1.0f);
 
 
-		for(glm::length_t i = 0, length = B.length(); i < length; ++i)
-			Error += glm::all(glm::equal(B[i], Identity[i])) ? 0 : 1;
+		Error += glm::all(glm::equal(B, Identity, glm::epsilon<float>())) ? 0 : 1;
 
 
 		return Error;
 		return Error;
 	}
 	}

+ 3 - 3
test/core/core_type_mat4x3.cpp

@@ -1,4 +1,5 @@
-#include <glm/vector_relational.hpp>
+#include <glm/gtc/constants.hpp>
+#include <glm/ext/vector_relational.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x2.hpp>
 #include <glm/mat2x3.hpp>
 #include <glm/mat2x3.hpp>
 #include <glm/mat2x4.hpp>
 #include <glm/mat2x4.hpp>
@@ -90,8 +91,7 @@ namespace cast
 		glm::mat4x3 B(A);
 		glm::mat4x3 B(A);
 		glm::mat4x3 Identity(1.0f);
 		glm::mat4x3 Identity(1.0f);
 
 
-		for(glm::length_t i = 0, length = B.length(); i < length; ++i)
-			Error += glm::all(glm::equal(B[i], Identity[i])) ? 0 : 1;
+		Error += glm::all(glm::equal(B, Identity, glm::epsilon<float>())) ? 0 : 1;
 
 
 		return Error;
 		return Error;
 	}
 	}

+ 2 - 4
test/core/core_type_mat4x4.cpp

@@ -209,11 +209,9 @@ int test_ctr()
 		{8, 9, 10, 11},
 		{8, 9, 10, 11},
 		{12, 13, 14, 15}};
 		{12, 13, 14, 15}};
 
 
-	for(glm::length_t i = 0; i < m0.length(); ++i)
-		Error += glm::all(glm::equal(m0[i], m2[i])) ? 0 : 1;
+	Error += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;
+	Error += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;
 
 
-	for(glm::length_t i = 0; i < m1.length(); ++i)
-		Error += glm::all(glm::equal(m1[i], m2[i])) ? 0 : 1;
 
 
 	std::vector<glm::mat4> m3{
 	std::vector<glm::mat4> m3{
 		{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
 		{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},