Testen
V8 umfasst ein Testframework, mit dem Sie die Engine testen können. Das Framework ermöglicht es Ihnen, sowohl unsere eigenen Testsuiten, die mit dem Quellcode enthalten sind, als auch andere wie die Test262-Test-Suite auszuführen.
V8-Tests ausführen
Verwendung von gm
, Sie können einfach .check
an ein beliebiges Build-Ziel anhängen, um Tests dafür auszuführen, z. B.
gm x64.release.check
gm x64.optdebug.check # empfohlen: recht schnell, mit DCHECKs.
gm ia32.check
gm release.check
gm check # baut und testet alle Standardplattformen
gm
baut automatisch alle erforderlichen Ziele, bevor die Tests ausgeführt werden. Sie können die auszuführenden Tests auch einschränken:
gm x64.release test262
gm x64.debug mjsunit/regress/regress-123
Wenn Sie V8 bereits erstellt haben, können Sie die Tests manuell ausführen:
tools/run-tests.py --outdir=out/ia32.release
Wieder können Sie angeben, welche Tests ausgeführt werden sollen:
tools/run-tests.py --outdir=ia32.release cctest/test-heap/SymbolTable/* mjsunit/delete-in-eval
Führen Sie das Skript mit --help
aus, um mehr über die anderen Optionen zu erfahren.
Weitere Tests ausführen
Der Standardsatz von Tests, die ausgeführt werden sollen, umfasst nicht alle verfügbaren Tests. Sie können zusätzliche Testsuiten in der Befehlszeile von entweder gm
oder run-tests.py
angeben:
benchmarks
(nur für Korrektheit; liefert keine Benchmark-Ergebnisse!)mozilla
test262
webkit
Microbenchmarks ausführen
Unter test/js-perf-test
verfügen wir über Microbenchmarks, um die Leistungsfähigkeit von Funktionen zu verfolgen. Es gibt einen speziellen Runner dafür: tools/run_perf.py
. Führen Sie sie aus wie:
tools/run_perf.py --arch x64 --binary-override-path out/x64.release/d8 test/js-perf-test/JSTests.json
Wenn Sie nicht alle JSTests
ausführen möchten, können Sie ein filter
-Argument bereitstellen:
tools/run_perf.py --arch x64 --binary-override-path out/x64.release/d8 --filter JSTests/TypedArrays test/js-perf-test/JSTests.json
Aktualisieren der Inspektor-Test-Erwartungen
Nachdem Sie Ihren Test aktualisiert haben, müssen Sie möglicherweise die Erwartungsdatei dafür regenerieren. Sie können dies erreichen, indem Sie Folgendes ausführen:
tools/run-tests.py --regenerate-expected-files --outdir=ia32.release inspector/debugger/set-instrumentation-breakpoint
Dies kann auch nützlich sein, wenn Sie herausfinden möchten, wie sich die Ausgabe Ihres Tests geändert hat. Generieren Sie zunächst die erwartete Datei mit dem obigen Befehl neu und überprüfen Sie dann den Unterschied mit:
git diff
Aktualisieren der Bytecode-Erwartungen (Rebaselining)
Manchmal können sich die Bytecode-Erwartungen ändern, was zu cctest
-Fehlern führt. Um die Gold-Dateien zu aktualisieren, erstellen Sie test/cctest/generate-bytecode-expectations
, indem Sie Folgendes ausführen:
gm x64.release generate-bytecode-expectations
…und dann den Standardsatz von Eingaben aktualisieren, indem Sie die --rebaseline
-Flagge an die generierte Binärdatei übergeben:
out/x64.release/generate-bytecode-expectations --rebaseline
Die aktualisierten Goldens sind jetzt verfügbar in test/cctest/interpreter/bytecode_expectations/
.
Hinzufügen eines neuen Bytecode-Erwartungstests
-
Fügen Sie einen neuen Testfall zu
cctest/interpreter/test-bytecode-generator.cc
hinzu und geben Sie eine Gold-Datei mit demselben Testnamen an. -
Erstellen Sie
generate-bytecode-expectations
:gm x64.release generate-bytecode-expectations
-
Führen Sie aus
out/x64.release/generate-bytecode-expectations --raw-js testcase.js --output=test/cctest/interpreter/bytecode-expectations/testname.golden
wobei
testcase.js
das JavaScript-Testfall enthält, das zutest-bytecode-generator.cc
hinzugefügt wurde, undtestname
der Name des Tests ist, der intest-bytecode-generator.cc
definiert wurde.