#!/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()