#![allow(clippy::unreadable_literal, clippy::excessive_precision)]
use integral::math::am::n_cart;
use integral::math::solid_harmonics::c2s_matrix;
#[test]
fn c2s_matches_independent_signed_reference() {
let mut ref_rows = C2S_SIGNED_REF.iter();
let mut worst = 0.0_f64;
for l in 0..=6 {
let mat = c2s_matrix(l);
let nc = n_cart(l);
for p in 0..(2 * l + 1) {
let row = &mat[p * nc..(p + 1) * nc];
let refr = ref_rows.next().expect("missing reference row");
assert_eq!(refr.len(), nc, "l={l} row={p}: width mismatch");
for (i, (&a, &b)) in row.iter().zip(refr.iter()).enumerate() {
let d = (a - b).abs();
worst = worst.max(d);
assert!(
d < 1e-12,
"l={l} row={p} col={i}: rust={a} signed_ref={b} (Δ={d:e}) \
— SIGN OR VALUE MISMATCH"
);
}
}
}
assert!(ref_rows.next().is_none(), "reference has extra rows");
eprintln!("c2s vs independent signed reference: worst |Δ| = {worst:e}");
}
pub const C2S_SIGNED_REF: &[&[f64]] = &[
&[1.0000000000000000],
&[1.0000000000000000, 0.0, 0.0],
&[0.0, 1.0000000000000000, 0.0],
&[0.0, 0.0, 1.0000000000000000],
&[0.0, 1.0925484305920791, 0.0, 0.0, 0.0, 0.0],
&[0.0, 0.0, 0.0, 0.0, 1.0925484305920791, 0.0],
&[
-0.31539156525252001,
0.0,
0.0,
-0.31539156525252001,
0.0,
0.63078313050504001,
],
&[0.0, 0.0, 1.0925484305920791, 0.0, 0.0, 0.0],
&[
0.54627421529603954,
0.0,
0.0,
-0.54627421529603954,
0.0,
0.0,
],
&[
0.0,
1.7701307697799305,
0.0,
0.0,
0.0,
0.0,
-0.59004358992664351,
0.0,
0.0,
0.0,
],
&[
0.0,
0.0,
0.0,
0.0,
2.8906114426405541,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
0.0,
-0.45704579946446574,
0.0,
0.0,
0.0,
0.0,
-0.45704579946446574,
0.0,
1.8281831978578629,
0.0,
],
&[
0.0,
0.0,
-1.1195289977703462,
0.0,
0.0,
0.0,
0.0,
-1.1195289977703462,
0.0,
0.74635266518023078,
],
&[
-0.45704579946446574,
0.0,
0.0,
-0.45704579946446574,
0.0,
1.8281831978578629,
0.0,
0.0,
0.0,
0.0,
],
&[
0.0,
0.0,
1.4453057213202770,
0.0,
0.0,
0.0,
0.0,
-1.4453057213202770,
0.0,
0.0,
],
&[
0.59004358992664351,
0.0,
0.0,
-1.7701307697799305,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
0.0,
2.5033429417967045,
0.0,
0.0,
0.0,
0.0,
-2.5033429417967045,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
0.0,
0.0,
0.0,
0.0,
5.3103923093397916,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
-1.7701307697799305,
0.0,
0.0,
0.0,
],
&[
0.0,
-0.94617469575756002,
0.0,
0.0,
0.0,
0.0,
-0.94617469575756002,
0.0,
5.6770481745453601,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
0.0,
0.0,
0.0,
0.0,
-2.0071396306718675,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
-2.0071396306718675,
0.0,
2.6761861742291567,
0.0,
],
&[
0.31735664074561291,
0.0,
0.0,
0.63471328149122582,
0.0,
-2.5388531259649033,
0.0,
0.0,
0.0,
0.0,
0.31735664074561291,
0.0,
-2.5388531259649033,
0.0,
0.84628437532163443,
],
&[
0.0,
0.0,
-2.0071396306718675,
0.0,
0.0,
0.0,
0.0,
-2.0071396306718675,
0.0,
2.6761861742291567,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
-0.47308734787878001,
0.0,
0.0,
0.0,
0.0,
2.8385240872726801,
0.0,
0.0,
0.0,
0.0,
0.47308734787878001,
0.0,
-2.8385240872726801,
0.0,
0.0,
],
&[
0.0,
0.0,
1.7701307697799305,
0.0,
0.0,
0.0,
0.0,
-5.3103923093397916,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
0.62583573544917613,
0.0,
0.0,
-3.7550144126950568,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.62583573544917613,
0.0,
0.0,
0.0,
0.0,
],
&[
0.0,
3.2819102842008505,
0.0,
0.0,
0.0,
0.0,
-6.5638205684017010,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.65638205684017010,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
0.0,
0.0,
0.0,
0.0,
8.3026492595241651,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
-8.3026492595241651,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
0.0,
-1.4677148983057512,
0.0,
0.0,
0.0,
0.0,
-0.97847659887050078,
0.0,
11.741719186446009,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.48923829943525039,
0.0,
-3.9139063954820031,
0.0,
0.0,
0.0,
],
&[
0.0,
0.0,
0.0,
0.0,
-4.7935367849733238,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
-4.7935367849733238,
0.0,
9.5870735699466475,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
0.0,
0.45294665119569692,
0.0,
0.0,
0.0,
0.0,
0.90589330239139384,
0.0,
-5.4353598143483631,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.45294665119569692,
0.0,
-5.4353598143483631,
0.0,
3.6235732095655754,
0.0,
],
&[
0.0,
0.0,
1.7542548368013539,
0.0,
0.0,
0.0,
0.0,
3.5085096736027079,
0.0,
-4.6780128981369439,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
1.7542548368013539,
0.0,
-4.6780128981369439,
0.0,
0.93560257962738877,
],
&[
0.45294665119569692,
0.0,
0.0,
0.90589330239139384,
0.0,
-5.4353598143483631,
0.0,
0.0,
0.0,
0.0,
0.45294665119569692,
0.0,
-5.4353598143483631,
0.0,
3.6235732095655754,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
0.0,
0.0,
-2.3967683924866619,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
4.7935367849733238,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
2.3967683924866619,
0.0,
-4.7935367849733238,
0.0,
0.0,
],
&[
-0.48923829943525039,
0.0,
0.0,
0.97847659887050078,
0.0,
3.9139063954820031,
0.0,
0.0,
0.0,
0.0,
1.4677148983057512,
0.0,
-11.741719186446009,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
0.0,
0.0,
2.0756623148810413,
0.0,
0.0,
0.0,
0.0,
-12.453973889286248,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
2.0756623148810413,
0.0,
0.0,
0.0,
0.0,
],
&[
0.65638205684017010,
0.0,
0.0,
-6.5638205684017010,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
3.2819102842008505,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
0.0,
4.0991046311514859,
0.0,
0.0,
0.0,
0.0,
-13.663682103838286,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
4.0991046311514859,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
0.0,
0.0,
0.0,
0.0,
11.833095811158760,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
-23.666191622317520,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
2.3666191622317520,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
0.0,
-2.0182596029148966,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
20.182596029148966,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
2.0182596029148966,
0.0,
-20.182596029148966,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
0.0,
0.0,
0.0,
0.0,
-8.2908473356343115,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
-5.5272315570895410,
0.0,
22.108926228358164,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
2.7636157785447705,
0.0,
-7.3696420761193880,
0.0,
0.0,
0.0,
],
&[
0.0,
0.92120525951492350,
0.0,
0.0,
0.0,
0.0,
1.8424105190298470,
0.0,
-14.739284152238776,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.92120525951492350,
0.0,
-14.739284152238776,
0.0,
14.739284152238776,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
0.0,
0.0,
0.0,
0.0,
2.9131068125936569,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
5.8262136251873139,
0.0,
-11.652427250374628,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
2.9131068125936569,
0.0,
-11.652427250374628,
0.0,
4.6609709001498511,
0.0,
],
&[
-0.31784601133814213,
0.0,
0.0,
-0.95353803401442639,
0.0,
5.7212282040865583,
0.0,
0.0,
0.0,
0.0,
-0.95353803401442639,
0.0,
11.442456408173117,
0.0,
-7.6283042721154111,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
-0.31784601133814213,
0.0,
5.7212282040865583,
0.0,
-7.6283042721154111,
0.0,
1.0171072362820548,
],
&[
0.0,
0.0,
2.9131068125936569,
0.0,
0.0,
0.0,
0.0,
5.8262136251873139,
0.0,
-11.652427250374628,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
2.9131068125936569,
0.0,
-11.652427250374628,
0.0,
4.6609709001498511,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
0.46060262975746175,
0.0,
0.0,
0.46060262975746175,
0.0,
-7.3696420761193880,
0.0,
0.0,
0.0,
0.0,
-0.46060262975746175,
0.0,
0.0,
0.0,
7.3696420761193880,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
-0.46060262975746175,
0.0,
7.3696420761193880,
0.0,
-7.3696420761193880,
0.0,
0.0,
],
&[
0.0,
0.0,
-2.7636157785447705,
0.0,
0.0,
0.0,
0.0,
5.5272315570895410,
0.0,
7.3696420761193880,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
8.2908473356343115,
0.0,
-22.108926228358164,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
-0.50456490072872416,
0.0,
0.0,
2.5228245036436208,
0.0,
5.0456490072872416,
0.0,
0.0,
0.0,
0.0,
2.5228245036436208,
0.0,
-30.273894043723450,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
-0.50456490072872416,
0.0,
5.0456490072872416,
0.0,
0.0,
0.0,
0.0,
],
&[
0.0,
0.0,
2.3666191622317520,
0.0,
0.0,
0.0,
0.0,
-23.666191622317520,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
11.833095811158760,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
&[
0.68318410519191432,
0.0,
0.0,
-10.247761577878715,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
10.247761577878715,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
-0.68318410519191432,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
];