use versorc_math::prelude::*;
#[test]
fn test_sta_vector_intervals_and_proper_time() {
assert_eq!(std::mem::size_of::<StaVector>(), 16);
assert_eq!(std::mem::align_of::<StaVector>(), 16);
let v_time = StaVector::new(5.0, 3.0, 0.0, 0.0);
assert_eq!(v_time.interval_sq(), 25.0 - 9.0); assert!(v_time.is_timelike());
assert!(!v_time.is_spacelike());
assert!(!v_time.is_lightlike());
assert_eq!(v_time.proper_time(), Some(4.0));
let v_space = StaVector::new(3.0, 5.0, 0.0, 0.0);
assert_eq!(v_space.interval_sq(), 9.0 - 25.0); assert!(v_space.is_spacelike());
assert_eq!(v_space.proper_time(), None);
let v_null = StaVector::new(3.0, 0.0, 3.0, 0.0);
assert!(v_null.is_lightlike());
}
#[test]
fn test_sta_lorentz_boost_time_dilation_and_length_contraction() {
let boost = StaLorentzBoost::from_velocity(0.6, 0.0, 0.0);
let clock_rest = StaVector::new(1.0, 0.0, 0.0, 0.0);
let clock_moving = boost.transform_vector(&clock_rest);
assert!((clock_moving.ct - 1.25).abs() < 1e-5, "Expected ct' = 1.25, got {}", clock_moving.ct);
assert!((clock_rest.interval_sq() - clock_moving.interval_sq()).abs() < 1e-5);
}
#[test]
fn test_sta_electromagnetic_faraday_bivector_invariants() {
assert_eq!(std::mem::size_of::<StaBivector>(), 32);
assert_eq!(std::mem::align_of::<StaBivector>(), 32);
let em_wave = StaBivector::new(0.0, 1.0, 0.0, 0.0, 0.0, 1.0); assert_eq!(em_wave.invariant_1(), 0.0);
assert_eq!(em_wave.invariant_2(), 0.0);
let s = em_wave.poynting_vector();
assert_eq!(s, [1.0, 0.0, 0.0]);
}
#[test]
fn test_sta_spinor_and_lounesto_classification() {
assert_eq!(std::mem::size_of::<StaSpinor>(), 32);
assert_eq!(std::mem::align_of::<StaSpinor>(), 32);
let sp_dirac_gen = StaSpinor::new(2.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 1.5);
assert_eq!(sp_dirac_gen.lounesto_class(1e-4), LounestoClass::Class1DiracGeneral);
let sp_electron = StaSpinor::new(2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
assert_eq!(sp_electron.lounesto_class(1e-4), LounestoClass::Class2DiracElectron);
let cov = sp_dirac_gen.bilinear_covariants();
assert!(cov.j.ct > 0.0, "Probability density J^0 must be positive, got {}", cov.j.ct);
assert!(cov.j.interval_sq() >= -1e-5, "Current vector J must be causal");
}