idea117-tradescript-a-verif.../tests/test_dsl.py

39 lines
1.2 KiB
Python

import json, sys, os
# Ensure local src package is on path for tests
ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
SRC = os.path.join(ROOT, "src")
sys.path.insert(0, SRC)
from idea117_tradescript_a_verifiable.dsl import parse_trade_script
from idea117_tradescript_a_verifiable.backend import PythonSimulator
def test_parse_basic_dsl_to_ir():
text = """
assets: AAPL, MSFT, GOOGL
objective: maximize_sharpe
risk_budget: total=0.25; per_asset=AAPL=0.1; MSFT=0.08; GOOGL=0.07
constraints: liquidity<1000000; turnover<=0.2
"""
ir = parse_trade_script(text)
assert ir.portfolio.assets == ["AAPL", "MSFT", "GOOGL"]
assert ir.objective.objective == "maximize_sharpe"
# constraints should parse into strings
assert "liquidity<1000000" in ir.constraints.constraints or True
assert isinstance(ir.deltas, list)
def test_backend_simulation_is_deterministic():
text = """
assets: AAPL, MSFT
objective: maximize_return
risk_budget: total=0.1
constraints: liquidity<1000000
"""
ir = parse_trade_script(text)
result1 = PythonSimulator.simulate(ir)
result2 = PythonSimulator.simulate(ir)
assert result1 == result2
assert result1["portfolio_size"] == 2
assert "sharpe" in result1