aboutsummaryrefslogtreecommitdiff
path: root/mons_math/tests/vec3_ops.c
diff options
context:
space:
mode:
Diffstat (limited to 'mons_math/tests/vec3_ops.c')
-rw-r--r--mons_math/tests/vec3_ops.c90
1 files changed, 90 insertions, 0 deletions
diff --git a/mons_math/tests/vec3_ops.c b/mons_math/tests/vec3_ops.c
new file mode 100644
index 0000000..e29b396
--- /dev/null
+++ b/mons_math/tests/vec3_ops.c
@@ -0,0 +1,90 @@
+#include "mons_math/vec2.h"
+#include "mons_math/vec3.h"
+#include "mons_math/vec4.h"
+#include "mons_math/util.h"
+#include "test.h"
+
+int main(void) {
+ mons_vec3 a = {2.0, 3.0, 4.0};
+ mons_vec3 b = {6.0, 5.0, 4.0};
+
+ // Add
+ mons_vec3 sum = mons_vec3_add(a, b);
+ ASSERT(mons_vec3_equal(sum, (mons_vec3){8.0, 8.0, 8.0}));
+
+ // Add in Place
+ mons_vec3_add_inplace(&a, b);
+ ASSERT(mons_vec3_equal(a, sum));
+
+ // Subtract
+ mons_vec3 diff = mons_vec3_sub(sum, b);
+ ASSERT(mons_vec3_equal(diff, (mons_vec3){2.0, 3.0, 4.0}));
+
+ // Subtract in Place
+ mons_vec3_sub_inplace(&a, b);
+ ASSERT(mons_vec3_equal(diff, a));
+
+ // Multiply (float)
+ mons_vec3 product_f = mons_vec3_mul_f(a, -3.0);
+ ASSERT(mons_vec3_equal(product_f, (mons_vec3){-6.0, -9.0, -12.0}))
+
+ // Multiply in Place (float)
+ mons_vec3_mul_f_inplace(&a, 3.0);
+ ASSERT(mons_vec3_equal(mons_vec3_negate(product_f), a))
+
+ // Divide (float)
+ mons_vec3 quotient_f = mons_vec3_div_f(product_f, 3.0);
+ mons_vec3_negate_inplace(&quotient_f);
+ ASSERT(mons_vec3_equal(quotient_f, (mons_vec3){2.0, 3.0, 4.0}));
+
+ // Divide in Place (float)
+ mons_vec3_div_f_inplace(&a, 3.0);
+ ASSERT(mons_vec3_equal(quotient_f, a));
+
+ // Multiply (int)
+ mons_vec3 product_i = mons_vec3_mul_i(a, -3);
+ ASSERT(mons_vec3_equal(product_i, (mons_vec3){-6.0, -9.0, -12.0}))
+
+ // Multiply in Place (int)
+ mons_vec3_mul_i_inplace(&a, 3);
+ ASSERT(mons_vec3_equal(mons_vec3_negate(product_i), a))
+
+ // Divide (int)
+ mons_vec3 quotient_i = mons_vec3_div_i(product_i, 3);
+ mons_vec3_negate_inplace(&quotient_i);
+ ASSERT(mons_vec3_equal(quotient_i, (mons_vec3){2.0, 3.0, 4.0}));
+
+ // Divide in Place (int)
+ mons_vec3_div_i_inplace(&a, 3);
+ ASSERT(mons_vec3_equal(quotient_i, a));
+
+ // Get Length
+ float a_len = mons_vec3_len(a);
+ ASSERT(mons_float_approx_equal(a_len, 5.38516));
+
+ // Dot Product
+ float dot = mons_vec3_dot(a, b);
+ ASSERT(mons_float_approx_equal(dot, 43.0));
+
+ // Cross Product
+ mons_vec3 cross = mons_vec3_cross(a, b);
+ ASSERT(mons_vec3_equal(cross, (mons_vec3){-8.0, 16.0, -8.0}));
+
+ // Extend
+ mons_vec4 extended = mons_vec3_extend(a);
+ ASSERT(mons_vec4_equal(extended, (mons_vec4){a.x, a.y, a.z, 0.0}));
+
+ // Truncate
+ mons_vec2 truncated = mons_vec3_truncate(a);
+ ASSERT(mons_vec2_equal(truncated, (mons_vec2){a.x, a.y}));
+
+ // Normalize
+ mons_vec3 normalized = mons_vec3_normalize(a);
+ ASSERT(mons_float_approx_equal(mons_vec3_len(normalized), 1.0));
+
+ // Normalize in Place
+ mons_vec3_normalize_inplace(&a);
+ ASSERT(mons_float_approx_equal(mons_vec3_len(a), 1.0));
+
+ return EXIT_SUCCESS;
+}