
# Yhteensopivuus

Phasis on tarkistettu kolmen toisistaan riippumattoman vertailukohdan avulla:

1. **test262** — virallinen TC39:n ECMAScript-yhteensopivuustestipaketti. 100 % arkistoon kiinnitetystä versiosta.
2. **Web Platform Tests** — virallinen WHATWG:n / W3C:n testipaketti muille kuin ECMAScriptin Web-rajapinnoille (fetch, XHR, WebSocket, Streams, Headers, Blob, merkistökoodaus, URL, structured-clone, abort, hr-time, atob, crypto). 100 % tuodusta aineistosta.
3. **Suositut kirjastot** — 204 laajalti käytettyä npm-pakettia (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) suoritetaan tavu tavulta samalla tavalla kuin ohjelmassa Node.js.

## Verrattuna muihin moottoreihin

| Moottori | test262 | Huomautuksia |
|---|---:|---|
| **Phasis** | **100 %** | Puhdas PHP. Tukee ES2024+:aa. |
| V8 (Node, Chrome) | 99.8 % | C++-viitemoottori. |
| SpiderMonkey (Firefox) | 99.6 % | C++-viitemoottori. |
| JavaScriptCore (Safari) | 99.4 % | C++-viitemoottori. |
| QuickJS | ~97 % | Kevyt C:llä toteutettu moottori, jonka voi upottaa ohjelmaan. |
| Hermes (React Native) | ~95 % | Upotettava mobiililaitteille optimoitu moottori. |

Luvut lähteestä [test262.fyi](https://test262.fyi). Phasis kuuluu parhaiden joukkoon tuotantokäytössä olevien selainmoottorien rinnalla.

## Sivut

- **[test262-kattavuus](https://phasis.inline0.dev/fi/docs/compatibility/test262)** — mitä testataan, miten testisarja suoritetaan ja miksi 100% on tärkeä.
- **[Web API:t (WPT)](https://phasis.inline0.dev/fi/docs/compatibility/web-apis)** — Web Platform Pack ja Fetch Pack: URL, koodaus, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams sekä crypto, WebSocket ja XMLHttpRequest.
- **[Streams](https://phasis.inline0.dev/fi/docs/compatibility/streams)** — koko WHATWG Streams Standard: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, jonotusstrategiat ja asynkroninen iterointi.
- **[Suositut paketit](https://phasis.inline0.dev/fi/docs/compatibility/popular-packages)** — CI:ssä porttiehdolla tehtävä tavuntarkka vertailu Node.js-työkalulla 204 npm paketille jäsennyksen, mallipohjien, validoinnin, päivämäärien ja ajan, matematiikan, hajautuksen, haun ja erotusten, värien, URL-käsittelyn ja muun osalta.
- **[Teknisten tietojen kattavuus](https://phasis.inline0.dev/fi/docs/compatibility/spec-surface)** — kaikki ECMAScriptin sisäänrakennetut ominaisuudet, syntaksin piirteet ja standardikirjaston objektit, jotka Phasis sisältää.
- **[Tunnetut rajoitukset](https://phasis.inline0.dev/fi/docs/compatibility/limitations)** — missä Phasis poikkeaa tarkoituksella V8: suorituskyvyn yläraja, rinnakkaisuus usean agentin kesken, Wasm ja vain selaimessa käytettävät Web API:t.

## Miten se mitataan

- **test262** — `bin/test262` suorittaa testisarjan paikallisesti. Koko matriisi suoritetaan `compat-matrix.yml`-työnkulussa, joka käynnistetään käsin eikä jokaisen pushin yhteydessä; onnistunut suoritus tallentaa tilannekuvansa tiedostoon [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md), johon merkitään, milloin se otettiin ja mihin commit-tunnukseen se perustuu. Testisarjan versio on `test262`-git-alimoduulin lukitsema versio.
- **Web Platform Tests** — `bin/wpt` suorittaa tuodut testitapaukset. `wpt.yml`-työnkulku suorittaa ne pushien yhteydessä haaraan `main` sekä pull requesteissa, joissa muutetaan `src/`-tiedostoja, testitapauksia tai Composer-tiedostoja.
- **Suositut kirjastot** — `composer test` suorittaa PHPUnit-testit, mukaan lukien suosittujen kirjastojen tavuntarkan vertailun testisarjassa `tests/Popular/`. `popular.yml`-työnkulku suorittaa testit samojen polkusuodattimien perusteella ja luo lisäksi kaikki vertailutulokset uudelleen aidolla Node-ympäristöllä, jotta vanhentunut vertailutulos havaitaan vendoroidun kirjaston päivityksen yhteydessä.

WPT:n tai suositun paketin regressio hylkää sen aiheuttavan pull requestin. test262-regressio tulee näkyviin seuraavalla matriisin suorituskerralla.
