calculus-animator / tests /test_step_generator.py
Rsan0948
Initial commit
fe0c99f
Raw
History Blame Contribute Delete
2.04 kB
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"