
# test262 kapsamı

[test262](https://github.com/tc39/test262), TC39 tarafından sürdürülen resmi uygunluk test paketidir ve JavaScript altyapılarını karşılaştırmanın standart yoludur.

Phasis, her kategoride **paketin tamamını 100 % oranında** geçer — dil semantiği, standart kütüphane, `Intl`, `annexB` eski web özellikleri, kuluçkadaki testlerin `staging` dizini ve test düzeneğinin kendi testleri. Özellik bayrağı atlatması, ana makine boşluğu izin listesi girdisi veya parça başına istisna yoktur.

Test paketi sabitlenmiştir: `test262` git alt modülü, Phasis'ın hangi revizyona göre ölçüldüğünü belirler ve yeni üst kaynak testleri yalnızca alt modül güncellendiğinde hesaba katılır. [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md) içindeki tüm test paketi anlık görüntüsü, her gönderimde değil elle başlatılan `compat-matrix.yml` iş akışıyla yeniden oluşturulur; `COMPAT.md`, anlık görüntünün ne zaman alındığını ve hangi işleme göre alındığını kaydeder.

Karşılaştırma için, [test262.fyi](https://test262.fyi) aynı test paketini tüm üretim JS altyapılarında izler:

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

Bu altyapıların her birinde küçük bir uyumsuzluk payı kalır (yeni eklenen öneriler, geliştirilmekte olan nadir uç durumlar). Phasis, tek amaca odaklı ve uygunluğu önceleyen bir uygulama olduğu için bu farkı kapatır.

## Yerel olarak çalıştırma

Çalıştırıcı, `test262` alt modülünü ve deponun test sınıflarını gerektirir; bunların ikisi de Composer paketinde bulunmadığından bir kopyadan çalıştırın:

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

Yakın tarihli bir Mac'te tüm çalıştırma yaklaşık 20 dakika sürer; CI matrisi işleri paralel parçalara böler ve tek haneli dakikalarda tamamlar.

Hata ayıklarken yalnızca bir kategoriyi çalıştırmak için:

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

Tüm bayrakların listesi için [CLI başvuru kaynağı](https://phasis.inline0.dev/tr/docs/cli#bin-test262) bölümüne bakın.

## Bunun önemi

JavaScript'ın incelikli semantiği vardır — `NaN !== NaN`, `-0 === 0`, `[1] + 1 === "11"`, özelliklerin numaralandırılma sırasının tam olarak nasıl olduğu ve Promise mikro görevlerinin zamanlaması. Kullanıcı kodunu JS çalıştıran bir kütüphanenin bunların her birini her seferinde doğru ele alması gerekir. "Doğru" ölçütü test262'dır; bunu 100 % oranında geçmek, V8 üzerinde çalışan bir JS programının, tarayıcıya özgü API'ler hariç, Phasis üzerinde bayt düzeyinde aynı çıktıyı üretmesi demektir.
