
# Saderība

Phasis pārbauda, salīdzinot rezultātus ar trim neatkarīgiem etaloniem:

1. **test262** — oficiālais TC39 ECMAScript atbilstības testu komplekts. Pārbaudīti **100 %** repozitorijā fiksētās versijas testi.
2. **Web Platform Tests** — oficiālais WHATWG / W3C komplekts tīmekļa API ārpus ECMAScript (fetch, XHR, WebSocket, Streams, Headers, Blob, kodējums, URL, structured-clone, abort, hr-time, atob, crypto). Importētajā testu kopumā izturēti **100 %**.
3. **Populārās bibliotēkas** — 204 plaši izmantotas npm pakotnes (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) izpildās tā, ka baiti sakrīt ar Node.js.

## Salīdzinājums ar citiem dzinējiem

| Dzinējs | test262 | Piezīmes |
|---|---:|---|
| **Phasis** | **100 %** | Tīrs PHP. Atbalsta ES2024 un jaunākas versijas. |
| V8 (Node, Chrome) | 99.8 % | Atsauces C++ dzinējs. |
| SpiderMonkey (Firefox) | 99.6 % | Atsauces C++ dzinējs. |
| JavaScriptCore (Safari) | 99.4 % | Atsauces C++ dzinējs. |
| QuickJS | ~97 % | Viegls iegulšanai paredzēts dzinējs C valodā. |
| Hermes (React Native) | ~95 % | Iegulšanai paredzēts dzinējs, optimizēts mobilajām ierīcēm. |

Skaitļi no [test262.fyi](https://test262.fyi). Phasis ir augstākajā līmenī līdzās pārlūkprogrammu dzinējiem, ko izmanto produkcijā.

## Lapas

- **[test262 pārklājums](https://phasis.inline0.dev/lv/docs/compatibility/test262)** — kas tiek testēts, kā darbojas testu kopa un kāpēc svarīgi ir 100%.
- **[Tīmekļa API (WPT)](https://phasis.inline0.dev/lv/docs/compatibility/web-apis)** — Web Platform Pack un Fetch Pack: URL, kodējums, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams, kā arī crypto, WebSocket un XMLHttpRequest.
- **[Streams](https://phasis.inline0.dev/lv/docs/compatibility/streams)** — viss WHATWG Streams standarts: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, ievietošanas rindas stratēģijas un asinhronā iterācija.
- **[Populāras pakotnes](https://phasis.inline0.dev/lv/docs/compatibility/popular-packages)** — CI kontrolēta baitu līmeņa vienādības pārbaude ar Node.js, kas aptver 204 npm pakotnes parsēšanai, veidņu apstrādei, validācijai, datumiem un laikam, matemātikai, jaukšanai, meklēšanai un atšķirību noteikšanai, krāsām, URL apstrādei un citām jomām.
- **[Specifikāciju tvērums](https://phasis.inline0.dev/lv/docs/compatibility/spec-surface)** — katrs ECMAScript iebūvētais elements, sintakses līdzeklis un standarta bibliotēkas objekts, ko piegādā Phasis.
- **[Zināmie ierobežojumi](https://phasis.inline0.dev/lv/docs/compatibility/limitations)** — kur Phasis apzināti atšķiras no V8: veiktspējas griesti, vairāku aģentu vienlaicīga darbība, Wasm un tikai pārlūkprogrammā pieejamie tīmekļa API.

## Kā tiek mērīts

- **test262** — `bin/test262` palaiž testu kopu lokāli. Pilnā testu matrica tiek izpildīta `compat-matrix.yml` darbplūsmā, kas tiek sākta manuāli, nevis katrā koda nosūtīšanas reizē; veiksmīgas izpildes laikā tās momentuzņēmums tiek pievienots [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md), kurā norādīts, kad tas uzņemts un ar kuru komitu. Testu kopas versija ir norādīta `test262` git apakšmodulī.
- **Web Platform Tests** — `bin/wpt` palaiž importētos testdatus. `wpt.yml` darbplūsma tos palaiž, kad tiek nosūtīts kods uz `main`, kā arī izveidoti izmaiņu pieprasījumi, kas skar `src/`, testdatus vai Composer failus.
- **Populārās bibliotēkas** — `composer test` palaiž PHPUnit, tostarp populāro bibliotēku baitu identiskuma testu kopu, kas atrodas mapē `tests/Popular/`. `popular.yml` darbplūsma to palaiž, izmantojot to pašu ceļu filtru, kā arī no jauna ģenerē visas etalonvērtības, izmantojot īstu Node, lai atklātu novecojušas etalonvērtības, kad tiek atjaunināta iekļautā bibliotēka.

WPT vai populāras pakotnes regresija aptur izmaiņu pieprasījumu, kas to izraisījis. test262 regresija atklājas nākamajā matricas izpildes reizē.
