aboutsummaryrefslogtreecommitdiff
path: root/mons_math/tests/vec2_ops.c
blob: c7c6d7a4f08925e8c9c6bf60dd03127053a2719c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include "mons_math/vec2.h"
#include "mons_math/vec3.h"
#include "mons_math/util.h"
#include "test.h"

int main(void) {
    mons_vec2 a = {2.0, 3.0};
    mons_vec2 b = {6.0, 5.0};

    // Add
    mons_vec2 sum = mons_vec2_add(a, b);
    ASSERT(mons_vec2_equal(sum, (mons_vec2){8.0, 8.0}));
    
    // Add in Place
    mons_vec2_add_inplace(&a, b);
    ASSERT(mons_vec2_equal(a, sum));

    // Subtract
    mons_vec2 diff = mons_vec2_sub(sum, b);
    ASSERT(mons_vec2_equal(diff, (mons_vec2){2.0, 3.0}));

    // Subtract in Place
    mons_vec2_sub_inplace(&a, b);
    ASSERT(mons_vec2_equal(diff, a));

    // Multiply (float)
    mons_vec2 product_f = mons_vec2_mul_f(a, -3.0);
    ASSERT(mons_vec2_equal(product_f, (mons_vec2){-6.0, -9.0}))
    
    // Multiply in Place (float)
    mons_vec2_mul_f_inplace(&a, 3.0);
    ASSERT(mons_vec2_equal(mons_vec2_negate(product_f), a))

    // Divide (float)
    mons_vec2 quotient_f = mons_vec2_div_f(product_f, 3.0);
    mons_vec2_negate_inplace(&quotient_f);
    ASSERT(mons_vec2_equal(quotient_f, (mons_vec2){2.0, 3.0}));

    // Divide in Place (float)
    mons_vec2_div_f_inplace(&a, 3.0);
    ASSERT(mons_vec2_equal(quotient_f, a));

    // Multiply (int)
    mons_vec2 product_i = mons_vec2_mul_i(a, -3);
    ASSERT(mons_vec2_equal(product_i, (mons_vec2){-6.0, -9.0}))
    
    // Multiply in Place (int)
    mons_vec2_mul_i_inplace(&a, 3);
    ASSERT(mons_vec2_equal(mons_vec2_negate(product_i), a))

    // Divide (int)
    mons_vec2 quotient_i = mons_vec2_div_i(product_i, 3);
    mons_vec2_negate_inplace(&quotient_i);
    ASSERT(mons_vec2_equal(quotient_i, (mons_vec2){2.0, 3.0}));

    // Divide in Place (int)
    mons_vec2_div_i_inplace(&a, 3);
    ASSERT(mons_vec2_equal(quotient_i, a));

    // Get Length
    float a_len = mons_vec2_len(a);
    ASSERT(mons_float_approx_equal(a_len, 3.60555));

    // Dot Product
    float dot = mons_vec2_dot(a, b);
    ASSERT(mons_float_approx_equal(dot, 27.0));

    // Extend
    mons_vec3 extended = mons_vec2_extend(a);
    ASSERT(mons_vec3_equal(extended, (mons_vec3){a.x, a.y, 0.0}));

    // Normalize
    mons_vec2 normalized = mons_vec2_normalize(a);
    ASSERT(mons_float_approx_equal(mons_vec2_len(normalized), 1.0));

    // Normalize in Place
    mons_vec2_normalize_inplace(&a);
    ASSERT(mons_float_approx_equal(mons_vec2_len(a), 1.0));
    
    return EXIT_SUCCESS;
}