#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("ient_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("ient_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; }