aboutsummaryrefslogtreecommitdiff
path: root/test/src/TestMath.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/src/TestMath.c')
-rw-r--r--test/src/TestMath.c165
1 files changed, 165 insertions, 0 deletions
diff --git a/test/src/TestMath.c b/test/src/TestMath.c
index a6fa15c..90549fb 100644
--- a/test/src/TestMath.c
+++ b/test/src/TestMath.c
@@ -449,6 +449,14 @@ static int checkQuat(void)
BH_VERIFY_DELTA(r[2], -0.4138f, ACCEPTABLE_DELTA);
BH_VERIFY_DELTA(angle, 2.8668f, ACCEPTABLE_DELTA);
+
+ BH_Quat4fInverse(a, r);
+ BH_Quat4fMul(a, r, r);
+ BH_VERIFY_DELTA(r[0], 0.000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[1], 0.000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[2], 0.000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[3], 1.000f, ACCEPTABLE_DELTA);
+
return 0;
}
@@ -626,6 +634,48 @@ static int checkMat4f(void)
BH_VERIFY(BH_Mat4fInverse(b, r) != BH_OK);
+ BH_Mat4fFromTranslation(1.0f, 2.0f, 3.0f, r);
+ BH_VERIFY_DELTA(r[0], 1.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[1], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[2], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[3], 0.0000f, ACCEPTABLE_DELTA);
+
+ BH_VERIFY_DELTA(r[4], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[5], 1.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[6], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[7], 0.0000f, ACCEPTABLE_DELTA);
+
+ BH_VERIFY_DELTA(r[8], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[9], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[10], 1.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[11], 0.0000f, ACCEPTABLE_DELTA);
+
+ BH_VERIFY_DELTA(r[12], 1.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[13], 2.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[14], 3.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[15], 1.0000f, ACCEPTABLE_DELTA);
+
+ BH_Mat4fFromScale(1.0f, 2.0f, 3.0f, r);
+ BH_VERIFY_DELTA(r[0], 1.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[1], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[2], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[3], 0.0000f, ACCEPTABLE_DELTA);
+
+ BH_VERIFY_DELTA(r[4], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[5], 2.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[6], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[7], 0.0000f, ACCEPTABLE_DELTA);
+
+ BH_VERIFY_DELTA(r[8], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[9], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[10], 3.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[11], 0.0000f, ACCEPTABLE_DELTA);
+
+ BH_VERIFY_DELTA(r[12], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[13], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[14], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[15], 1.0000f, ACCEPTABLE_DELTA);
+
return 0;
}
@@ -745,10 +795,122 @@ static int checkMat3f(void)
BH_VERIFY(BH_Mat3fInverse(b, r) != BH_OK);
+ BH_Mat3fFromTranslation(1.0f, 2.0f, r);
+ BH_VERIFY_DELTA(r[0], 1.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[1], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[2], 0.0000f, ACCEPTABLE_DELTA);
+
+ BH_VERIFY_DELTA(r[3], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[4], 1.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[5], 0.0000f, ACCEPTABLE_DELTA);
+
+ BH_VERIFY_DELTA(r[6], 1.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[7], 2.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[8], 1.0000f, ACCEPTABLE_DELTA);
+
+ BH_Mat3fFromScale(1.0f, 2.0f, r);
+ BH_VERIFY_DELTA(r[0], 1.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[1], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[2], 0.0000f, ACCEPTABLE_DELTA);
+
+ BH_VERIFY_DELTA(r[3], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[4], 2.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[5], 0.0000f, ACCEPTABLE_DELTA);
+
+ BH_VERIFY_DELTA(r[6], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[7], 0.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(r[8], 1.0000f, ACCEPTABLE_DELTA);
+
return 0;
}
+int checkQuatMat4f(void)
+{
+ float a[16], b[16], c[4];
+
+ BH_Mat4fFromEuler(-2.7671f, -0.8324f, -0.1649f, a);
+
+ BH_Quat4fFromEuler(-2.7671f, -0.8324f, -0.1649f, c);
+ BH_VERIFY_DELTA(c[0], -0.9018f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(c[1], -0.0010f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(c[2], -0.4099f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(c[3], 0.1370f, ACCEPTABLE_DELTA);
+ BH_Quat4fToMat4f(c, b);
+
+ BH_VERIFY_DELTA(a[0], b[0], ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(a[1], b[1], ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(a[2], b[2], ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(a[3], b[3], ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(a[4], b[4], ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(a[5], b[5], ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(a[6], b[6], ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(a[7], b[7], ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(a[8], b[8], ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(a[9], b[9], ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(a[10], b[10], ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(a[11], b[11], ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(a[12], b[12], ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(a[13], b[13], ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(a[14], b[14], ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(a[15], b[15], ACCEPTABLE_DELTA);
+
+ return 0;
+}
+
+
+int checkVecMat4f(void)
+{
+ float a[16] =
+ {
+ 5.0f, 3.0f, 1.0f, 2.0f,
+ 1.0f, 0.0f, 3.0f, 0.0f,
+ 2.0f, 0.0f, 4.0f, 0.0f,
+ 7.0f, 2.0f, 5.0f, 3.0f
+ };
+ float b[4];
+
+ b[0] = 2.0f; b[1] = -1.0f; b[2] = 4.0f; b[3] = 0.0f;
+ BH_Mat4fApplyVec4f(a, b, b);
+ BH_VERIFY_DELTA(b[0], 17.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(b[1], 6.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(b[2], 15.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(b[3], 4.0000f, ACCEPTABLE_DELTA);
+
+ b[0] = 2.0f; b[1] = -1.0f; b[2] = 4.0f;
+ BH_Mat4fApplyVec3f(a, b, b);
+ BH_VERIFY_DELTA(b[0], 24.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(b[1], 8.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(b[2], 20.0000f, ACCEPTABLE_DELTA);
+
+ return 0;
+}
+
+
+int checkVecMat3f(void)
+{
+ float a[9] =
+ {
+ 0.0f, 1.0f, -3.0f,
+ -3.0f, -4.0f, 4.0f,
+ -2.0f, -2.0f, 1.0f,
+ };
+ float b[3];
+
+ b[0] = 2.0f; b[1] = -1.0f; b[2] = 4.0f;
+ BH_Mat3fApplyVec3f(a, b, b);
+ BH_VERIFY_DELTA(b[0], -5.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(b[1], -2.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(b[2], -6.0000f, ACCEPTABLE_DELTA);
+
+ b[0] = 2.0f; b[1] = -1.0f;
+ BH_Mat3fApplyVec2f(a, b, b);
+ BH_VERIFY_DELTA(b[0], 1.0000f, ACCEPTABLE_DELTA);
+ BH_VERIFY_DELTA(b[1], 4.0000f, ACCEPTABLE_DELTA);
+
+ return 0;
+}
+
int main(int argc, char **argv)
{
(void)argc;
@@ -763,6 +925,9 @@ int main(int argc, char **argv)
BH_UnitAdd("Quat", checkQuat);
BH_UnitAdd("Mat4f", checkMat4f);
BH_UnitAdd("Mat3f", checkMat3f);
+ BH_UnitAdd("QuatMat4f", checkQuatMat4f);
+ BH_UnitAdd("VecMat4f", checkVecMat4f);
+ BH_UnitAdd("VecMat3f", checkVecMat3f);
return BH_UnitRun();
}