
# Suderinamumas

Phasis tikrinamas pagal tris nepriklausomus etalonus:

1. **test262** — oficialus TC39 ECMAScript atitikties testų rinkinys. **100 %** prisegtos saugykloje versijos testų.
2. **Web Platform Tests** — oficialus WHATWG / W3C rinkinys, skirtas ne ECMAScript žiniatinklio API (fetch, XHR, WebSocket, Streams, Headers, Blob, koduotė, URL, structured-clone, abort, hr-time, atob, crypto). **100 %** importuoto testų rinkinio.
3. **Populiarios bibliotekos** — 204 plačiai naudojamų npm paketų (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) vykdomi taip pat kaip Node.js, iki paskutinio baito.

## Palyginimas su kitais varikliais

| Variklis | test262 | Pastabos |
|---|---:|---|
| **Phasis** | **100 %** | Grynas PHP. Palaiko ES2024+. |
| V8 (Node, Chrome) | 99.8 % | Etaloninis C++ variklis. |
| SpiderMonkey (Firefox) | 99.6 % | Etaloninis C++ variklis. |
| JavaScriptCore (Safari) | 99.4 % | Etaloninis C++ variklis. |
| QuickJS | ~97 % | Lengvas C kalba įterpiamas variklis. |
| Hermes (React Native) | ~95 % | Įterpiamas variklis, optimizuotas mobiliesiems įrenginiams. |

Skaičiai iš [test262.fyi](https://test262.fyi). Phasis yra aukščiausio lygio grupėje kartu su gamybinėmis naršyklių realizacijomis.

## Puslapiai

- **[test262 aprėptis](https://phasis.inline0.dev/lt/docs/compatibility/test262)** — kas tikrinama, kaip veikia testų rinkinys ir kodėl svarbu 100%.
- **[Žiniatinklio API (WPT)](https://phasis.inline0.dev/lt/docs/compatibility/web-apis)** — Web Platform Pack ir Fetch Pack: URL, koduotė, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams, taip pat crypto, WebSocket ir XMLHttpRequest.
- **[Srautai](https://phasis.inline0.dev/lt/docs/compatibility/streams)** — visas WHATWG Streams standartas: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, eilių strategijos, asinchroninis iteravimas.
- **[Populiarūs paketai](https://phasis.inline0.dev/lt/docs/compatibility/popular-packages)** — CI tikrinama baitų lygybė su Node.js, skirta 204 npm paketų analizavimui, šablonams, validavimui, datoms ir laikui, matematikai, maišos skaičiavimui, paieškai ir skirtumams, spalvoms, URL apdorojimui ir kitoms sritims.
- **[Specifikacijos aprėptis](https://phasis.inline0.dev/lt/docs/compatibility/spec-surface)** — kiekviena ECMAScript įtaisytoji priemonė, sintaksės funkcija ir standartinės bibliotekos objektas, kurį pateikia Phasis.
- **[Žinomi apribojimai](https://phasis.inline0.dev/lt/docs/compatibility/limitations)** — sritys, kuriose Phasis sąmoningai skiriasi nuo V8: našumo riba, kelių agentų lygiagretumas, Wasm, tik naršyklėse veikiančios žiniatinklio API.

## Kaip atliekami matavimai

- **test262** — `bin/test262` testų rinkinį vykdo vietoje. Visa matrica vykdoma `compat-matrix.yml` darbo eigoje, kuri paleidžiama rankiniu būdu, o ne su kiekvienu pakeitimu; sėkmingai ją įvykdžius, momentinė kopija įrašoma į [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md), kur nurodoma, kada ji sukurta ir su kuriuo pakeitimu. Testų rinkinio versija yra ta, kurią nurodo `test262` git submodulis.
- **Web Platform Tests** — `bin/wpt` vykdo importuotus testus. `wpt.yml` darbo eiga juos vykdo pakeitus `main` arba pateikus užklausą sujungti pakeitimus, jei pakeisti `src/`, testai arba Composer failai.
- **Populiarios bibliotekos** — `composer test` vykdo PHPUnit, įskaitant populiarių bibliotekų baitų lygybės testų rinkinį, esantį `tests/Popular/`. `popular.yml` darbo eiga vykdo jį taikydama tą patį kelių filtrą ir taip pat iš naujo sukuria kiekvieną etaloną naudojant tikrą Node, kad pasenęs etalonas būtų aptiktas atnaujinus vendorizuotą biblioteką.

Dėl WPT arba populiaraus paketo regresijos nepavyksta ją sukėlęs pakeitimų sujungimo prašymas. Dėl test262 regresijos problema paaiškėja kitą kartą paleidus matricą.
