
# Cobertura de test262

[test262](https://github.com/tc39/test262) é a suíte oficial de testes de conformidade mantida pela TC39 e a forma canônica de comparar mecanismos JavaScript.

Phasis passa em **toda a suíte com 100 %** em todas as categorias — semântica da linguagem, biblioteca padrão, `Intl`, recursos Web legados `annexB`, o diretório `staging` de testes em incubação e autotestes do harness. Sem contornos de flags de funcionalidade, entradas na lista de bloqueio de lacunas do host ou exclusões por shard.

A suíte está fixada: o submódulo `test262` git fixa a revisão Phasis usada na medição, e novos testes upstream só contam após a atualização do submódulo. O snapshot da suíte completa em [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md) é regenerado pelo workflow `compat-matrix.yml`, iniciado manualmente em vez de a cada push; `COMPAT.md` registra quando o snapshot foi obtido e em relação a qual commit.

Para comparação, [test262.fyi](https://test262.fyi) acompanha a mesma suíte em cada mecanismo JS de produção:

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

Cada um desses mecanismos ainda tem uma pequena lacuna residual (propostas recém-implementadas, casos extremos raros em desenvolvimento). Phasis fecha essa lacuna por ser uma implementação de propósito único, voltada à conformidade.

## Executar localmente

O executor precisa do submódulo `test262` e das classes de teste do repositório, que não estão incluídos no pacote Composer; por isso, execute-o a partir de um clone:

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

Uma execução completa em um Mac recente leva cerca de 20 minutos; a matriz de CI divide os testes em paralelo e termina em poucos minutos.

Para executar apenas uma categoria durante a depuração:

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

Consulte [a referência de CLI](https://phasis.inline0.dev/pt/docs/cli#bin-test262) para ver todas as opções de flags.

## Por que isso importa

JavaScript tem semântica sutil — `NaN !== NaN`, `-0 === 0`, `[1] + 1 === "11"`, a ordem exata da enumeração de propriedades e o momento das microtarefas de Promise. Uma biblioteca que executa código de usuário JS precisa acertar cada um desses detalhes, sempre. test262 é o padrão de “correto”; passar nele em 100 % significa que um programa JS executado em V8 produz uma saída idêntica byte a byte em Phasis (exceto pelas APIs exclusivas do navegador).
