#![cfg(test)]
use super::tables_gen::{
CipTerm, SXY2_POLY_UAS, SXY2_TERMS_0, SXY2_TERMS_1, SXY2_TERMS_2, SXY2_TERMS_3, SXY2_TERMS_4,
X_POLY_UAS, X_TERMS_0, X_TERMS_1, X_TERMS_2, X_TERMS_3, X_TERMS_4, Y_POLY_UAS, Y_TERMS_0,
Y_TERMS_1, Y_TERMS_2, Y_TERMS_3, Y_TERMS_4,
};
#[test]
fn x_table_row_counts_match_tn36() {
assert_eq!(X_TERMS_0.len(), 1306);
assert_eq!(X_TERMS_1.len(), 253);
assert_eq!(X_TERMS_2.len(), 36);
assert_eq!(X_TERMS_3.len(), 4);
assert_eq!(X_TERMS_4.len(), 1);
assert_eq!(
total_terms(&[X_TERMS_0, X_TERMS_1, X_TERMS_2, X_TERMS_3, X_TERMS_4]),
1600
);
}
#[test]
fn y_table_row_counts_match_tn36() {
assert_eq!(Y_TERMS_0.len(), 962);
assert_eq!(Y_TERMS_1.len(), 277);
assert_eq!(Y_TERMS_2.len(), 30);
assert_eq!(Y_TERMS_3.len(), 5);
assert_eq!(Y_TERMS_4.len(), 1);
assert_eq!(
total_terms(&[Y_TERMS_0, Y_TERMS_1, Y_TERMS_2, Y_TERMS_3, Y_TERMS_4]),
1275
);
}
#[test]
fn sxy2_table_row_counts_match_tn36() {
assert_eq!(SXY2_TERMS_0.len(), 33);
assert_eq!(SXY2_TERMS_1.len(), 3);
assert_eq!(SXY2_TERMS_2.len(), 25);
assert_eq!(SXY2_TERMS_3.len(), 4);
assert_eq!(SXY2_TERMS_4.len(), 1);
assert_eq!(
total_terms(&[
SXY2_TERMS_0,
SXY2_TERMS_1,
SXY2_TERMS_2,
SXY2_TERMS_3,
SXY2_TERMS_4
]),
66,
);
}
fn total_terms(groups: &[&[CipTerm]]) -> usize {
groups.iter().map(|g| g.len()).sum()
}
#[test]
fn x_polynomial_matches_tn36_header() {
assert_eq!(
X_POLY_UAS,
[-16617.0, 2004191898.0, -429782.9, -198618.34, 7.578, 5.9285]
);
}
#[test]
fn y_polynomial_matches_tn36_header() {
assert_eq!(
Y_POLY_UAS,
[-6951.0, -25896.0, -22407274.7, 1900.59, 1112.526, 0.1358]
);
}
#[test]
fn sxy2_polynomial_matches_tn36_header() {
assert_eq!(
SXY2_POLY_UAS,
[94.0, 3808.65, -122.68, -72574.11, 27.98, 15.62]
);
}
#[test]
fn x_first_row_j0_is_dominant_omega_term() {
let row = X_TERMS_0[0];
assert_eq!(row.sin_uas, -6844318.44);
assert_eq!(row.cos_uas, 1328.67);
assert_eq!(row.arg, [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
}
#[test]
fn y_first_row_j0_is_dominant_omega_term() {
let row = Y_TERMS_0[0];
assert_eq!(row.sin_uas, 1538.18);
assert_eq!(row.cos_uas, 9205236.26);
assert_eq!(row.arg, [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
}
#[test]
fn sxy2_first_row_j0_is_dominant_omega_term() {
let row = SXY2_TERMS_0[0];
assert_eq!(row.sin_uas, -2640.73);
assert_eq!(row.cos_uas, 0.39);
assert_eq!(row.arg, [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
}
#[test]
fn x_last_group_has_exactly_one_term_with_pinned_amplitude() {
assert_eq!(X_TERMS_4.len(), 1);
let row = X_TERMS_4[0];
assert_eq!(row.sin_uas, -0.10);
assert_eq!(row.cos_uas, -0.02);
}
#[test]
fn y_last_group_has_exactly_one_term_with_pinned_amplitude() {
assert_eq!(Y_TERMS_4.len(), 1);
let row = Y_TERMS_4[0];
assert_eq!(row.sin_uas, -0.02);
assert_eq!(row.cos_uas, 0.11);
}
#[test]
fn sxy2_last_group_has_exactly_one_term_with_pinned_amplitude() {
assert_eq!(SXY2_TERMS_4.len(), 1);
let row = SXY2_TERMS_4[0];
assert_eq!(row.sin_uas, -0.26);
assert_eq!(row.cos_uas, -0.01);
}
#[test]
fn every_multiplier_is_within_empirical_tn36_range() {
let groups: &[&[CipTerm]] = &[
X_TERMS_0,
X_TERMS_1,
X_TERMS_2,
X_TERMS_3,
X_TERMS_4,
Y_TERMS_0,
Y_TERMS_1,
Y_TERMS_2,
Y_TERMS_3,
Y_TERMS_4,
SXY2_TERMS_0,
SXY2_TERMS_1,
SXY2_TERMS_2,
SXY2_TERMS_3,
SXY2_TERMS_4,
];
for group in groups {
for term in *group {
for &m in &term.arg {
assert!(
(-25..=25).contains(&m),
"multiplier {m} outside the empirical ±25 TN36 range — \
suggests a parser bug or an upstream table revision"
);
}
}
}
}