Test
V8 inclut un cadre de test qui vous permet de tester le moteur. Ce cadre vous permet d’exécuter nos propres suites de tests incluses avec le code source et d’autres, comme la suite de tests Test262.
Exécuter les tests V8
En utilisant gm, vous pouvez simplement ajouter .check à n’importe quel objectif de compilation pour exécuter les tests, par exemple :
gm x64.release.check
gm x64.optdebug.check # recommandé : raisonnablement rapide, avec DCHECKs.
gm ia32.check
gm release.check
gm check # compile et teste toutes les plateformes par défaut
gm compile automatiquement les cibles nécessaires avant d’exécuter les tests. Vous pouvez également limiter les tests à exécuter :
gm x64.release test262
gm x64.debug mjsunit/regress/regress-123
Si vous avez déjà compilé V8, vous pouvez exécuter les tests manuellement :
tools/run-tests.py --outdir=out/ia32.release
Encore une fois, vous pouvez spécifier les tests à exécuter :
tools/run-tests.py --outdir=ia32.release cctest/test-heap/SymbolTable/* mjsunit/delete-in-eval
Exécutez le script avec --help pour découvrir ses autres options.
Exécuter plus de tests
L’ensemble par défaut des tests exécutés n’inclut pas tous les tests disponibles. Vous pouvez spécifier des suites de tests supplémentaires sur la ligne de commande de gm ou run-tests.py :
benchmarks(juste pour vérifier le fonctionnement ; ne produit pas de résultats de benchmark !)mozillatest262webkit
Exécuter des microbenchmarks
Sous test/js-perf-test, nous avons des microbenchmarks pour suivre les performances des fonctionnalités. Il existe un exécuteur spécial pour ceux-ci : tools/run_perf.py. Exécutez-les comme suit :
tools/run_perf.py --arch x64 --binary-override-path out/x64.release/d8 test/js-perf-test/JSTests.json
Si vous ne voulez pas exécuter tous les JSTests, vous pouvez fournir un argument filter :
tools/run_perf.py --arch x64 --binary-override-path out/x64.release/d8 --filter JSTests/TypedArrays test/js-perf-test/JSTests.json
Mettre à jour les attentes des tests inspecteurs
Après avoir mis à jour votre test, vous devrez peut-être régénérer le fichier des attentes associé. Vous pouvez y parvenir en exécutant :
tools/run-tests.py --regenerate-expected-files --outdir=ia32.release inspector/debugger/set-instrumentation-breakpoint
Cela peut également être utile si vous souhaitez savoir comment la sortie de votre test a changé. Régénérez d’abord le fichier attendu en utilisant la commande ci-dessus, puis consultez la différence avec :
git diff
Mettre à jour les attentes du bytecode (rebaselining)
Parfois, les attentes du bytecode peuvent changer, entraînant des échecs cctest. Pour mettre à jour les fichiers golden, compilez test/cctest/generate-bytecode-expectations en exécutant :
gm x64.release generate-bytecode-expectations
…puis mettez à jour l’ensemble par défaut des entrées en transmettant l’option --rebaseline au binaire généré :
out/x64.release/generate-bytecode-expectations --rebaseline
Les fichiers golden mis à jour sont maintenant disponibles dans test/cctest/interpreter/bytecode_expectations/.
Ajouter un nouveau test d’attentes de bytecode
-
Ajoutez un nouveau cas de test à
cctest/interpreter/test-bytecode-generator.ccet spécifiez un fichier golden avec le même nom de test. -
Compilez
generate-bytecode-expectations:gm x64.release generate-bytecode-expectations -
Exécutez
out/x64.release/generate-bytecode-expectations --raw-js testcase.js --output=test/cctest/interpreter/bytecode-expectations/testname.goldenoù
testcase.jscontient le cas de test JavaScript ajouté àtest-bytecode-generator.ccettestnameest le nom du test défini danstest-bytecode-generator.cc.