extern crate rkepler;
use rkepler::math::matrix::mat_r;
use rkepler::math::matrix::mat_r::MatR;
use rkepler::math::vector::vec_pv::VecPv;
use rkepler::math::vector::vec_p::VecP;
const A: MatR = MatR {
r00: 2.0,
r01: 3.0,
r02: 2.0,
r10: 3.0,
r11: 2.0,
r12: 3.0,
r20: 3.0,
r21: 4.0,
r22: 5.0,
};
const B: MatR = MatR {
r00: 1.0,
r01: 2.0,
r02: 2.0,
r10: 4.0,
r11: 1.0,
r12: 1.0,
r20: 3.0,
r21: 0.0,
r22: 1.0,
};
const P: VecP = VecP {
x: 0.2,
y: 1.5,
z: 0.1,
};
const PV: VecPv = VecPv {
x: 0.2,
y: 1.5,
z: 0.1,
vx: 1.5,
vy: 0.2,
vz: 0.1,
};
#[test]
fn t_tr() {
let out = mat_r::tr(&A);
assert!((out.r00 - 2.0).abs() < 1e-12);
assert!((out.r01 - 3.0).abs() < 1e-12);
assert!((out.r02 - 3.0).abs() < 1e-12);
assert!((out.r10 - 3.0).abs() < 1e-12);
assert!((out.r11 - 2.0).abs() < 1e-12);
assert!((out.r12 - 4.0).abs() < 1e-12);
assert!((out.r20 - 2.0).abs() < 1e-12);
assert!((out.r21 - 3.0).abs() < 1e-12);
assert!((out.r22 - 5.0).abs() < 1e-12);
}
#[test]
fn t_mul() {
let out = mat_r::mul(&A, &B);
assert!((out.r00 - 20.0).abs() < 1e-12);
assert!((out.r01 - 7.0).abs() < 1e-12);
assert!((out.r02 - 9.0).abs() < 1e-12);
assert!((out.r10 - 20.0).abs() < 1e-12);
assert!((out.r11 - 8.0).abs() < 1e-12);
assert!((out.r12 - 11.0).abs() < 1e-12);
assert!((out.r20 - 34.0).abs() < 1e-12);
assert!((out.r21 - 10.0).abs() < 1e-12);
assert!((out.r22 - 15.0).abs() < 1e-12);
}
#[test]
fn t_mulp() {
let out = mat_r::mul_p(&A, &P);
assert!((out.x - 5.1).abs() < 1e-12);
assert!((out.y - 3.9).abs() < 1e-12);
assert!((out.z - 7.1).abs() < 1e-12);
}
#[test]
fn t_multrp() {
let out = mat_r::multr_p(&A, &P);
assert!((out.x - 5.2).abs() < 1e-12);
assert!((out.y - 4.0).abs() < 1e-12);
assert!((out.z - 5.4).abs() < 1e-12);
}
#[test]
fn t_mulpv() {
let out = mat_r::mul_pv(&A, &PV);
assert!((out.x - 5.1).abs() < 1e-12);
assert!((out.y - 3.9).abs() < 1e-12);
assert!((out.z - 7.1).abs() < 1e-12);
assert!((out.vx - 3.8).abs() < 1e-12);
assert!((out.vy - 5.2).abs() < 1e-12);
assert!((out.vz - 5.8).abs() < 1e-12);
}
#[test]
fn t_multrpv() {
let out = mat_r::multr_pv(&A, &PV);
assert!((out.x - 5.2).abs() < 1e-12);
assert!((out.y - 4.0).abs() < 1e-12);
assert!((out.z - 5.4).abs() < 1e-12);
assert!((out.vx - 3.9).abs() < 1e-12);
assert!((out.vy - 5.3).abs() < 1e-12);
assert!((out.vz - 4.1).abs() < 1e-12);
}
#[test]
fn t_rmat_rotvec() {
let rm = MatR {
r00: 0.0,
r01: -0.8,
r02: -0.6,
r10: 0.8,
r11: -0.36,
r12: 0.48,
r20: 0.6,
r21: 0.48,
r22: -0.64,
};
let out = mat_r::rmat_rotvec(&rm);
assert!((out.x - 0.0).abs() < 1e-12);
assert!((out.y - 1.413716694115406957).abs() < 1e-12);
assert!((out.z - -1.884955592153875943).abs() < 1e-12);
}
#[test]
fn t_rotvec_rmat() {
let rv = VecP {
x: (0.0),
y: (1.41371669),
z: (-1.88495559),
};
let out = mat_r::rotvec_rmat(&rv);
assert!((out.r00 - -0.7071067782221119905).abs() < 1e-14);
assert!((out.r01 - -0.5656854276809129651).abs() < 1e-14);
assert!((out.r02 - -0.4242640700104211225).abs() < 1e-14);
assert!((out.r10 - 0.5656854276809129651).abs() < 1e-14);
assert!((out.r11 - -0.0925483394532274246).abs() < 1e-14);
assert!((out.r12 - -0.8194112531408833269).abs() < 1e-14);
assert!((out.r20 - 0.4242640700104211225).abs() < 1e-14);
assert!((out.r21 - -0.8194112531408833269).abs() < 1e-14);
assert!((out.r22 - 0.3854415612311154341).abs() < 1e-14);
}