
# Copertura di test262

[Test di conformità ufficiale](https://github.com/tc39/test262) test262 è la suite di test di conformità ufficiale mantenuta da TC39 e il metodo di riferimento per confrontare i motori JavaScript.

Phasis supera **l'intera suite al 100 %** in ogni categoria: semantica del linguaggio, libreria standard, `Intl`, funzionalità Web legacy `annexB`, directory `staging` dei test in incubazione e autotest dell'harness. Nessuna esclusione tramite flag di funzionalità, nessuna voce nella blocklist per lacune dell'host e nessuna esclusione per shard.

La suite è bloccata a una revisione specifica: il submodule Git di `test262` fissa la revisione rispetto alla quale viene misurato Phasis e i nuovi test upstream vengono conteggiati solo dopo l'aggiornamento del submodule. Lo snapshot della suite completa in [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md) viene rigenerato dal workflow `compat-matrix.yml`, avviato manualmente anziché a ogni push; `COMPAT.md` registra quando è stato acquisito lo snapshot e rispetto a quale commit.

Per confronto, [test262.fyi](https://test262.fyi) esegue la stessa suite su ogni motore JS di produzione:

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

Ognuno di questi motori presenta ancora qualche lacuna (proposte aggiunte di recente, casi limite rari ancora in fase di sviluppo). Phasis colma il divario perché è un'implementazione dedicata alla conformità.

## Esecuzione in locale

Per eseguire il runner servono il submodule `test262` e le classi di test del repository, che non sono inclusi nel pacchetto Composer; eseguitelo quindi da una copia clonata:

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

Un'esecuzione completa su un Mac recente richiede circa 20 minuti; la matrice CI suddivide i test in shard paralleli e termina in pochi minuti.

Per eseguire il debug di una sola categoria:

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

Consultate [il riferimento di CLI](https://phasis.inline0.dev/it/docs/cli#bin-test262) per l'elenco completo dei flag.

## Perché è importante

JavaScript ha semantiche sottili: `NaN !== NaN`, `-0 === 0`, `[1] + 1 === "11"`, l’ordine esatto di enumerazione delle proprietà, i tempi delle microtask di Promise. Una libreria che esegue codice utente JS deve gestire correttamente ognuno di questi aspetti, sempre. test262 è il criterio per stabilire cosa sia «corretto»; superarlo al 100 % significa che un programma JS eseguito su V8 produce un output identico byte per byte su Phasis (fatte salve le API disponibili solo nel browser).
