vectorama 0.1.1

Very simple linear algebra library for Rust
Documentation
#[cfg(test)]
mod tests {
    use approx::assert_relative_eq;
    use vectorama::vector::vec2::Vec2;

    #[test]
    fn test_vec2_new_and_fields() {
        let v = Vec2::new(1.0, 2.0);
        assert_relative_eq!(v.x, 1.0, epsilon = f32::EPSILON);
        assert_relative_eq!(v.y, 2.0, epsilon = f32::EPSILON);
    }

    #[test]
    fn test_vec2_from_array() {
        let v = Vec2::from([3.0, 4.0]);
        assert_relative_eq!(v.x, 3.0, epsilon = f32::EPSILON);
        assert_relative_eq!(v.y, 4.0, epsilon = f32::EPSILON);
    }

    #[test]
    fn test_vec2_add() {
        let a = Vec2::new(1.0, 2.0);
        let b = Vec2::new(3.0, 4.0);
        let result = a + b;
        assert_relative_eq!(result.x, 4.0, epsilon = f32::EPSILON);
        assert_relative_eq!(result.y, 6.0, epsilon = f32::EPSILON);
    }

    #[test]
    fn test_vec2_sub() {
        let a = Vec2::new(5.0, 7.0);
        let b = Vec2::new(2.0, 3.0);
        let result = a - b;
        assert_relative_eq!(result.x, 3.0, epsilon = f32::EPSILON);
        assert_relative_eq!(result.y, 4.0, epsilon = f32::EPSILON);
    }

    #[test]
    fn test_vec2_mul_scalar() {
        let v = Vec2::new(2.0, 3.0);
        let result = v * 4.0;
        assert_relative_eq!(result.x, 8.0, epsilon = f32::EPSILON);
        assert_relative_eq!(result.y, 12.0, epsilon = f32::EPSILON);
    }

    #[test]
    fn test_vec2_div_scalar() {
        let v = Vec2::new(8.0, 6.0);
        let result = v / 2.0;
        assert_relative_eq!(result.x, 4.0, epsilon = f32::EPSILON);
        assert_relative_eq!(result.y, 3.0, epsilon = f32::EPSILON);
    }

    #[test]
    fn test_vec2_neg() {
        let v = Vec2::new(1.0, -2.0);
        let result = -v;
        assert_relative_eq!(result.x, -1.0, epsilon = f32::EPSILON);
        assert_relative_eq!(result.y, 2.0, epsilon = f32::EPSILON);
    }

    #[test]
    fn test_vec2_dot() {
        let a = Vec2::new(1.0, 2.0);
        let b = Vec2::new(3.0, 4.0);
        let dot = a.dot(&b);
        assert_relative_eq!(dot, 1.0 * 3.0 + 2.0 * 4.0, epsilon = f32::EPSILON);
    }

    #[test]
    fn test_vec2_magnitude() {
        let v = Vec2::new(3.0, 4.0);
        let mag = v.magnitude();
        assert_relative_eq!(mag, 5.0, epsilon = f32::EPSILON);
    }

    #[test]
    fn test_vec2_normalize() {
        let v = Vec2::new(0.0, 5.0);
        let n = v.normalize();
        let mag = n.magnitude();
        assert_relative_eq!(mag, 1.0, epsilon = f32::EPSILON);
        assert_relative_eq!(n.x, 0.0, epsilon = f32::EPSILON);
        assert_relative_eq!(n.y, 1.0, epsilon = f32::EPSILON);
    }

    #[test]
    fn test_vec2_cross() {
        let a = Vec2::new(1.0, 2.0);
        let b = Vec2::new(3.0, 4.0);
        let cross = a.x * b.y - a.y * b.x;
        assert_relative_eq!(a.dot(&b), 11.0, epsilon = f32::EPSILON);
        assert_relative_eq!(cross, -2.0, epsilon = f32::EPSILON);
    }

    #[test]
    fn test_vec2_xyz() {
        let v = Vec2::new(1.0, 2.0);
        let vec3 = v.xyz(3.0);
        assert_relative_eq!(vec3.x, 1.0, epsilon = f32::EPSILON);
        assert_relative_eq!(vec3.y, 2.0, epsilon = f32::EPSILON);
        assert_relative_eq!(vec3.z, 3.0, epsilon = f32::EPSILON);
    }
}