57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
|
|
"""
|
|||
|
|
Tests for ScenarioLibrary — sweep coverage.
|
|||
|
|
"""
|
|||
|
|
import pytest
|
|||
|
|
from malkhut.training.scenario_library import ScenarioLibrary, SweepPoint, get_scenario_library
|
|||
|
|
|
|||
|
|
|
|||
|
|
class TestScenarioLibrary:
|
|||
|
|
def test_default_grid_size(self):
|
|||
|
|
lib = ScenarioLibrary()
|
|||
|
|
size = lib.grid_size()
|
|||
|
|
assert size == 13 * 6 * 6 * 4 * 4 # 13 assets × 576 grid points
|
|||
|
|
print(f' Default grid: {size} points')
|
|||
|
|
|
|||
|
|
def test_sweep_produces_points(self):
|
|||
|
|
lib = ScenarioLibrary(symbols=("BTCUSDT",))
|
|||
|
|
points = lib.sweep()
|
|||
|
|
assert len(points) == 6 * 6 * 4 * 4 # 576 for one asset
|
|||
|
|
|
|||
|
|
def test_sweep_point_fields(self):
|
|||
|
|
lib = ScenarioLibrary(symbols=("BTCUSDT",))
|
|||
|
|
points = lib.sweep()
|
|||
|
|
p = points[0]
|
|||
|
|
assert isinstance(p, SweepPoint)
|
|||
|
|
assert p.symbol == "BTCUSDT"
|
|||
|
|
assert isinstance(p.spread_mult, float)
|
|||
|
|
assert isinstance(p.depth_fraction, float)
|
|||
|
|
assert isinstance(p.toxicity, float)
|
|||
|
|
assert isinstance(p.regime, str)
|
|||
|
|
assert isinstance(p.label, str)
|
|||
|
|
|
|||
|
|
def test_sweep_covers_all_regimes(self):
|
|||
|
|
lib = ScenarioLibrary(symbols=("BTCUSDT",))
|
|||
|
|
points = lib.sweep()
|
|||
|
|
regimes = set(p.regime for p in points)
|
|||
|
|
assert regimes == {"normal", "crisis", "recovery", "transition"}
|
|||
|
|
|
|||
|
|
def test_custom_dimensions(self):
|
|||
|
|
lib = ScenarioLibrary(
|
|||
|
|
symbols=("BTCUSDT", "ETHUSDT"),
|
|||
|
|
spread_mults=[1.0, 5.0],
|
|||
|
|
depth_fracs=[0.1, 0.5],
|
|||
|
|
tox_levels=[0.0, 0.5],
|
|||
|
|
regimes=["normal", "crisis"],
|
|||
|
|
)
|
|||
|
|
assert lib.grid_size() == 2 * 2 * 2 * 2 * 2 # 32 points
|
|||
|
|
|
|||
|
|
def test_summary(self):
|
|||
|
|
lib = ScenarioLibrary()
|
|||
|
|
s = lib.summary()
|
|||
|
|
assert "13" in s
|
|||
|
|
assert "7488" in s # 13 × 576
|
|||
|
|
|
|||
|
|
def test_get_scenario_library(self):
|
|||
|
|
lib = get_scenario_library()
|
|||
|
|
assert lib.grid_size() > 0
|