
# Cakupan test262

[test262](https://github.com/tc39/test262) adalah suite uji kesesuaian resmi yang dikelola TC39 dan cara baku untuk membandingkan mesin JavaScript.

Phasis lulus **seluruh rangkaian dengan 100 %** di setiap kategori—semantik bahasa, pustaka standar, `Intl`, fitur web lama `annexB`, direktori `staging` berisi pengujian yang masih dikembangkan, dan pengujian mandiri harness. Tidak ada bypass tanda fitur, entri daftar blokir kesenjangan host, atau pengecualian per shard.

Suite ini dipatok: submodul git `test262` menetapkan revisi yang menjadi tolok ukur Phasis, dan tes upstream baru dihitung hanya setelah submodul diperbarui. Snapshot seluruh suite di [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md) dibuat ulang oleh workflow `compat-matrix.yml`, yang dijalankan secara manual, bukan pada setiap push; `COMPAT.md` mencatat waktu snapshot diambil dan commit yang menjadi acuannya.

Sebagai perbandingan, [test262.fyi](https://test262.fyi) melacak suite yang sama terhadap setiap mesin JS produksi:

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

Setiap mesin tersebut masih memiliki sedikit celah (proposal yang baru diterapkan, kasus tepi langka yang masih dikerjakan). Phasis menutup celah itu karena dirancang khusus dengan prioritas pada kesesuaian.

## Menjalankannya secara lokal

Runner memerlukan submodul `test262` dan kelas tes repositori, yang keduanya tidak disertakan dalam paket Composer, jadi jalankan dari hasil clone:

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

Proses lengkap pada Mac keluaran baru memerlukan sekitar 20 menit; shard matriks CI berjalan paralel dan selesai dalam hitungan menit.

Untuk menjalankan satu kategori saja saat men-debug:

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

Lihat [referensi CLI](https://phasis.inline0.dev/id/docs/cli#bin-test262) untuk semua flag.

## Mengapa ini penting

JavaScript memiliki semantik yang rumit — `NaN !== NaN`, `-0 === 0`, `[1] + 1 === "11"`, urutan enumerasi properti yang tepat, waktu microtask Promise. Pustaka yang menjalankan kode pengguna JS harus menangani semuanya dengan benar setiap saat. test262 adalah tolok ukur untuk "benar"; lulus pada 100 % berarti program JS yang berjalan di V8 menghasilkan keluaran identik byte di Phasis (kecuali API khusus browser).
