Calc/test_fixed_issues.py

82 lines
3.3 KiB
Python

#!/usr/bin/env python3
"""
Prueba de las correcciones:
1. FourBytes + int mantiene tipo FourBytes
2. IP4Mask con mejor mensaje de error para máscaras inválidas
"""
if __name__ == "__main__":
print("🔧 PROBANDO CORRECCIONES")
print("=" * 50)
try:
from main_evaluation import HybridEvaluationEngine
# Crear motor
engine = HybridEvaluationEngine()
print("📋 Reproduciendo casos del usuario:\n")
# 1. Reproducir secuencia completa
print("1. mask=255.240.0.3")
result1 = engine.evaluate_line("mask=255.240.0.3")
print(f"{result1.result} (tipo: {type(result1.result).__name__})")
print(f"\n2. mask")
result2 = engine.evaluate_line("mask")
print(f"{result2.result} (tipo: {type(result2.result).__name__})")
print(f"\n3. ip=10.1.1.x")
result3 = engine.evaluate_line("ip=10.1.1.x")
print(f"{result3.result} (tipo: {type(result3.result).__name__})")
print(f"\n4. 10.1.1.1 + 1 (DEBE DEVOLVER FourBytes)")
result4 = engine.evaluate_line("10.1.1.1 + 1")
print(f"{result4.result} (tipo: {type(result4.result).__name__})")
if hasattr(result4.result, 'original'):
print(f" → Valor original: {result4.result.original}")
print(f"\n5. ip")
result5 = engine.evaluate_line("ip")
print(f"{result5.result} (tipo: {type(result5.result).__name__})")
print(f"\n6. IP4(10.1.1.4)")
result6 = engine.evaluate_line("IP4(10.1.1.4)")
print(f"{result6.result} (tipo: {type(result6.result).__name__})")
print(f"\n7. IP4Mask(mask) - DEBE DAR ERROR INFORMATIVO")
result7 = engine.evaluate_line("IP4Mask(mask)")
if result7.is_error:
print(f" ❌ Error (como esperado): {result7.error}")
else:
print(f"{result7.result} (tipo: {type(result7.result).__name__})")
print(f"\n8. Probando con máscara válida: IP4Mask(255.255.0.0)")
result8 = engine.evaluate_line("IP4Mask(255.255.0.0)")
print(f"{result8.result} (tipo: {type(result8.result).__name__})")
print(f"\n🎯 RESUMEN DE RESULTADOS:")
print(f" ✅ mask asignada como FourBytes: {type(result1.result).__name__ == 'FourBytes'}")
print(f" ✅ 10.1.1.1 + 1 mantiene FourBytes: {type(result4.result).__name__ == 'FourBytes'}")
print(f" ✅ IP4Mask da error informativo para máscara inválida: {result7.is_error}")
print(f" ✅ IP4Mask funciona con máscara válida: {not result8.is_error}")
# Verificación adicional de aritmética FourBytes
print(f"\n🔍 VERIFICACIÓN ADICIONAL DE ARITMÉTICA:")
# Test más casos aritméticos
test_cases = [
"192.168.1.1 + 5",
"10.0.0.0 + 256",
"255.255.255.255 - 1"
]
for case in test_cases:
result = engine.evaluate_line(case)
print(f" {case}{result.result} ({type(result.result).__name__})")
except Exception as e:
print(f"Error: {e}")
import traceback
traceback.print_exc()