|
@@ -0,0 +1,99 @@
|
|
|
+#include "tests/MatrixStackTests.h"
|
|
|
+#include "tests/Test.h"
|
|
|
+#include "math/MatrixStack.h"
|
|
|
+#include "utils/StringBuffer.h"
|
|
|
+
|
|
|
+typedef MatrixStack<5> Matrices;
|
|
|
+typedef StringBuffer<500> String;
|
|
|
+
|
|
|
+static void testInit(Test& test) {
|
|
|
+ Matrix m;
|
|
|
+ Matrices stack;
|
|
|
+ for(int i = 0; i < 16; i++) {
|
|
|
+ test.checkEqual(m.getValues()[i], stack.peek().getValues()[i], "contains identity matrix");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static void testPop(Test& test) {
|
|
|
+ Matrices stack;
|
|
|
+ stack.peek().scale(2.0f);
|
|
|
+ stack.push();
|
|
|
+ test.checkEqual(false, stack.pop(), "pop returns false when there is something to pop");
|
|
|
+ test.checkEqual(true, stack.pop(), "pop returns true when the lowest matrix was popped");
|
|
|
+ Matrix m;
|
|
|
+ for(int i = 0; i < 16; i++) {
|
|
|
+ test.checkEqual(m.getValues()[i], stack.peek().getValues()[i], "contains identity matrix");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static void testPush(Test& test) {
|
|
|
+ Matrices stack;
|
|
|
+ for(int i = 0; i < 4; i++) {
|
|
|
+ test.checkEqual(false, stack.push(), "push returns false without overflow");
|
|
|
+ }
|
|
|
+ for(int i = 0; i < 1000000; i++) {
|
|
|
+ test.checkEqual(true, stack.push(), "push returns true with overflow");
|
|
|
+ }
|
|
|
+ test.checkEqual(true, true, "survives overflow");
|
|
|
+}
|
|
|
+
|
|
|
+static void testToString1(Test& test) {
|
|
|
+ Matrices stack;
|
|
|
+ stack.peek().scale(2.0f);
|
|
|
+ stack.push();
|
|
|
+ stack.peek().scale(3.0f);
|
|
|
+ stack.push();
|
|
|
+ stack.peek().scale(4.0f);
|
|
|
+ test.checkEqual(String("["
|
|
|
+ "[[2.00, 0.00, 0.00, 0.00], "
|
|
|
+ "[0.00, 2.00, 0.00, 0.00], "
|
|
|
+ "[0.00, 0.00, 2.00, 0.00], "
|
|
|
+ "[0.00, 0.00, 0.00, 1.00]], "
|
|
|
+ "[[6.00, 0.00, 0.00, 0.00], "
|
|
|
+ "[0.00, 6.00, 0.00, 0.00], "
|
|
|
+ "[0.00, 0.00, 6.00, 0.00], "
|
|
|
+ "[0.00, 0.00, 0.00, 1.00]], "
|
|
|
+ "[[24.00, 0.00, 0.00, 0.00], "
|
|
|
+ "[0.00, 24.00, 0.00, 0.00], "
|
|
|
+ "[0.00, 0.00, 24.00, 0.00], "
|
|
|
+ "[0.00, 0.00, 0.00, 1.00]]"
|
|
|
+ "]"), String(stack), "to string 1");
|
|
|
+}
|
|
|
+
|
|
|
+static void testToString2(Test& test) {
|
|
|
+ Matrices stack;
|
|
|
+ stack.peek().scale(2.0f);
|
|
|
+ stack.push();
|
|
|
+ stack.peek().scale(3.0f);
|
|
|
+ test.checkEqual(String("["
|
|
|
+ "[[2.00, 0.00, 0.00, 0.00], "
|
|
|
+ "[0.00, 2.00, 0.00, 0.00], "
|
|
|
+ "[0.00, 0.00, 2.00, 0.00], "
|
|
|
+ "[0.00, 0.00, 0.00, 1.00]], "
|
|
|
+ "[[6.00, 0.00, 0.00, 0.00], "
|
|
|
+ "[0.00, 6.00, 0.00, 0.00], "
|
|
|
+ "[0.00, 0.00, 6.00, 0.00], "
|
|
|
+ "[0.00, 0.00, 0.00, 1.00]]"
|
|
|
+ "]"), String(stack), "to string 2");
|
|
|
+}
|
|
|
+
|
|
|
+static void testToString3(Test& test) {
|
|
|
+ Matrices stack;
|
|
|
+ test.checkEqual(String("["
|
|
|
+ "[[1.00, 0.00, 0.00, 0.00], "
|
|
|
+ "[0.00, 1.00, 0.00, 0.00], "
|
|
|
+ "[0.00, 0.00, 1.00, 0.00], "
|
|
|
+ "[0.00, 0.00, 0.00, 1.00]]"
|
|
|
+ "]"), String(stack), "to string 3");
|
|
|
+}
|
|
|
+
|
|
|
+void MatrixStackTests::test() {
|
|
|
+ Test test("MatrixStack");
|
|
|
+ testInit(test);
|
|
|
+ testPop(test);
|
|
|
+ testPush(test);
|
|
|
+ testToString1(test);
|
|
|
+ testToString2(test);
|
|
|
+ testToString3(test);
|
|
|
+ test.finalize();
|
|
|
+}
|