
# test262pokritost

[test262](https://github.com/tc39/test262) je uradni nabor testov skladnosti, ki ga vzdržuje TC39, in kanonični način za primerjavo mehanizmov JavaScript.

Phasis opravi **celoten nabor pri 100 %** v vseh kategorijah — semantika jezika, standardna knjižnica, `Intl`, `annexB` zastarele spletne funkcije, imenik `staging` z nastajajočimi testi in samopreizkusi testnega ogrodja. Brez obvozov z zastavicami funkcij, seznamov blokiranih vrzeli gostitelja ali izključitev posameznih razdelkov.

Nabor testov ima določeno revizijo: podmodul `test262` git določa revizijo, glede na katero se meri Phasis, novi nadaljnji testi pa štejejo šele po posodobitvi podmodula. Posnetek celotnega nabora v [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md) znova ustvari potek dela `compat-matrix.yml`, ki se zažene ročno, ne ob vsakem potisku; `COMPAT.md` beleži, kdaj je bil posnetek narejen in glede na kateri commit.

Za primerjavo: [test262.fyi](https://test262.fyi) spremlja isti nabor testov za vsak produkcijski mehanizem JS:

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

Vsak od teh mehanizmov ima še manjšo vrzel (novejši predlogi, redki robni primeri v razvoju). Phasis jo odpravi, ker je implementacija namensko zasnovana z mislijo na skladnost.

## Lokalni zagon

Zaganjalnik potrebuje podmodul `test262` in testne razrede iz repozitorija, ki niso vključeni v paket Composer, zato ga zaženite iz klona:

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

Celoten zagon na novejšem Macu traja približno 20 minut; matrika CI razdeli delo na dele, ki se izvajajo vzporedno, in ga dokonča v nekaj minutah.

Med razhroščevanjem zaženite samo eno kategorijo:

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

Celoten nabor zastavic najdete v [referenci CLI](https://phasis.inline0.dev/sl/docs/cli#bin-test262).

## Zakaj je to pomembno

JavaScript ima subtilno semantiko — `NaN !== NaN`, `-0 === 0`, `[1] + 1 === "11"`, natančno zaporedje naštevanja lastnosti in čas izvajanja mikroopravil Promise. Knjižnica, ki izvaja uporabniško kodo JS, mora vse to vsakič pravilno obravnavati. Merilo pravilnosti je test262; pri 100 % uspešnosti program JS, ki teče v V8, ustvari bajtno enak izhod v Phasis (razen API-jev, ki so na voljo samo v brskalnikih).
