quantique 0.1.0

Pragmatic geometric algebra core with runtime signatures.
Documentation
use quantique::ga::{blade::Blade, multivector::MV, ops::gp, signature_rt::Signature};

#[test]
fn euclidean_e1_squared_is_plus_one() {
    let e1 = MV::basis(Blade(1 << 0), 1.0);
    let sig = Signature::from_pqz(3, 0, 0); // + + +
    let r = gp(&e1, &e1, &sig);
    assert_eq!(r.terms.get(&Blade(0)).copied().unwrap_or(0.0), 1.0);
    assert_eq!(r.terms.len(), 1);
}

#[test]
fn minkowski_time_like_squared_is_minus_one() {
    let sig = Signature::from_pqz(0, 1, 0); // [ -1 ]
    let e1 = MV::basis(Blade(1 << 0), 1.0);
    let r = gp(&e1, &e1, &sig);
    assert_eq!(r.terms.get(&Blade(0)).copied().unwrap_or(0.0), -1.0);
    assert_eq!(r.terms.len(), 1);
}

#[test]
fn null_square_zeroes_term() {
    let sig = Signature::from_pqz(0, 0, 1); // [ 0 ]
    let e1 = MV::basis(Blade(1 << 0), 1.0);
    let r = gp(&e1, &e1, &sig);
    assert!(r.terms.is_empty());
}