use super::*;
use crate::test_helpers::helpers::{make_candle, ts};
use rust_decimal_macros::dec;
#[test]
fn name_is_close() {
let ind = Close::new();
assert_eq!(ind.name(), "Close");
}
#[test]
fn warmup_is_one() {
let ind = Close::new();
assert_eq!(ind.warmup_period(), 1);
}
#[test]
fn empty_candles_returns_error() {
let ind = Close::new();
let result = ind.compute(&[]);
assert!(matches!(
result,
Err(IndicatorError::InsufficientData { .. })
));
}
#[test]
fn returns_close_prices() {
let ind = Close::new();
let candles: Vec<_> = (0..5)
.map(|i| make_candle(rust_decimal::Decimal::from(100 + i), ts(i)))
.collect();
let series = ind.compute(&candles).expect("sufficient data for Close");
let values = series.values();
assert_eq!(values.len(), 5);
assert_eq!(values[0].1, dec!(100));
assert_eq!(values[4].1, dec!(104));
}
#[test]
fn preserves_timestamps() {
let ind = Close::new();
let candles: Vec<_> = (0..3).map(|i| make_candle(dec!(100), ts(i))).collect();
let series = ind.compute(&candles).expect("sufficient data for Close");
let values = series.values();
assert_eq!(values[0].0, candles[0].timestamp());
assert_eq!(values[2].0, candles[2].timestamp());
}