Calc/test_user_case.py

105 lines
4.2 KiB
Python

#!/usr/bin/env python3
"""
Prueba del caso específico del usuario: m=255.240.0.0 16#ff + 5
"""
if __name__ == "__main__":
print("🎯 Probando caso específico del usuario")
try:
# Debug completo del sistema
from type_registry import discover_and_register_types, get_registered_base_context
from tl_bracket_parser import UniversalTokenizer
print("\n🔍 DEBUG COMPLETO DEL SISTEMA:")
# 1. Verificar registro de tipos
print("\n1. Verificando registro de tipos...")
registry_info = discover_and_register_types()
print(f"Clases registradas: {registry_info['class_count']}")
context = get_registered_base_context()
fundamental_classes = ['IntBase', 'FourBytes']
for cls_name in fundamental_classes:
if cls_name in context:
print(f"{cls_name} está registrada")
cls_obj = context[cls_name]
if hasattr(cls_obj, 'get_tokenization_patterns'):
patterns = cls_obj.get_tokenization_patterns()
print(f" 🔧 Tiene {len(patterns)} reglas de tokenización")
for i, pattern in enumerate(patterns):
print(f" {i+1}. Prioridad {pattern['priority']}: {pattern['description']}")
print(f" Patrón: {pattern['pattern']}")
else:
print(f" ❌ Sin reglas de tokenización")
else:
print(f"{cls_name} NO está registrada")
# 2. Crear tokenizador y verificar reglas
print("\n2. Creando tokenizador...")
tokenizer = UniversalTokenizer()
print(f"Reglas cargadas en tokenizador: {len(tokenizer.tokenization_rules)}")
if len(tokenizer.tokenization_rules) > 0:
print("Reglas activas:")
for i, rule in enumerate(tokenizer.tokenization_rules):
print(f" {i+1}. {rule['class_name']} (prioridad {rule['priority']}): {rule['description']}")
else:
print("❌ No hay reglas cargadas en el tokenizador")
# 3. Probar tokenización manual
print("\n3. Probando tokenización manual...")
tokenizer.debug = True
test_simple = "192.168.1.1"
print(f"\nProbando: '{test_simple}'")
result = tokenizer.preprocess_tokens(test_simple)
print(f"Resultado: '{result}'")
test_hex = "16#ff"
print(f"\nProbando: '{test_hex}'")
result = tokenizer.preprocess_tokens(test_hex)
print(f"Resultado: '{result}'")
# 4. Verificar que las clases estén disponibles en motor
print("\n4. Verificando motor de evaluación...")
from main_evaluation import HybridEvaluationEngine
engine = HybridEvaluationEngine()
engine.debug = True
print(f"Contexto del motor tiene {len(engine.base_context)} entradas")
# Verificar que IntBase y FourBytes estén en el contexto
for cls_name in ['IntBase', 'FourBytes']:
if cls_name in engine.base_context:
print(f"{cls_name} está en contexto del motor")
else:
print(f"{cls_name} NO está en contexto del motor")
# 5. Probar evaluación directa
print("\n5. Probando evaluación directa...")
# Probar evaluación manual sin tokenización
test_manual = "IntBase('ff', 16)"
print(f"Probando evaluación manual: {test_manual}")
try:
result = engine._eval_in_context(test_manual)
print(f"✅ Resultado: {result} (tipo: {type(result)})")
except Exception as e:
print(f"❌ Error: {e}")
# Probar FourBytes manual
test_manual2 = "FourBytes('192.168.1.1')"
print(f"Probando evaluación manual: {test_manual2}")
try:
result = engine._eval_in_context(test_manual2)
print(f"✅ Resultado: {result} (tipo: {type(result)})")
except Exception as e:
print(f"❌ Error: {e}")
except Exception as e:
print(f"Error: {e}")
import traceback
traceback.print_exc()