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