gemath 0.1.0

Type-safe game math with type-level units/spaces, typed angles, and explicit fallible ops (plus optional geometry/collision).
Documentation
#![cfg(feature = "mint")]

use gemath::*;

#[test]
fn mint_vec_roundtrip_preserves_values() {
    let v2: Vec2<Meters, World> = Vec2::new(1.0, -2.0);
    let m2: mint::Vector2<f32> = v2.into();
    let v2b: Vec2<Meters, World> = m2.into();
    assert_eq!(v2b, v2);

    let v3: Vec3<Pixels, Screen> = Vec3::new(3.0, 4.0, 5.0);
    let m3: mint::Vector3<f32> = v3.into();
    let v3b: Vec3<Pixels, Screen> = m3.into();
    assert_eq!(v3b, v3);

    let v4: Vec4<(), ()> = Vec4::new(6.0, 7.0, 8.0, 9.0);
    let m4: mint::Vector4<f32> = v4.into();
    let v4b: Vec4<(), ()> = m4.into();
    assert_eq!(v4b, v4);
}

#[test]
fn mint_mat_roundtrip_preserves_columns() {
    let m2: Mat2<Meters, World> = Mat2::new(Vec2::new(1.0, 2.0), Vec2::new(3.0, 4.0));
    let mm2: mint::ColumnMatrix2<f32> = m2.into();
    let m2b: Mat2<Meters, World> = mm2.into();
    assert_eq!(m2b, m2);

    let m3: Mat3<(), ()> = Mat3::new(
        Vec3::new(1.0, 2.0, 3.0),
        Vec3::new(4.0, 5.0, 6.0),
        Vec3::new(7.0, 8.0, 9.0),
    );
    let mm3: mint::ColumnMatrix3<f32> = m3.into();
    let m3b: Mat3<(), ()> = mm3.into();
    assert_eq!(m3b, m3);

    let m4: Mat4<(), ()> = Mat4::new(
        Vec4::new(1.0, 2.0, 3.0, 4.0),
        Vec4::new(5.0, 6.0, 7.0, 8.0),
        Vec4::new(9.0, 10.0, 11.0, 12.0),
        Vec4::new(13.0, 14.0, 15.0, 16.0),
    );
    let mm4: mint::ColumnMatrix4<f32> = m4.into();
    let m4b: Mat4<(), ()> = mm4.into();
    assert_eq!(m4b, m4);
}

#[test]
fn mint_quat_roundtrip_preserves_components() {
    let q: Quat<(), ()> = Quat::new(0.1, 0.2, 0.3, 0.4);
    let mq: mint::Quaternion<f32> = q.into();
    let qb: Quat<(), ()> = mq.into();
    assert_eq!(qb, q);
}