Skip to content

Matriz de verificación del Módulo de E/S ​

Fecha: 2026-10-17. Rama: test, versión 0.4.6-beta.

Automática significa ejecutada sobre el código; parcial distingue la cobertura de lógica de la prueba con un cliente o hardware real. Manual pendiente nunca significa aprobada.

Última ejecución local con Java 25: build correcto, 50 pruebas unitarias y 11 GameTests aprobados. Se comprobaron las 34 claves de traducción usadas por la bienvenida y el error de Wi-Fi en los cuatro idiomas, y el contenido del JAR instalable. La ejecución del workflow en GitHub sigue pendiente.

Cobertura ejecutada ​

CasoResultado esperadoCobertura
RX 0 / 255 / 128Analógico 0 / 15 / 8; digital 0 / 15 / 15Unitarias; GameTest RX 128 en cinco caras y RX 255 con condición
RX inválido, -1, 256, texto, canal mc_Rechazo sin modificar señalUnitarias de protocolo
TX redstone 0 / 1 / 7 / 15Analógico 0 / 17 / 119 / 255; digital 0 / 255 / 255 / 255Unitarias y GameTest con comparador/cofre; escritura física pendiente
DIGITAL ↔ ANALOGRecalcular sin reutilizar la emisión como lecturaUnitarias; editor y firmware pendientes
Hardware → Minecraft ↔ Minecraft → HardwareTX no alimenta ninguna salida; invalidar RX al cambiar direcciónUnitarias y GameTest de aislamiento; envío de cero al canal anterior pendiente con hardware
Habilitar/deshabilitarSalida de mundo cero al deshabilitar; TX solicita ceroGameTest de lámpara tras bloque sólido; actuador físico pendiente
Cambiar canalInvalidar RX, cancelar órdenes pendientes del canal anterior, solicitar cero anterior y estado nuevoCodec y cola automática; recorrido completo con cliente/hardware pendiente
Cambiar compuerta con señalOR máximo, AND mínimo, XOR máximo con paridad imparUnitarias, incluidas todas las combinaciones binarias para 1–5 entradas
Sin conectoresRX sin condición; TX ceroUnitarias
Una / dos / tres o más entradasReglas lógicas y magnitud documentadasUnitarias de lógica digital y analógica
Condición se cierra y abre sin otro RXConservar muestra y restaurar salida al abrirGameTest con bloque de redstone
Norte / sur / este / oeste / abajoEmitir débil y fuerte solamente en salidas; arriba ceroGameTest y 243 configuraciones empaquetadas
Selección de conectoresRegión clicable coherente; terminal inferior alcanzable desde arribaUnitarias de geometría y raycast inferior; interacción gráfica pendiente
Palanca, botón y repetidorDetectar activación y apagado real, incluido final de pulsaciónGameTests
Comparador/cofreRecorrer 0→1→7→15→0 al cambiar inventarioGameTest
Polvo de redstone conectado por una derivaciónLeer señal sin emitir en TXGameTest con línea de polvo norte–sur y entrada lateral
Bloque sólido alimentado + lámparaEncender y apagar sin energía residualGameTest
Desconexión observadaInvalidar RX y apagar mundoGameTest; detección USB/TCP física pendiente
Conexión TCPEscuchar no significa conectado; token válido, escritura y cierre verificablesPruebas de sockets locales / delimitación, incluida reinicialización y fallo por puerto ocupado seguido de reintento
Handshake incompleto al detener servidorCerrar socket pendiente y liberar escuchaPrueba de socket local
Reconexión con valor TX estableInvalidar deduplicación y reenviar; USB repite a los 2 sPolítica implementada; bootloader/placa real pendiente
Guardar/cargar configuraciónConservar nombre, canal, propietario, señal, lógica, modo y habilitación; no persistir RX/TX/enlaceUnitarias sobre NBT real
Datos antiguosLeer enums nombrados y ordinales; ignorar redstoneOut; conservar MODE=2 y caras; ignorar blinking antiguoUnitarias con NbtUtils y codec real de paleta de chunks
Canal o modo antiguo inválidoDeshabilitar; conservar canal inválido saneado y bloquear activación sin corregirloUnitarias
Varios módulos, mismo canalDistribuir muestra a receptores; retirar entidades del índiceGameTest funcional de 64 módulos
Permisos / distancia / chunk no cargadoDueño permitido, otro jugador rechazado; no forzar cargaGameTest con jugadores de prueba
Colas RX/TXTurnos entre canales, FIFO IO, memoria acotada, descartes observables, parada prioritariaUnitarias, incluidas ráfagas de 17 y 64 paradas distintas, deduplicación y rechazo explícito al superar la capacidad sin perder paradas aceptadas
TelemetríaEstados coalescidos, eventos acotados, cancelación por canalUnitarias; recorrido gráfico con eventos reales pendiente
Visualizador / generadorRX/TX separados, buffer circular, estadísticas, ondas, canal fijo por ejecución y valor de reposoUnitarias de parada/cierre con borrador cambiado y de cambio de sesión sin enviar ni cancelar datos de la nueva placa; renderizado y pérdida de enlace real pendientes
Bienvenida y ayudaTextos traducidos y fallo de inicio Wi-Fi visible con posibilidad de reintentoClaves verificadas en en_us, es_es, es_mx y es_ar; renderizado del aviso y ayuda por plataforma pendiente
AutenticaciónVector HMAC-SHA256, desafío nuevo, rechazo de repetición, persistencia/revocación y fallo de escrituraUnitarias; persistencia de claves en ESP32/Uno Q pendiente

Pruebas manuales restantes ​

Usar copias de mundos anteriores. Instalar el mismo mod actualizado en cliente y servidor; los paquetes internos cambiaron a v2. Mantener 115200 en ambos extremos USB.

EscenarioPasos y criterio
Palanca y botónTX digital con entrada en cada cara. Probar pulsos de botón y mantener palanca 60 s: un estado estable no debe crear tráfico continuo del bloque
Repetidor y comparadorTX analógico con niveles 0, 1, 7 y 15; RX hacia repetidor/lámpara. Verificar orientación, caída y ausencia de señal por caras desactivadas
Entrada y salida en el mismo circuitoRX condicionado con cable que devuelve su salida. Verificar apagado al deshabilitar y documentar el lazo real. Separar caminos con repetidores; una lectura local no identifica el origen de energía en todo el circuito
Cambios simultáneosCambiar varias entradas en el mismo tick, alternar lógica y desconectar una cara con señal. El resultado debe corresponder a los niveles finales del tick; no prometer capturar pulsos inferiores a un tick
Conector inferiorColocar sobre piedra, redstone y componentes; elegir el terminal visible desde arriba y verificar el vecino inferior, nunca el superior
UI y permisosProbar escalas GUI con anchuras 320/426/640 y alturas ≥240, los cuatro idiomas, nombre/canal al alternar opciones, scroll y errores de guardar. Guardar sin hardware debe funcionar; ningún éxito antes de respuesta del servidor
USB Uno R3Apertura ocupada/inexistente, conexión correcta, reset por DTR, desenchufar y reconectar con palanca estable. Verificar reenvío después del bootloader y primera muestra cero
Wi-Fi ESP32 / Uno QToken correcto/incorrecto, HMAC, olvidar placa, IP privada, cable/red caída, autenticación lenta, reconexión estable y cierre durante handshake
BienvenidaEn los cuatro idiomas y varias escalas GUI, abrir las tres ayudas y copiar el ejemplo. Ocupar el puerto 25585, comprobar el aviso visible y el estado detenido; liberar el puerto y reintentar
Reinicio / chunksGuardar módulo RX alimentado, cerrar servidor y volver; no recuperar señal temporal. Descargar y recargar chunk; esperar la instantánea del sensor. TX debe solicitar cero al descargar y resincronizar al cargar
Dimensión y multijugadorDos jugadores con el mismo canal en Overworld/Nether. Solo canales del dueño en su dimensión actual; cambio de dimensión invalida RX y solicita cero a emisores anteriores. Intentar modificar dueño ajeno, dimensión vieja y posiciones descargadas
Apagados simultáneosActivar 17 y luego 64 canales TX distintos. Retirar módulos, descargar sus chunks y cambiar de dimensión en pruebas separadas; confirmar que cada canal llega a cero, también con telemetría activa
Dos emisores, mismo canalMostrar que el actuador recibe el último comando: no hay arbitraje por dispositivo. Asignar canales distintos. Probar receptores compartidos, que sí están soportados
Telemetría + IO + ondasActivar eventos, usar sensores y un generador en otro canal. Deshabilitar evento con datos pendientes, detener onda y confirmar reposo prioritario. No compartir canal entre generador y actuador controlado por IO
Canal del generadorIniciar led_a, comprobar que el campo no admite cambios incluso tras cambiar de pestaña o escala GUI. Detener o cerrar y confirmar cero en led_a; iniciar después led_b. Reconectar otra placa antes de detener/cerrar y confirmar que la ejecución anterior no le manda órdenes
Mundo históricoCopiar regiones reales anteriores, verificar receta, inventario, colocación, conectores, nombre, dueño y canales. Revisar AND/XOR antiguos y canales inválidos deshabilitados

Rendimiento ​

Se ejecutó una prueba funcional con 64 módulos: recepción compartida 128→0, procesamiento y retirada de sus referencias del índice. Las colas y el recorder tienen pruebas de saturación. Esto no mide MSPT, uso de CPU, GC, paquetes por segundo ni rendimiento de renderizado.

Para el perfil pendiente, comparar 0/32/64/128 módulos durante cinco minutos de señal estable y cinco de cambios, con fuentes aisladas y después con circuitos conectados. Registrar MSPT, memoria/GC, actualizaciones de vecinos, bytes/paquetes, colas y descartes F7. Repetir tras descargar/cargar chunks. La condición buscada es que el estado estable no crezca en memoria ni genere actualizaciones continuas; el tráfico bajo cambios debe respetar el presupuesto compartido de 40 líneas/s y mostrar los descartes bajo sobrecarga. No se ha realizado este perfil.

Reproducción ​

powershell
$env:JAVA_HOME = 'C:/Program Files/Java/jdk-25.0.4.1'
./gradlew.bat build
./gradlew.bat -PioGameTests runGameTest

En Linux: ./gradlew build y ./gradlew -PioGameTests runGameTest. Los GameTests usan un mundo de prueba generado bajo build/run/gameTest; no abren mundos del jugador.