본문으로 건너뛰기

test262 적합성 범위

test262는 TC39가 관리하는 공식 적합성 테스트 모음이며 JavaScript 엔진을 비교하는 표준적인 방법입니다.

Phasis는 언어 의미론, 표준 라이브러리, Intl, annexB의 레거시 웹 기능, 인큐베이팅 테스트가 있는 staging 디렉터리, 테스트 하네스 자체 테스트 등 모든 범주에서 전체 테스트 모음의 100 %를 통과합니다. 기능 플래그 우회, 호스트 차이 허용 목록, 샤드별 제외 항목은 없습니다.

테스트 모음은 특정 버전에 고정되어 있습니다. test262 Git 서브모듈이 Phasis를 측정하는 리비전으로 고정하며, 새 업스트림 테스트는 서브모듈을 갱신한 뒤에만 집계됩니다. COMPAT.md의 전체 테스트 스냅샷은 compat-matrix.yml 워크플로를 통해 다시 생성됩니다. 이 워크플로는 푸시마다 실행되는 것이 아니라 수동으로 시작하며, COMPAT.md에는 스냅샷 생성 시점과 기준 커밋이 기록됩니다.

비교를 위해 test262.fyi는 모든 프로덕션 JS 엔진에서 같은 테스트 모음을 실행합니다.

엔진 적합성
V8 (Chrome / Node) 99.8 %
SpiderMonkey (Firefox) 99.6 %
JavaScriptCore (Safari) 99.4 %
QuickJS ~97 %
Hermes (React Native) ~95 %
Phasis 100 %

각 엔진에는 소규모의 잔여 차이가 있습니다(최근 추가된 제안과 개발 중인 드문 경계 사례). Phasis는 적합성에 초점을 둔 단일 목적 구현이므로 이 차이를 해소합니다.

로컬에서 실행하기

실행기에는 test262 서브모듈과 저장소의 테스트 클래스가 필요합니다. 둘 다 Composer 패키지에 포함되어 있지 않으므로 저장소를 복제해 실행하세요.

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

최신 Mac에서 전체 실행은 약 20분 걸립니다. CI 매트릭스는 여러 샤드에서 병렬 실행해 10분 이내로 완료됩니다.

디버깅 중 특정 범주만 실행하려면 다음을 사용하세요.

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

전체 플래그 목록은 CLI 참조를 확인하세요.

중요한 이유

JavaScript에는 미묘한 의미론이 있습니다. NaN !== NaN, -0 === 0, [1] + 1 === "11", 속성 열거 순서의 정확성, Promise 마이크로태스크의 실행 시점 등이 그렇습니다. JS 사용자 코드를 실행하는 라이브러리는 이 모든 요소를 매번 올바르게 처리해야 합니다. test262는 "올바름"의 기준입니다. 100 % 통과한다는 것은 V8에서 실행되는 JS 프로그램이 브라우저 전용 API를 제외하면 Phasis에서도 바이트 단위로 동일한 출력을 생성한다는 뜻입니다.