Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| from core.step_generator import AnimationType, StepGenerator | |
| def test_generate_returns_empty_for_unsuccessful_solver_result(): | |
| generator = StepGenerator() | |
| steps = generator.generate({"success": False}) | |
| assert steps == [] | |
| def test_generate_maps_rule_to_animation_type_and_appends_final(): | |
| generator = StepGenerator() | |
| solver_result = { | |
| "success": True, | |
| "steps": [ | |
| { | |
| "description": "Use product rule", | |
| "before": r"x^2 \sin(x)", | |
| "after": r"2x\sin(x)+x^2\cos(x)", | |
| "rule": "product_rule", | |
| } | |
| ], | |
| "result_latex": r"2x\sin(x)+x^2\cos(x)", | |
| } | |
| steps = generator.generate(solver_result) | |
| assert len(steps) == 2 | |
| assert steps[0].animation_type == AnimationType.EXPAND | |
| assert steps[0].visual_hints["formula"] == "f'g + fg'" | |
| assert steps[1].rule_name == "final_result" | |
| assert steps[1].visual_hints["final"] is True | |
| def test_final_step_uses_previous_before_when_after_equals_final_latex(): | |
| generator = StepGenerator() | |
| solver_result = { | |
| "success": True, | |
| "steps": [ | |
| { | |
| "description": "Simplify", | |
| "before": r"x^2\cos(x)+2x\sin(x)", | |
| "after": r"2x\sin(x)+x^2\cos(x)", | |
| "rule": "simplification", | |
| } | |
| ], | |
| "result_latex": r"2x\sin(x)+x^2\cos(x)", | |
| } | |
| steps = generator.generate(solver_result) | |
| assert len(steps) == 2 | |
| assert steps[1].latex_before == r"x^2\cos(x)+2x\sin(x)" | |
| assert steps[1].description == "Final resolved solution" | |
| def test_no_final_step_when_result_latex_missing(): | |
| generator = StepGenerator() | |
| solver_result = { | |
| "success": True, | |
| "steps": [ | |
| {"description": "A", "before": "x", "after": "1", "rule": "basic"}, | |
| ], | |
| "result_latex": "", | |
| } | |
| steps = generator.generate(solver_result) | |
| assert len(steps) == 1 | |
| assert steps[0].rule_name == "basic" | |