vectorama 0.1.1

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

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

    #[test]
    fn test_vec3_from_array() {
        let v = Vec3::from([4.0, 5.0, 6.0]);
        assert_relative_eq!(v.x, 4.0, epsilon = f32::EPSILON);
        assert_relative_eq!(v.y, 5.0, epsilon = f32::EPSILON);
        assert_relative_eq!(v.z, 6.0, epsilon = f32::EPSILON);
    }

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

    #[test]
    fn test_vec3_sub() {
        let a = Vec3::new(7.0, 8.0, 9.0);
        let b = Vec3::new(1.0, 2.0, 3.0);
        let result = a - b;
        assert_relative_eq!(result.x, 6.0, epsilon = f32::EPSILON);
        assert_relative_eq!(result.y, 6.0, epsilon = f32::EPSILON);
        assert_relative_eq!(result.z, 6.0, epsilon = f32::EPSILON);
    }

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

    #[test]
    fn test_vec3_div_scalar() {
        let v = Vec3::new(8.0, 6.0, 4.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);
        assert_relative_eq!(result.z, 2.0, epsilon = f32::EPSILON);
    }

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

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

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

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

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

    #[test]
    fn test_vec3_magnitude() {
        let v = Vec3::new(3.0, 4.0, 12.0);
        let mag = v.magnitude();
        assert_relative_eq!(mag, 13.0, epsilon = f32::EPSILON);
    }

    #[test]
    fn test_vec3_normalize() {
        let v = Vec3::new(0.0, 3.0, 4.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, 3.0 / 5.0, epsilon = f32::EPSILON);
        assert_relative_eq!(n.z, 4.0 / 5.0, epsilon = f32::EPSILON);
    }

    #[test]
    fn test_vec3_cross() {
        let a = Vec3::new(1.0, 2.0, 3.0);
        let b = Vec3::new(4.0, 5.0, 6.0);
        let cross = a.cross(&b);
        assert_relative_eq!(cross.x, -3.0, epsilon = f32::EPSILON);
        assert_relative_eq!(cross.y, 6.0, epsilon = f32::EPSILON);
        assert_relative_eq!(cross.z, -3.0, epsilon = f32::EPSILON);
    }

    #[test]
    fn test_vec3_xyzw() {
        let v = Vec3::new(1.0, 2.0, 3.0);
        let w = 4.0;
        let vec4 = v.xyzw(w);
        assert_relative_eq!(vec4.x, 1.0, epsilon = f32::EPSILON);
        assert_relative_eq!(vec4.y, 2.0, epsilon = f32::EPSILON);
        assert_relative_eq!(vec4.z, 3.0, epsilon = f32::EPSILON);
        assert_relative_eq!(vec4.w, 4.0, epsilon = f32::EPSILON);
    }
}