# test_custom_chips Sandbox aislado para validar el sistema de **custom chips** de Velxio antes de integrarlo al frontend. Cero dependencia de Wokwi. ## Objetivos 1. Probar que se puede cargar un `.wasm` (chip compilado a partir de C) y enrutarlo al simulador. 2. Probar que un sketch de Arduino real (`.hex` compilado con `arduino-cli`) puede comunicarse con el chip vía GPIO e I2C. 3. Mantener fidelidad 1:1 con la infraestructura de Velxio (`PinManager`, `I2CBusManager`, `AVRSimulator`) para que el código que se valide acá sea trivial de portar. ## Estructura ``` test_custom_chips/ ├── package.json ├── README.md ├── vitest.config.js ├── sdk/ │ ├── include/ │ │ └── velxio-chip.h ← API que ven los chips │ └── examples/ │ ├── inverter.c │ ├── inverter.chip.json │ ├── eeprom-24c01.c │ └── eeprom-24c01.chip.json ├── scripts/ │ ├── compile-chip.sh ← clang invocation Linux/macOS │ ├── compile-chip.ps1 ← clang invocation Windows │ ├── compile-all.sh ← compila todos los ejemplos │ └── setup-wasi-sdk.md ← cómo instalar wasi-sdk ├── src/ ← runtime y mirrors de Velxio │ ├── ChipRuntime.js ← loader WASM + host imports │ ├── WasiShim.js ← WASI mínimo (fd_write, proc_exit) │ ├── PinManager.js ← espejo de Velxio │ ├── I2CBus.js ← espejo del I2CBusManager │ ├── AVRHarness.js ← avr8js wrapper Velxio-fiel │ ├── intelHex.js ← parser │ └── index.js ├── fixtures/ ← .wasm compilados + .hex sketches └── test/ ├── js/ ← tests que NO requieren clang │ ├── 01_pin_manager.test.js │ ├── 02_i2c_bus.test.js │ ├── 03_avr_harness.test.js │ └── 04_runtime_imports.test.js └── e2e/ ← tests que requieren .wasm compilado ├── 05_chip_inverter.test.js └── 06_chip_eeprom_24c01.test.js ``` ## Quickstart ```bash # 1. Instalar deps cd test/test_custom_chips npm install # 2. (Solo para tests E2E) instalar wasi-sdk siguiendo scripts/setup-wasi-sdk.md # 3. (Solo para tests E2E) compilar los ejemplos npm run compile:examples # 4. Correr tests npm test # todo npm run test:js # solo tests JS-only (no requieren wasi-sdk) npm run test:e2e # solo E2E con WASM ``` Los tests `e2e/` se hacen `it.skip` automáticamente si el `.wasm` correspondiente no está en `fixtures/`. Eso permite correr la suite parcialmente sin tener `wasi-sdk` instalado. ## Por qué un sandbox separado Igual que `test_circuit/` validó el solver SPICE antes de integrarlo, este sandbox valida el runtime de chips antes de tocar el frontend de Velxio. Cuando los tests pasen end-to-end, los archivos de `src/` se portan al frontend (con tipado TS) e integran con el editor. ## Estado actual Ver `../autosearch/04_findings.md` para el log corrido de qué funciona y qué falta.