Calc/test_final.py

92 lines
3.0 KiB
Python

#!/usr/bin/env python3
"""
Script de prueba final para verificar todas las funcionalidades del modo simbólico
"""
from main_evaluation import HybridEvaluationEngine
def test_comprehensive():
"""Prueba comprehensiva del modo simbólico"""
print("=" * 70)
print("PRUEBA COMPREHENSIVA - MODO SIMBÓLICO")
print("=" * 70)
# Crear motor en modo simbólico
engine = HybridEvaluationEngine()
engine.set_symbolic_mode(
symbolic_mode=True,
show_numeric=True,
keep_fractions=True
)
# Test cases
test_cases = [
# Fracciones simples
("4/5", "Fracción simple"),
("25/51", "Fracción compleja"),
("22/7", "Aproximación de π"),
# Asignaciones de fracciones
("a = 4/5", "Asignación fracción simple"),
("b = 25/51", "Asignación fracción compleja"),
("c = 22/7", "Asignación aproximación π"),
# Operaciones con fracciones
("3/4 + 1/6", "Suma de fracciones"),
("5/6 - 1/3", "Resta de fracciones"),
("2/3 * 3/4", "Multiplicación de fracciones"),
("5/6 / 2/3", "División de fracciones"),
# Asignaciones de operaciones
("d = 3/4 + 1/6", "Asignación suma fracciones"),
("e = 2/3 * 3/4", "Asignación multiplicación fracciones"),
# Expresiones simbólicas
("sqrt(2)", "Raíz cuadrada"),
("sin(pi/4)", "Función trigonométrica"),
("log(e)", "Logaritmo"),
# Asignaciones simbólicas
("f = sqrt(2)/2", "Asignación expresión simbólica"),
("g = sin(pi/6)", "Asignación función trigonométrica"),
]
print("\nRESULTADOS:")
print("-" * 70)
for i, (expression, description) in enumerate(test_cases, 1):
print(f"\n{i:2d}. {description}")
print(f" Expresión: {expression}")
result = engine.evaluate_line(expression)
if result.is_error:
print(f" ❌ ERROR: {result.error}")
else:
print(f" ✅ Resultado: {result.result}")
if result.numeric_result is not None:
print(f" 📊 Numérico: ≈ {result.numeric_result}")
else:
print(f" 📊 Numérico: (no disponible)")
# Verificar variables asignadas
print(f"\n{'-'*70}")
print("VARIABLES ASIGNADAS:")
print(f"{'-'*70}")
variables = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
for var in variables:
value = engine.get_variable(var)
if value is not None:
print(f" {var} = {value} (tipo: {type(value).__name__})")
print(f"\n{'='*70}")
print("MODO SIMBÓLICO: ✅ FUNCIONANDO CORRECTAMENTE")
print("- Fracciones se mantienen simbólicas: 4/5, 25/51, 22/7")
print("- Aproximaciones numéricas se muestran cuando corresponde")
print("- Asignaciones preservan la forma simbólica")
print("- Operaciones mantienen exactitud simbólica")
print(f"{'='*70}")
if __name__ == "__main__":
test_comprehensive()