mirror of
https://github.com/OpenByteInc/QuantDinger.git
synced 2026-09-28 15:22:56 +08:00
58 lines
1.4 KiB
Python
58 lines
1.4 KiB
Python
"""Regression coverage for generic K-line normalization."""
|
|
|
|
import math
|
|
|
|
import pytest
|
|
|
|
from app.data_sources.base import BaseDataSource
|
|
|
|
|
|
class _TestDataSource(BaseDataSource):
|
|
"""Concrete shell for exercising the shared normalization method."""
|
|
|
|
def get_kline(self, symbol, timeframe, limit, before_time=None, after_time=None):
|
|
return []
|
|
|
|
|
|
@pytest.fixture
|
|
def data_source():
|
|
return _TestDataSource()
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"price",
|
|
[0.01038, 0.001038, 123.456789],
|
|
)
|
|
def test_format_kline_preserves_source_price_precision(data_source, price):
|
|
row = data_source.format_kline(1_700_000_000, price, price, price, price, 12.3456)
|
|
|
|
assert row["open"] == price
|
|
assert row["high"] == price
|
|
assert row["low"] == price
|
|
assert row["close"] == price
|
|
|
|
|
|
def test_format_kline_keeps_timestamp_and_existing_volume_normalization(data_source):
|
|
row = data_source.format_kline(
|
|
1_700_000_123,
|
|
10.123456,
|
|
10.234567,
|
|
10.012345,
|
|
10.200001,
|
|
9876.54321,
|
|
)
|
|
|
|
assert row["time"] == 1_700_000_123
|
|
assert row["volume"] == 9876.54
|
|
|
|
|
|
def test_format_kline_preserves_nan_price_behavior(data_source):
|
|
row = data_source.format_kline(1, math.nan, 2.0, 1.0, 1.5, 0.0)
|
|
|
|
assert math.isnan(row["open"])
|
|
|
|
|
|
def test_format_kline_rejects_non_numeric_prices(data_source):
|
|
with pytest.raises(ValueError):
|
|
data_source.format_kline(1, "not-a-price", 2.0, 1.0, 1.5, 0.0)
|