
# Couverture test262

[test262](https://github.com/tc39/test262) est la suite officielle de tests de conformité maintenue par TC39 et la méthode de référence pour comparer les moteurs JavaScript.

Phasis réussit **l'intégralité de la suite à 100 %** dans toutes les catégories : sémantique du langage, bibliothèque standard, `Intl`, fonctionnalités Web héritées `annexB`, répertoire `staging` de tests en incubation et tests internes du banc de test. Aucune désactivation par indicateur de fonctionnalité, aucune entrée dans la liste d'exclusion des lacunes de l'hôte, aucune exclusion par fragment.

La suite est figée : le sous-module Git `test262` fixe la révision par rapport à laquelle Phasis est mesuré, et les nouveaux tests en amont ne sont pris en compte qu'après la mise à jour du sous-module. L'instantané de la suite complète dans [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md) est régénéré par le workflow `compat-matrix.yml`, lancé manuellement plutôt qu'à chaque push ; `COMPAT.md` indique quand l'instantané a été pris et sur quel commit.

À titre de comparaison, [test262.fyi](https://test262.fyi) suit la même suite sur chaque moteur JS de production :

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

Chacun de ces moteurs conserve un petit écart résiduel (propositions récemment intégrées, cas limites rares en cours de développement). Phasis comble cet écart en étant conçu spécifiquement pour privilégier la conformité.

## Exécution en local

Le lanceur nécessite le sous-module `test262` et les classes de test du dépôt, absents du package Composer ; exécutez-le donc depuis un clone :

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

Une exécution complète prend environ 20 minutes sur un Mac récent ; la matrice CI répartit les tests en parallèle et termine en quelques minutes.

Pour ne lancer qu'une catégorie pendant le débogage :

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

Consultez la [référence CLI](https://phasis.inline0.dev/fr/docs/cli#bin-test262) pour connaître tous les indicateurs.

## Pourquoi c'est important

JavaScript a une sémantique subtile : `NaN !== NaN`, `-0 === 0`, `[1] + 1 === "11"`, l'ordre exact de l'énumération des propriétés et le moment d'exécution des microtâches Promise. Une bibliothèque qui exécute le code utilisateur JS doit respecter chacun de ces points, à chaque fois. test262 est la référence en matière de conformité ; réussir la suite à 100 % signifie qu'un programme JS exécuté sur V8 produit une sortie identique octet par octet sur Phasis (à l'exception des API propres au navigateur).
