"""End-to-end test for the EcoCode environment.""" from env.environment import EcoCodeEnv from models.schemas import Action from grader.grader import Grader from tasks.definitions import list_task_ids def test_full_pipeline(): env = EcoCodeEnv() # Test 1: Reset loop_sum obs = env.reset("loop_sum") print(f"[PASS] Reset: difficulty={obs.difficulty}, steps={obs.step_count}, tests={len(obs.test_cases)}") # Test 2: Submit optimized code optimized = "def compute_sum(numbers):\n return sum(numbers)\n" action = Action(rewritten_code=optimized) obs2, reward, done, info = env.step(action) print(f"[PASS] Step: reward={reward.score}, done={done}") print(f" Breakdown: corr={reward.breakdown.correctness}, opt={reward.breakdown.optimization}, pen={reward.breakdown.penalty}") gr = info.get("grader_result", {}) print(f" Grader: correctness={gr.get('correctness_score')}, optimization={gr.get('optimization_score')}, final={gr.get('final_score')}") if "termination_reason" in info: print(f" Terminated: {info['termination_reason']}") # Test 3: State state = env.state() print(f"[PASS] State: task={state.task_id}, steps={state.step_count}, done={state.done}") # Test 4: Grader standalone grader = Grader() from tasks.definitions import TASKS task = TASKS["loop_sum"] result = grader.grade(task["dirty_code"], optimized, task["test_cases"]) print(f"[PASS] Grader: correctness={result.correctness_score}, opt={result.optimization_score}, final={result.final_score}") print(f" Details: {result.details}") # Test 5: All tasks can reset for tid in list_task_ids(): obs = env.reset(tid) print(f"[PASS] Task '{tid}' resets OK: difficulty={obs.difficulty}") # Test 6: Invalid code penalty env.reset("loop_sum") bad = Action(rewritten_code="import os\nos.system('rm -rf /')\n") obs_bad, rew_bad, done_bad, info_bad = env.step(bad) print(f"[PASS] Invalid code: reward={rew_bad.score}, state_unchanged={info_bad.get('state_unchanged')}") # Test 7: Incorrect output penalty env.reset("loop_sum") wrong = Action(rewritten_code="def compute_sum(numbers):\n return 999\n") obs_wrong, rew_wrong, done_wrong, info_wrong = env.step(wrong) print(f"[PASS] Incorrect output: reward={rew_wrong.score}") print("\n=== ALL TESTS PASSED ===") if __name__ == "__main__": test_full_pipeline()