quant-indicators 0.7.0

Pure indicator math library for trading — MA, RSI, Bollinger, MACD, ATR, HRP
Documentation
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());
}