
# Združljivost

Phasis je preverjen s tremi neodvisnimi viri:

1. **test262** — uradna zbirka testov skladnosti TC39 ECMAScript. **100 %** različice, določene v repozitoriju.
2. **Web Platform Tests** — uradna zbirka WHATWG / W3C za spletne API-je, ki niso del ECMAScript (fetch, XHR, WebSocket, Streams, Headers, Blob, kodiranje, URL, structured-clone, abort, hr-time, atob, crypto). **100 %** uvoženega korpusa.
3. **Priljubljene knjižnice** — 204 pogosto uporabljanih paketov npm (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) se izvede z enakimi bajti kot Node.js.

## V primerjavi z drugimi pogoni

| Pogon | test262 | Opombe |
|---|---:|---|
| **Phasis** | **100 %** | Čisti PHP. Cilja na ES2024+. |
| V8 (Node, Chrome) | 99.8 % | Referenčni pogon C++. |
| SpiderMonkey (Firefox) | 99.6 % | Referenčni pogon C++. |
| JavaScriptCore (Safari) | 99.4 % | Referenčni pogon C++. |
| QuickJS | ~97 % | Lahek vgradljiv pogon v jeziku C. |
| Hermes (izvorni React) | ~95 % | Vgradljiv pogon, optimiziran za mobilne naprave. |

Številke iz [test262.fyi](https://test262.fyi). Phasis je v najvišjem razredu skupaj s produkcijskimi brskalniškimi pogoni.

## Strani

- **[test262 pokritost](https://phasis.inline0.dev/sl/docs/compatibility/test262)** — kaj se testira, kako se izvaja zbirka in zakaj je pomembno 100%.
- **[Spletni API-ji (WPT)](https://phasis.inline0.dev/sl/docs/compatibility/web-apis)** — Web Platform Pack in Fetch Pack: URL, kodiranje, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams ter crypto, WebSocket in XMLHttpRequest.
- **[Tokovi](https://phasis.inline0.dev/sl/docs/compatibility/streams)** — celoten standard WHATWG Streams: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, strategije čakalnih vrst, asinhrona iteracija.
- **[Priljubljeni paketi](https://phasis.inline0.dev/sl/docs/compatibility/popular-packages)** — enakost bajtov, preverjena v CI, z Node.js za 204 paketov npm na področjih razčlenjevanja, predlog, preverjanja veljavnosti, datumov in časa, matematike, zgoščevanja, iskanja in primerjanja razlik, barv, obravnave URL ter drugje.
- **[Površina specifikacije](https://phasis.inline0.dev/sl/docs/compatibility/spec-surface)** — vse vgrajene funkcije ECMAScript, sintaktične zmožnosti in objekti standardne knjižnice, ki jih ponuja Phasis.
- **[Znane omejitve](https://phasis.inline0.dev/sl/docs/compatibility/limitations)** — področja, kjer Phasis namerno odstopa od V8: omejitve zmogljivosti, sočasnost več agentov, Wasm in spletni API-ji, ki so na voljo samo v brskalniku.

## Kako se meri

- **test262** — `bin/test262` zažene zbirko lokalno. Celotna matrika se izvaja v poteku dela `compat-matrix.yml`, ki se zažene ročno in ne ob vsakem potisku; uspešen zagon shrani posnetek v [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md), kjer je zabeleženo, kdaj je bil posnet in za katero objavo. Različica zbirke je določena s podmodulom `test262` git.
- **Web Platform Tests** — `bin/wpt` zažene uvožene preizkusne primere. Potek dela `wpt.yml` jih zažene ob potiskih v `main` in zahtevah za vključitev sprememb, ki spremenijo `src/`, preizkusne primere ali datoteke Composer.
- **Priljubljene knjižnice** — `composer test` zažene PHPUnit, vključno z zbirko testov enakosti bajtov priljubljenih knjižnic pod `tests/Popular/`. Potek dela `popular.yml` jih zažene z enakim filtrom poti in znova ustvari tudi vse referenčne rezultate v pravem Node, zato se zastarel referenčni rezultat zazna ob posodobitvi vključene knjižnice.

Regresija v WPT ali priljubljenem paketu povzroči neuspeh zahteve za vključitev sprememb, ki jo je uvedla. Regresija test262 se pokaže ob naslednjem zagonu matrike.
