Cakupan test262
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 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 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:
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:
./bin/test262 --category built-ins/Array
./bin/test262 --category language/expressions/yield --failures
Lihat referensi CLI 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).