transforms 1.4.1

A transform library to track reference frames and provide transforms between them.
Documentation
#[cfg(test)]
mod vector3_tests {
    use approx::assert_relative_eq;

    use crate::geometry::Vector3;

    #[test]
    fn add() {
        let v1 = Vector3 {
            x: 1.0,
            y: 2.0,
            z: 3.0,
        };
        let v2 = Vector3 {
            x: 4.0,
            y: 5.0,
            z: 6.0,
        };
        let expected = Vector3 {
            x: 5.0,
            y: 7.0,
            z: 9.0,
        };
        assert_eq!(
            v1 + v2,
            expected,
            "Addition of {:?} and {:?} was incorrect. Expected: {:?}, Got: {:?}",
            v1,
            v2,
            expected,
            v1 + v2
        );
    }

    #[test]
    fn sub() {
        let v1 = Vector3 {
            x: 4.0,
            y: 5.0,
            z: 6.0,
        };
        let v2 = Vector3 {
            x: 1.0,
            y: 2.0,
            z: 3.0,
        };
        let expected = Vector3 {
            x: 3.0,
            y: 3.0,
            z: 3.0,
        };
        assert_eq!(
            v1 - v2,
            expected,
            "Subtraction of {:?} and {:?} was incorrect. Expected: {:?}, Got: {:?}",
            v1,
            v2,
            expected,
            v1 - v2
        );
    }

    #[test]
    fn mul_scalar() {
        let v = Vector3 {
            x: 1.0,
            y: 2.0,
            z: 3.0,
        };
        let scalar = 2.0;
        let expected = Vector3 {
            x: 2.0,
            y: 4.0,
            z: 6.0,
        };
        assert_eq!(
            v * scalar,
            expected,
            "Multiplication of {:?} by scalar {:?} was incorrect. Expected: {:?}, Got: {:?}",
            v,
            scalar,
            expected,
            v * scalar
        );
    }

    #[test]
    fn div_scalar() {
        let v = Vector3 {
            x: 2.0,
            y: 4.0,
            z: 6.0,
        };
        let scalar = 2.0;
        let expected = Vector3 {
            x: 1.0,
            y: 2.0,
            z: 3.0,
        };
        assert_eq!(
            v / scalar,
            expected,
            "Division of {:?} by scalar {:?} was incorrect. Expected: {:?}, Got: {:?}",
            v,
            scalar,
            expected,
            v / scalar
        );
    }

    #[test]
    fn dot_product() {
        let v1 = Vector3 {
            x: 1.0,
            y: 2.0,
            z: 3.0,
        };
        let v2 = Vector3 {
            x: 4.0,
            y: 5.0,
            z: 6.0,
        };
        let expected = 32.0;
        assert_relative_eq!(v1.dot(v2), expected);
    }

    #[test]
    fn cross_product() {
        let v1 = Vector3 {
            x: 1.0,
            y: 2.0,
            z: 3.0,
        };
        let v2 = Vector3 {
            x: 4.0,
            y: 5.0,
            z: 6.0,
        };
        let expected = Vector3 {
            x: -3.0,
            y: 6.0,
            z: -3.0,
        };
        assert_eq!(
            v1.cross(v2),
            expected,
            "Cross product of {:?} and {:?} was incorrect. Expected: {:?}, Got: {:?}",
            v1,
            v2,
            expected,
            v1.cross(v2)
        );
    }
}