テスト

V8 にはエンジンをテストするためのテストフレームワークが含まれています。このフレームワークを使うと、ソースコードに含まれている自前のテストスイートと、Test262 テストスイート などのその他のテストを両方実行できます。

V8 テストの実行 #

gmを使用して、任意のビルドターゲットに単に .check を追加するだけで、テストを実行できます。例:

gm x64.release.check
gm x64.optdebug.check # recommended: reasonably fast, with DCHECKs.
gm ia32.check
gm release.check
gm check # builds and tests all default platforms

gm はテストを実行する前に必要なターゲットを自動的にビルドします。実行するテストを制限することもできます

gm x64.release test262
gm x64.debug mjsunit/regress/regress-123

V8 をすでにビルドしている場合は、手動でテストを実行できます

tools/run-tests.py --outdir=out/ia32.release

ここでも、実行するテストを指定できます

tools/run-tests.py --outdir=ia32.release cctest/test-heap/SymbolTable/* mjsunit/delete-in-eval

--help を指定してスクリプトを実行し、その他のオプションを確認しましょう。

さらに多くのテストの実行 #

実行するテストのデフォルトセットには、使用可能なテストがすべて含まれているわけではありません。gm または run-tests.py のコマンドラインで追加のテストスイートを指定できます

マイクロベンチマークの実行 #

test/js-perf-test には、フィーチャのパフォーマンスを追跡するためにマイクロベンチマークを用意しています。これらを実行するための特別なランナー、tools/run_perf.py があります。次のように実行します

tools/run_perf.py --arch x64 --binary-override-path out/x64.release/d8 test/js-perf-test/JSTests.json

すべての JSTests を実行したくない場合は、filter 引数を使用できます

tools/run_perf.py --arch x64 --binary-override-path out/x64.release/d8 --filter JSTests/TypedArrays test/js-perf-test/JSTests.json

インスペクタのテスト期待値の更新 #

テストを更新した後は、そのテストの期待値ファイルを再生成する必要がある場合があります。これは次を実行して実現できます

tools/run-tests.py --regenerate-expected-files --outdir=ia32.release inspector/debugger/set-instrumentation-breakpoint

テストの出力がどのように変更されたかを調べたい場合にも役立ちます。まず上記のコマンドを使用して期待されるファイルを再生成し、次を使用して diff を確認します

git diff

バイトコード期待値の更新 (リベースライン) #

場合によっては、バイトコードの期待値が変更され、その結果 cctest で失敗することがあります。ゴールデンファイルを更新するには、test/cctest/generate-bytecode-expectations を次のように実行してビルドします

gm x64.release generate-bytecode-expectations

…そして生成されたバイナリに --rebaseline フラグを渡して、デフォルトの入力セットを更新します

out/x64.release/generate-bytecode-expectations --rebaseline

更新されたゴールデンは、test/cctest/interpreter/bytecode_expectations/ で利用できます。

新しいバイトコード期待値テストの追加 #

  1. cctest/interpreter/test-bytecode-generator.ccに新しいテストケースを追加し、そのテストと同じ名前のゴールデンファイルで指定します。

  2. generate-bytecode-expectationsをビルドします。

    gm x64.release generate-bytecode-expectations
  3. を実行します。

    out/x64.release/generate-bytecode-expectations --raw-js testcase.js --output=test/cctest/interpreter/bytecode-expectations/testname.golden

    ここで、testcase.jsにはtest-bytecode-generator.ccに追加されたJavaScriptテストケースが含まれており、testnametest-bytecode-generator.ccで定義されたテストの名前です。