Browse Source

Merge pull request #80 from robert-ancell/0.9.4

Fix glm::higherMultiple and glm::lowerMultiple and assoicated test cases...
Christophe Riccio 12 years ago
parent
commit
86a5825fee
2 changed files with 29 additions and 13 deletions
  1. 14 4
      glm/gtx/multiple.inl
  2. 15 9
      test/gtx/gtx_multiple.cpp

+ 14 - 4
glm/gtx/multiple.inl

@@ -22,8 +22,13 @@ namespace glm
 		genType const & Multiple
 	)
 	{
-		genType Tmp = Source % Multiple;
-		return Tmp ? Source + Multiple - Tmp : Source;
+		if (Source > 0)
+		{
+			genType Tmp = Source - 1;
+			return Tmp + (Multiple - (Tmp % Multiple));
+		}
+		else
+			return Source + (-Source % Multiple);
 	}
 
 	template <> 
@@ -74,8 +79,13 @@ namespace glm
 		genType const & Multiple
 	)
 	{
-		genType Tmp = Source % Multiple;
-		return Tmp ? Source - Tmp : Source;
+		if (Source >= 0)
+			return Source - Source % Multiple;
+		else
+		{
+			genType Tmp = Source + 1;
+			return Tmp - Tmp % Multiple - Multiple;
+		}
 	}
 
 	template <> 

+ 15 - 9
test/gtx/gtx_multiple.cpp

@@ -14,13 +14,16 @@ int test_higher()
 {
 	int Error(0);
 
-	int Higher0 = glm::higherMultiple(-5, 4);
-	Error += Higher0 == -4 ? 0 : 1;
+	Error += glm::higherMultiple(-5, 4) == -4 ? 0 : 1;
 	Error += glm::higherMultiple(-4, 4) == -4 ? 0 : 1;
-	Error += glm::higherMultiple(-3, 4) == -4 ? 0 : 1;
-	Error += glm::higherMultiple(-2, 4) == -4 ? 0 : 1;
-	Error += glm::higherMultiple(-1, 4) == -4 ? 0 : 1;
+	Error += glm::higherMultiple(-3, 4) == 0 ? 0 : 1;
+	Error += glm::higherMultiple(-2, 4) == 0 ? 0 : 1;
+	Error += glm::higherMultiple(-1, 4) == 0 ? 0 : 1;
+
 	Error += glm::higherMultiple(0, 4) == 0 ? 0 : 1;
+	Error += glm::higherMultiple(1, 4) == 4 ? 0 : 1;
+	Error += glm::higherMultiple(2, 4) == 4 ? 0 : 1;
+	Error += glm::higherMultiple(3, 4) == 4 ? 0 : 1;
 	Error += glm::higherMultiple(4, 4) == 4 ? 0 : 1;
 	Error += glm::higherMultiple(5, 4) == 8 ? 0 : 1;
 	Error += glm::higherMultiple(6, 4) == 8 ? 0 : 1;
@@ -35,12 +38,15 @@ int test_Lower()
 {
 	int Error(0);
 
-	Error += glm::lowerMultiple(-5, 4) == -4 ? 0 : 1;
+	Error += glm::lowerMultiple(-5, 4) == -8 ? 0 : 1;
 	Error += glm::lowerMultiple(-4, 4) == -4 ? 0 : 1;
-	Error += glm::lowerMultiple(-3, 4) == 0 ? 0 : 1;
-	Error += glm::lowerMultiple(-2, 4) == 0 ? 0 : 1;
-	Error += glm::lowerMultiple(-1, 4) == 0 ? 0 : 1;
+	Error += glm::lowerMultiple(-3, 4) == -4 ? 0 : 1;
+	Error += glm::lowerMultiple(-2, 4) == -4 ? 0 : 1;
+	Error += glm::lowerMultiple(-1, 4) == -4 ? 0 : 1;
 	Error += glm::lowerMultiple(0, 4) == 0 ? 0 : 1;
+	Error += glm::lowerMultiple(1, 4) == 0 ? 0 : 1;
+	Error += glm::lowerMultiple(2, 4) == 0 ? 0 : 1;
+	Error += glm::lowerMultiple(3, 4) == 0 ? 0 : 1;
 	Error += glm::lowerMultiple(4, 4) == 4 ? 0 : 1;
 	Error += glm::lowerMultiple(5, 4) == 4 ? 0 : 1;
 	Error += glm::lowerMultiple(6, 4) == 4 ? 0 : 1;