#import "modules/std.sx";
math :: #import "modules/math";

dot :: (a: Vector(3,f32), b: Vector(3,f32)) -> f32 {
    a.x*b.x + a.y*b.y + a.z*b.z
}

cross :: (a: Vector(3,f32), b: Vector(3,f32)) -> Vector(3,f32) {
    .[a.y*b.z - a.z*b.y, a.z*b.x - a.x*b.z, a.x*b.y - a.y*b.x]
}

length :: (v: Vector(3,f32)) -> f32 {
    math.sqrt(dot(v, v))
}

normalize :: (v: Vector(3,f32)) -> Vector(3,f32) {
    v / length(v)
}

vec3 :: (x:f32, y:f32, z:f32) -> Vector(3,f32) {
    .[x, y, z]
}

main :: () {
    a := vec3(1, 0, 0);
    b := vec3(0, 1, 0);

    // dot product
    d := dot(a, b);
    print("dot: {}\n", d);

    // cross product
    cr := cross(a, b);
    print("cross: {}\n", cr);

    // length
    v := vec3(3, 4, 0);
    len := length(v);
    print("length: {}\n", len);

    // normalize
    n := normalize(v);
    print("norm: {}\n", n);
}
