lacking 0.0.2

A game engine/framework port from Go
Documentation
#[derive(Debug, Copy, Clone)]
pub struct Vec3 {
    pub x: f64,
    pub y: f64,
    pub z: f64,
}

impl Vec3 {
    pub fn new(x: f64, y: f64, z: f64) -> Vec3 {
        Vec3 { x, y, z }
    }

    pub fn zero() -> Vec3 {
        Vec3::new(0.0, 0.0, 0.0)
    }

    pub fn basis_x() -> Vec3 {
        Vec3::new(1.0, 0.0, 0.0)
    }

    pub fn basis_y() -> Vec3 {
        Vec3::new(0.0, 1.0, 0.0)
    }

    pub fn basis_z() -> Vec3 {
        Vec3::new(0.0, 0.0, 1.0)
    }
}

#[cfg(test)]
pub(crate) mod tests {

    use super::*;
    use assert_approx_eq::assert_approx_eq;

    pub fn assert_vec3_eq(vec: Vec3, x: f64, y: f64, z: f64) {
        assert_approx_eq!(vec.x, x);
        assert_approx_eq!(vec.y, y);
        assert_approx_eq!(vec.z, z);
    }

    #[test]
    fn test_new() {
        let new = Vec3::new(1.0, 2.0, 3.0);
        assert_vec3_eq(new, 1.0, 2.0, 3.0);
    }

    #[test]
    fn test_zero() {
        let zero = Vec3::zero();
        assert_vec3_eq(zero, 0.0, 0.0, 0.0);
    }

    #[test]
    fn test_basis_x() {
        let basis = Vec3::basis_x();
        assert_vec3_eq(basis, 1.0, 0.0, 0.0);
    }

    #[test]
    fn test_basis_y() {
        let basis = Vec3::basis_y();
        assert_vec3_eq(basis, 0.0, 1.0, 0.0);
    }

    #[test]
    fn test_basis_z() {
        let basis = Vec3::basis_z();
        assert_vec3_eq(basis, 0.0, 0.0, 1.0);
    }
}