436954138f
Update version numbers across Rust, Python, and documentation files to 1.1.0. Enhance the .gitignore to include macOS dSYM files and plans directory. Introduce new dependencies in the Rust core library and update the README to reflect recent performance benchmarks and backtesting engine capabilities. Add new artifacts to the benchmarks manifest and improve documentation for the backtesting engine API.
42 lines
1.2 KiB
Rust
42 lines
1.2 KiB
Rust
/*!
|
|
Fuzz target for `ferro_ta_core::overlap::macd`.
|
|
|
|
Verifies that MACD never panics and that all three output vectors
|
|
(macd, signal, histogram) match the input length.
|
|
*/
|
|
|
|
#![no_main]
|
|
|
|
use libfuzzer_sys::fuzz_target;
|
|
use ferro_ta_core::overlap;
|
|
|
|
fuzz_target!(|data: &[u8]| {
|
|
if data.len() < 4 {
|
|
return;
|
|
}
|
|
|
|
// Extract periods from first 3 bytes (1-64 range each)
|
|
let fastperiod = ((data[0] as usize) % 32) + 1;
|
|
let slowperiod = ((data[1] as usize) % 32) + fastperiod + 1; // slow > fast
|
|
let signalperiod = ((data[2] as usize) % 32) + 1;
|
|
|
|
let float_bytes = &data[3..];
|
|
let n_floats = float_bytes.len() / 8;
|
|
if n_floats == 0 {
|
|
return;
|
|
}
|
|
|
|
let close: Vec<f64> = (0..n_floats)
|
|
.map(|i| {
|
|
let chunk: [u8; 8] = float_bytes[i * 8..(i + 1) * 8].try_into().unwrap();
|
|
f64::from_le_bytes(chunk)
|
|
})
|
|
.collect();
|
|
|
|
let (macd, signal, hist) = overlap::macd(&close, fastperiod, slowperiod, signalperiod);
|
|
|
|
assert_eq!(macd.len(), close.len(), "MACD line length mismatch");
|
|
assert_eq!(signal.len(), close.len(), "MACD signal length mismatch");
|
|
assert_eq!(hist.len(), close.len(), "MACD histogram length mismatch");
|
|
});
|