use openoutcry::{
run_backtest, BuyAndHold, CostModel, Dataset, Decision, MarketObservation, Window,
};
#[test]
fn reexported_engine_runs_a_backtest() {
let data = Dataset::synthetic(4, 120, 11);
let mut agent = BuyAndHold;
let run = run_backtest(
&data,
&mut agent,
Window {
start: 20,
end: 120,
},
1,
CostModel::default(),
);
assert_eq!(run.returns.len(), 100);
assert!(!run.trace.events.is_empty());
}
#[test]
fn reexported_wire_contract_parses() {
let obs_json = r#"{
"date": "2025-01-02",
"cash": 1.0,
"symbols": [{ "symbol": "AAPL", "close_history": [187.2, 188.0, 190.4] }],
"portfolio": []
}"#;
let obs: MarketObservation = serde_json::from_str(obs_json).expect("observation parses");
assert_eq!(obs.symbols.len(), 1);
let legacy_decision =
r#"{ "orders": [{ "symbol": "AAPL", "action": "buy", "target_weight": 0.5 }] }"#;
let decision: Decision = serde_json::from_str(legacy_decision).expect("legacy decision parses");
assert_eq!(decision.orders.len(), 1);
}