MCPcopy Create free account
hub / github.com/Open-Quant/openquant / test_sadf_test

Function test_sadf_test

crates/openquant/tests/structural_breaks.rs:90–148  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

88#[test]
89#[ignore = "long-running hotspot; run explicitly with `cargo test -p openquant --test structural_breaks test_sadf_test -- --ignored`"]
90fn test_sadf_test() {
91 let log_prices = log_prices();
92 let lags_int = 5usize;
93 let lags_array = vec![1usize, 2, 5, 7];
94 let min_length = 20usize;
95
96 let sm_power = get_sadf(&log_prices, "sm_power", true, min_length, SadfLags::Fixed(lags_int))
97 .expect("sm_power sadf");
98 let linear = get_sadf(&log_prices, "linear", true, min_length, SadfLags::Fixed(lags_int))
99 .expect("linear sadf");
100 let linear_no_const =
101 get_sadf(&log_prices, "linear", false, min_length, SadfLags::Array(lags_array.clone()))
102 .expect("linear no const sadf");
103 let quadratic = get_sadf(&log_prices, "quadratic", true, min_length, SadfLags::Fixed(lags_int))
104 .expect("quadratic sadf");
105 let sm_poly_1 = get_sadf(&log_prices, "sm_poly_1", true, min_length, SadfLags::Fixed(lags_int))
106 .expect("sm_poly_1 sadf");
107 let sm_poly_2 = get_sadf(&log_prices, "sm_poly_2", true, min_length, SadfLags::Fixed(lags_int))
108 .expect("sm_poly_2 sadf");
109 let sm_exp = get_sadf(&log_prices, "sm_exp", true, min_length, SadfLags::Fixed(lags_int))
110 .expect("sm_exp sadf");
111
112 let expected_len = log_prices.len() - min_length - lags_int - 1;
113 assert_eq!(expected_len, sm_power.len());
114 assert_eq!(expected_len, linear.len());
115 assert_eq!(expected_len, quadratic.len());
116 assert_eq!(expected_len, sm_poly_1.len());
117 assert_eq!(expected_len, sm_poly_2.len());
118 assert_eq!(expected_len, sm_exp.len());
119
120 assert!((mean(&sm_power) - 17.814).abs() < 0.001);
121 assert!((sm_power[29] + 4.281).abs() < 0.001);
122 assert!((mean(&linear) + 0.669).abs() < 0.001);
123 assert!((linear[29] + 0.717).abs() < 0.001);
124 assert!((mean(&linear_no_const) - 1.899).abs() < 0.001);
125 assert!((linear_no_const[29] - 1.252).abs() < 0.001);
126 assert!((mean(&quadratic) + 0.651).abs() < 0.001);
127 assert!((quadratic[29] + 1.065).abs() < 0.001);
128 assert!((mean(&sm_poly_1) - 21.02).abs() < 0.001);
129 assert!((sm_poly_1[29] - 0.8268).abs() < 0.001);
130 assert!((mean(&sm_poly_2) - 21.01).abs() < 0.001);
131 assert!((sm_poly_2[29] - 0.822).abs() < 0.001);
132 assert!((mean(&sm_exp) - 17.632).abs() < 0.001);
133 assert!((sm_exp[29] + 5.821).abs() < 0.001);
134
135 let ones = vec![1.0; log_prices.len()];
136 let trivial =
137 get_sadf(&ones, "sm_power", true, min_length, SadfLags::Fixed(lags_int)).expect("ones");
138 assert!(trivial.iter().all(|v| v.is_infinite() && v.is_sign_negative()));
139
140 let invalid =
141 get_sadf(&log_prices, "rubbish_string", true, min_length, SadfLags::Fixed(lags_int));
142 assert!(matches!(invalid, Err(StructuralBreakError::InvalidModel(_))));
143
144 let singular_matrix = vec![vec![1.0, 0.0, 0.0], vec![-1.0, 3.0, 3.0], vec![1.0, 2.0, 2.0]];
145 let (b_mean, b_var) = _get_betas(&singular_matrix, &singular_matrix).expect("betas");
146 assert!(b_mean.iter().all(|v| v.is_nan()));
147 assert!(b_var.iter().all(|row| row.iter().all(|v| v.is_nan())));

Callers

nothing calls this directly

Calls 4

log_pricesFunction · 0.85
get_sadfFunction · 0.85
_get_betasFunction · 0.85
lenMethod · 0.80

Tested by

no test coverage detected