extern crate rkepler;
use rkepler::math::vector::vec_p;
use rkepler::math::vector::vec_p::VecP;
use rkepler::math::vector::vec_pv;
use rkepler::math::vector::vec_pv::VecPv;
const A: VecP = VecP {
x: 2.0,
y: 2.0,
z: 3.0,
};
const B: VecP = VecP {
x: 1.0,
y: 3.0,
z: 4.0,
};
const C: VecP = VecP {
x: 0.3,
y: 1.2,
z: -2.5,
};
const D: VecP = VecP {
x: 1.0,
y: 0.1,
z: 0.2,
};
const E: VecP = VecP {
x: -3.0,
y: 1e-3,
z: 0.2,
};
#[test]
fn t_p_modul() {
let out = C.modul();
assert!((out - 2.789265136196270604).abs() < 1e-12)
}
#[test]
fn t_p_add() {
let out = vec_p::add(&A, &B);
assert!((out.x - 3.0).abs() < 1e-12);
assert!((out.y - 5.0).abs() < 1e-12);
assert!((out.z - 7.0).abs() < 1e-12);
}
#[test]
fn t_p_adds() {
let out = vec_p::add_scaled(&A, 5.0, &B);
assert!((out.x - 7.0).abs() < 1e-12);
assert!((out.y - 17.0).abs() < 1e-12);
assert!((out.z - 23.0).abs() < 1e-12);
}
#[test]
fn t_p_sub() {
let out = vec_p::sub(&A, &B);
assert!((out.x - 1.0).abs() < 1e-12);
assert!((out.y - -1.0).abs() < 1e-12);
assert!((out.z - -1.0).abs() < 1e-12);
}
#[test]
fn t_p_dot() {
let out = vec_p::dot(&A, &B);
assert!((out - 20.0).abs() < 1e-12);
}
#[test]
fn t_p_cross() {
let out = vec_p::cross(&A, &B);
assert!((out.x - -1.0).abs() < 1e-12);
assert!((out.y - -5.0).abs() < 1e-12);
assert!((out.z - 4.0).abs() < 1e-12);
}
#[test]
fn t_p_scale() {
let out = vec_p::scale(2.0, &C);
assert!((out.x - 0.6).abs() < 1e-12);
assert!((out.y - 2.4).abs() < 1e-12);
assert!((out.z - -5.0).abs() < 1e-12);
}
#[test]
fn t_p_sep_ang() {
let out = vec_p::sep_angl(&D, &E);
assert!((out - 2.860391919024660768).abs() < 1e-12);
}
#[test]
fn t_p_pos_ang() {
let out = vec_p::pos_angl(&D, &E);
assert!((out - 0.3671514267841113674).abs() < 1e-12);
}
#[test]
fn t_pv_add() {
let a = VecPv {
x: 2.0,
y: 2.0,
z: 3.0,
vx: 5.0,
vy: 6.0,
vz: 3.0,
};
let b = VecPv {
x: 1.0,
y: 3.0,
z: 4.0,
vx: 3.0,
vy: 2.0,
vz: 1.0,
};
let out = vec_pv::add(&a, &b);
assert!((out.x - 3.0).abs() < 1e-12);
assert!((out.y - 5.0).abs() < 1e-12);
assert!((out.z - 7.0).abs() < 1e-12);
assert!((out.vx - 8.0).abs() < 1e-12);
assert!((out.vy - 8.0).abs() < 1e-12);
assert!((out.vz - 4.0).abs() < 1e-12);
}
#[test]
fn t_pv_sub() {
let a = VecPv {
x: 2.0,
y: 2.0,
z: 3.0,
vx: 5.0,
vy: 6.0,
vz: 3.0,
};
let b = VecPv {
x: 1.0,
y: 3.0,
z: 4.0,
vx: 3.0,
vy: 2.0,
vz: 1.0,
};
let out = vec_pv::sub(&a, &b);
assert!((out.x - 1.0).abs() < 1e-12);
assert!((out.y - -1.0).abs() < 1e-12);
assert!((out.z - -1.0).abs() < 1e-12);
assert!((out.vx - 2.0).abs() < 1e-12);
assert!((out.vy - 4.0).abs() < 1e-12);
assert!((out.vz - 2.0).abs() < 1e-12);
}
#[test]
fn t_pv_dot() {
let a = VecPv {
x: 2.0,
y: 2.0,
z: 3.0,
vx: 6.0,
vy: 0.0,
vz: 4.0,
};
let b = VecPv {
x: 1.0,
y: 3.0,
z: 4.0,
vx: 0.0,
vy: 2.0,
vz: 8.0,
};
let out = vec_pv::dot(&a, &b);
assert!((out.s - 20.0).abs() < 1e-12);
assert!((out.v - 50.0).abs() < 1e-12);
}
#[test]
fn t_pv_cross() {
let a = VecPv {
x: 2.0,
y: 2.0,
z: 3.0,
vx: 6.0,
vy: 0.0,
vz: 4.0,
};
let b = VecPv {
x: 1.0,
y: 3.0,
z: 4.0,
vx: 0.0,
vy: 2.0,
vz: 8.0,
};
let out = vec_pv::cross(&a, &b);
assert!((out.x - -1.0).abs() < 1e-12);
assert!((out.y - -5.0).abs() < 1e-12);
assert!((out.z - 4.0).abs() < 1e-12);
assert!((out.vx - -2.0).abs() < 1e-12);
assert!((out.vy - -36.0).abs() < 1e-12);
assert!((out.vz - 22.0).abs() < 1e-12);
}
#[test]
fn t_pv_modul() {
let a = VecPv {
x: -0.4514964673880165,
y: 0.03093394277342585,
z: 0.05594668105108779,
vx: 1.292270850663260e-5,
vy: 2.652814182060692e-6,
vz: 2.568431853930293e-6,
};
let out = a.modul();
assert!((out.s - 0.4559999999999999757).abs() < 1e-12);
assert!((out.v - -0.1229999999999999832e-4).abs() < 1e-12);
}
#[test]
fn t_pv_scale() {
let a = VecPv {
x: 0.3,
y: 1.2,
z: -2.5,
vx: 0.5,
vy: 3.2,
vz: -0.7,
};
let out = vec_pv::scale(2.0, &a);
assert!((out.x - 0.6).abs() < 1e-12);
assert!((out.y - 2.4).abs() < 1e-12);
assert!((out.z - -5.0).abs() < 1e-12);
assert!((out.vx - 1.0).abs() < 1e-12);
assert!((out.vy - 6.4).abs() < 1e-12);
assert!((out.vz - -1.4).abs() < 1e-12);
}
#[test]
fn t_pv_scale_two() {
let a = VecPv {
x: 0.3,
y: 1.2,
z: -2.5,
vx: 0.5,
vy: 2.3,
vz: -0.4,
};
let out = vec_pv::scale_other(2.0, 3.0, &a);
assert!((out.x - 0.6).abs() < 1e-12);
assert!((out.y - 2.4).abs() < 1e-12);
assert!((out.z - -5.0).abs() < 1e-12);
assert!((out.vx - 1.5).abs() < 1e-12);
assert!((out.vy - 6.9).abs() < 1e-12);
assert!((out.vz - -1.2).abs() < 1e-12);
}
#[test]
fn t_pv_sep_angl() {
let a = VecPv {
x: 1.0,
y: 0.1,
z: 0.2,
vx: 0.1,
vy: 0.0,
vz: 0.0,
};
let b = VecPv {
x: -3.0,
y: 1e-3,
z: 0.2,
vx: 0.0,
vy: 0.2,
vz: 0.0,
};
let out = vec_pv::sep_angl(&a, &b);
assert!((out.s - 2.860391919024660768).abs() < 1e-12);
assert!((out.v - -0.002293292939785034).abs() < 1e-12);
}
#[test]
fn t_pv_interp() {
let a = VecPv {
x: 4.0,
y: 2.5,
z: 2.5,
vx: 3.0,
vy: 0.0,
vz: -5.0,
};
let b = VecPv {
x: 4.31,
y: 2.505,
z: 1.985,
vx: 3.2,
vy: 0.1,
vz: -5.3,
};
let out = vec_pv::interp(1.05, 1.0, &a, 1.1, &b);
assert!((out.x - 4.1525).abs() < 1e-12,"x: {}",out.x);
assert!((out.y - 2.50125).abs() < 1e-12);
assert!((out.z - 2.24625).abs() < 1e-12);
assert!((out.vx - 3.1).abs() < 1e-12);
assert!((out.vy - 0.05).abs() < 1e-12);
assert!((out.vz - -5.15).abs() < 1e-12);
}