39 lines
1.2 KiB
Python
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
|