Calc/debug_templates
Miguel 1bf1e47c04 Mejorado para que la API de Debug sea solo un wrap y no necesite actualizacion 2025-06-05 18:27:56 +02:00
..
README.md Mejorado para que la API de Debug sea solo un wrap y no necesite actualizacion 2025-06-05 18:27:56 +02:00
basic_test.json Creada API de Debug 2025-06-05 18:18:48 +02:00
context_debug.json Creada API de Debug 2025-06-05 18:18:48 +02:00
display_format_test.json Creada API de Debug 2025-06-05 18:18:48 +02:00
error_debug.json Creada API de Debug 2025-06-05 18:18:48 +02:00
regression_test.json Creada API de Debug 2025-06-05 18:18:48 +02:00
tokenization_test.json Creada API de Debug 2025-06-05 18:18:48 +02:00

README.md

Templates de Debug - Simple Debug API

Esta carpeta contiene templates predefinidos para debuggear diferentes aspectos de la Calculadora MAV CAS.

Uso Básico

# Ejecutar un template
python simple_debug.py debug_templates/basic_test.json

# Con archivo de salida personalizado
python simple_debug.py debug_templates/basic_test.json --output mi_debug.json

# Con información detallada
python simple_debug.py debug_templates/basic_test.json --verbose

Templates Disponibles

basic_test.json

Propósito: Pruebas básicas de funcionalidad

  • Operaciones con FourBytes (IPs)
  • Operaciones con IntBase (números en diferentes bases)
  • Variables y tabla de símbolos
  • Funciones de SymPy

tokenization_test.json

Propósito: Debug del sistema de tokenización

  • Análisis de expresiones complejas
  • Información de reglas de tokenización
  • Procesamiento de expressions mixtas (IP + hex)

regression_test.json

Propósito: Testing de regresión para casos específicos

  • Verificación de tipos: FourBytes, IntBase, IP4Mask
  • Operaciones simbólicas
  • Substitución de variables

error_debug.json

Propósito: Debug de manejo de errores

  • Máscaras IP inválidas
  • IPs fuera de rango
  • Números hexadecimales malformados
  • División por cero
  • Variables indefinidas

context_debug.json

Propósito: Debug del contexto y estado del motor

  • Tabla de símbolos
  • Tipos registrados
  • Contexto base
  • Sistema de ecuaciones

display_format_test.json

Propósito: Demostración de diferentes tipos de resultados

  • Diferentes tipos de resultados (IP, hex, símbolos, matrices)
  • Comentarios y errores
  • Verificación del comportamiento de la aplicación

Formato de Template

Cada template es un archivo JSON con esta estructura:

{
  "queries": [
    {
      "index": 0, 
      "type": "input",
      "content": "10.1.1.1 + 1"
    },
    {
      "index": 1,
      "type": "exec", 
      "content": "type(engine.last_result).__name__"
    }
  ]
}

Tipos de Query

  • input: Evalúa expresiones como si las escribieras en la calculadora
  • exec: Ejecuta código Python para inspeccionar el estado interno del motor

Casos de Uso Comunes

Debug de un Bug Específico

  1. Copia basic_test.json a mi_bug_debug.json
  2. Modifica las queries para reproducir el bug
  3. Añade queries exec para inspeccionar el estado
  4. Ejecuta: python simple_debug.py mi_bug_debug.json

Verificar una Nueva Funcionalidad

  1. Crea un template con queries input que usen la nueva funcionalidad
  2. Añade queries exec para verificar el estado interno
  3. Compara resultados antes y después de los cambios

Testing de Regresión

  1. Usa regression_test.json como base
  2. Añade casos específicos que deben mantenerse funcionando
  3. Ejecuta regularmente para detectar regresiones

Funciones Útiles para Queries exec

Estado del Motor

"engine.symbol_table"                    # Variables actuales
"engine.last_result"                     # Último resultado
"engine.symbolic_mode"                   # ¿Modo simbólico?
"len(engine.equations)"                  # Cantidad de ecuaciones

Información de Tipos

"type(engine.last_result).__name__"     # Tipo del resultado
"engine.get_available_types()"          # Tipos disponibles
"list(engine.registered_types_info['registered_classes'].keys())"

Tokenización

"engine.parser.get_tokenization_info()" # Info de tokenización
"engine.parser.process_expression('test')" # Procesar expresión

Análisis de Objetos

"engine.last_result.original"           # String original (FourBytes)
"engine.last_result.base"               # Base numérica (IntBase)
"engine.last_result.has_symbols"        # ¿Tiene símbolos?

Formato de Resultado

Resultado Individual para Query input

{
  "index": 0,
  "input": "10.1.1.1 + 1",
  "output": "10.1.1.2",
  "result_type": "FourBytes", 
  "success": true,
  "error": null
}

Resultado Individual para Query exec

{
  "index": 1,
  "input": "type(engine.last_result).__name__",
  "output": "FourBytes",
  "result_type": "str",
  "success": true,
  "error": null,
  "exec_result": "FourBytes"
}

Campos del Resultado

  • output: Texto tal como se muestra en la aplicación (queries input)
  • exec_result: Valor directo de la evaluación Python (queries exec)
  • result_type: Tipo del objeto resultado
  • success: true si la evaluación fue exitosa
  • error: Mensaje de error si success es false

Tips

  • Usa index secuencial para facilitar la lectura de resultados
  • Combina queries input y exec para verificar comportamiento y estado
  • El archivo de resultados contiene información detallada de éxito/error
  • Usa output para ver exactamente el texto que muestra la aplicación
  • Puedes copiar y modificar templates existentes para casos específicos