
# Cobertura de test262

[test262](https://github.com/tc39/test262) es la suite oficial de pruebas de conformidad mantenida por TC39 y la forma canónica de comparar motores de JavaScript.

Phasis supera **la suite completa con 100 %** en todas las categorías: semántica del lenguaje, la biblioteca estándar, `Intl`, funciones web heredadas de `annexB`, el directorio `staging` de pruebas en fase de incubación y las autopruebas del harness. No hay omisiones por indicadores de funcionalidad, listas de bloqueo por carencias del entorno anfitrión ni exclusiones por fragmento.

La suite está fijada: el submódulo de Git `test262` fija la revisión contra la que se mide Phasis, y las nuevas pruebas upstream solo cuentan después de actualizar el submódulo. La instantánea de la suite completa en [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md) se vuelve a generar con el flujo de trabajo `compat-matrix.yml`, que se inicia manualmente y no en cada push; `COMPAT.md` registra cuándo se tomó la instantánea y contra qué commit.

A modo de comparación, [test262.fyi](https://test262.fyi) ejecuta la misma suite en cada motor JS de producción:

| Motor | Conformidad |
|---|---:|
| V8 (Chrome / Node) | 99.8 % |
| SpiderMonkey (Firefox) | 99.6 % |
| JavaScriptCore (Safari) | 99.4 % |
| QuickJS | ~97 % |
| Hermes (React nativo) | ~95 % |
| **Phasis** | **100 %** |

Cada uno de esos motores aún tiene una pequeña brecha residual (propuestas recién incorporadas y casos límite poco frecuentes en desarrollo). Phasis la cierra al ser una implementación de propósito único, centrada en la conformidad.

## Ejecutarlo localmente

El ejecutor necesita el submódulo `test262` y las clases de prueba del repositorio, que no se incluyen en el paquete Composer; por eso debes ejecutarlo desde un clon:

```bash
git clone https://github.com/inline0/phasis
cd phasis
git submodule update --init test262
composer install
./bin/test262 --jobs 4
```

Una ejecución completa tarda unos 20 minutos en un Mac reciente; la matriz de CI divide las pruebas en paralelo y termina en unos pocos minutos.

Para ejecutar una sola categoría mientras depuras:

```bash
./bin/test262 --category built-ins/Array
./bin/test262 --category language/expressions/yield --failures
```

Consulta la [referencia de CLI](https://phasis.inline0.dev/es/docs/cli#bin-test262) para ver el conjunto completo de indicadores.

## Por qué importa

JavaScript tiene una semántica sutil: `NaN !== NaN`, `-0 === 0`, `[1] + 1 === "11"`, el orden exacto de enumeración de propiedades y el momento en que se ejecutan las microtareas de Promise. Una biblioteca que ejecuta código de usuario JS debe acertar en todos esos detalles cada vez. test262 establece el criterio de lo correcto; superarlo con un 100 % significa que un programa JS que se ejecuta en V8 produce una salida idéntica byte por byte en Phasis (salvo por las API exclusivas del navegador).
