- JDK 23対応GraalVM (最新)
- JDK 24対応GraalVM (早期アクセス)
- JDK 21対応GraalVM
- JDK 17対応GraalVM
- アーカイブ
- 開発ビルド
- Truffle言語実装フレームワーク
- Truffle ブランチ計測
- 動的オブジェクトモデル
- 静的オブジェクトモデル
- インタプリタコードのホスト最適化
- Truffleの関数インライン化手法
- Truffleインタプリタのプロファイリング
- Truffle Interop 2.0
- 言語実装
- Truffleを用いた新しい言語の実装
- Truffle言語と計測ツールのJavaモジュールへの移行
- Truffleネイティブ関数インターフェース
- Truffleインタプリタの最適化
- オプション
- On-Stack Replacement
- Truffle文字列ガイド
- 特殊化ヒストグラム
- DSL特殊化のテスト
- Polyglot APIベースのTCK
- Truffleのコンパイルキューへのアプローチ
- Truffleライブラリガイド
- Truffle AOT概要
- Truffle AOTコンパイル
- 補助エンジンキャッシング
- Truffle言語セーフポイントチュートリアル
- 単態化
- 分割アルゴリズム
- 単態化のユースケース
- ポリモーフィック特殊化のランタイムへの報告
Polyglot APIベースのテスト互換性キット
テスト互換性キット(TCK)は、TruffleLanguageの相互運用性と計測を検証するテストの集合です。TCKは`org.graalvm.polyglot` APIに基づいています。
言語の追加 #
言語をテストするには、LanguageProviderを実装してください。`LanguageProvider`は`java.util.ServiceLoader`を使用してロードされるため、`META-INF/services/org.graalvm.polyglot.tck.LanguageProvider`ファイルに実装を登録する必要があります。`LanguageProvider`は、言語のデータ型、言語の式(演算子)、および言語の制御フローステートメントを、データ型を返すか演算子(ステートメント)を実行する関数として提供する必要があります。返された関数の合成を可能にするために、Snippet.Builderを使用してパラメータと戻り値の型を割り当てる必要があります。また、`LanguageProvider`は、TCKが計測のテストに使用できる、シンプルながらも代表的なスクリプトを提供する必要があります。
`mx` を使用した TCK テストの実行 #
テストは `mx unitest` を使用して実行されます。テストを実行すると、プライマリスイートと依存スイートのすべての `LanguageProvider` が使用されます。`truffle` スイートは、Java のデータ型と Java の相互運用性をテストするための プロキシ を作成する `java-host` `LanguageProvider` を提供します。
TCKテストのみを実行するには、以下を使用します。
mx unittest com.oracle.truffle.tck.tests
または、単に以下を使用します。
mx tck
TCKテストを特定の言語のテストに制限するには、`tck.language`プロパティを使用します。次の例では、利用可能なすべての言語のデータ型を使用して JavaScript をテストします。
mx tck -Dtck.language=js
データ型を特定の言語に制限するには、`tck.values`プロパティを使用します。次の例では、Java の型を使用して JavaScript をテストします。
mx tck -Dtck.values=java-host -Dtck.language=js
単一のテストを実行するには、完全なテスト名を指定します。たとえば、SimpleLanguage の `+` 演算子を SimpleLanguage の `number` と `big number` でテストするには、以下を使用します。
mx tck 'ExpressionTest#testExpression[sl::+(sl::number, sl::number)]'
GraalVM で TCK テストを実行するには、mx `--java-home` を GraalVM を指すように設定するだけです。
mx --java-home=<path_to_graalvm> tck
出力とエラー出力を無効にするには、`tck.verbose` プロパティを使用します。
mx tck -Dtck.verbose=false
特定のテストの出力とエラー出力のみを無効にするには、`tck.{TestSimpleName}.verbose`プロパティを使用します。
mx tck -Dtck.ErrorTypeTest.verbose=false
1つのテストを除くすべてのテストの出力とエラー出力を無効にすることもできます。
mx tck -Dtck.verbose=false -Dtck.ErrorTypeTest.verbose=true
Apache Maven を使用した TCK テストの実行 #
Apache Maven を使用して Truffle TCK テストを実行できます。まず、言語 TCK プロバイダーを含む Maven モジュール(プロジェクト)を作成します。このモジュールが、テスト対象の言語と TCK テスト `org.graalvm.truffle:truffle-tck-tests` にテスト依存関係を持っていることを確認してください。`org.graalvm.truffle:truffle-tck-tests` アーティファクト内のテストを識別するように `maven-surefire-plugin` を設定します。これは、プロジェクトの pom.xml の
<build>
<plugins>
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.1.2</version>
<configuration>
<dependenciesToScan>
<dependency>org.graalvm.truffle:truffle-tck-tests</dependency>
</dependenciesToScan>
</configuration>
</plugin>
[...]
</plugins>
</build>
TCK 実行に他の言語を含めるには、それらの TCK プロバイダーをテストの依存関係として追加します。たとえば、`org.graalvm.js:js-truffle-tck` を追加すると、テストプロセスに JavaScript が含まれます。SimpleLanguage TCK プロバイダーの pom.xml をテンプレートとして使用して開始できます。ランタイムの最適化をテストするには、`mvn package` を実行する前に、`JAVA_HOME` 環境変数を GraalVM の場所に設定します。
TCK テストのカスタマイズ #
TCK テストを特定の言語のテストに制限するには、`tck.language` プロパティを使用します。次の例では、利用可能なすべての言語のデータ型を使用して JavaScript をテストします。
<build>
<plugins>
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.1.2</version>
<configuration>
<argLine>
-Dtck.language=js
</argLine>
[...]
</configuration>
</plugin>
[...]
</plugins>
</build>
データ型を特定の言語に制限するには、`tck.values` プロパティを使用します。次の例では、Java の型を使用して JavaScript をテストします。
<build>
<plugins>
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.1.2</version>
<configuration>
<argLine>
-Dtck.values=java-host
-Dtck.language=js
</argLine>
[...]
</configuration>
</plugin>
[...]
</plugins>
</build>
特定の TCK テストを実行するには、`-Dtest` オプションと共にテストパラメータを使用できます。例:`mvn test -Dtest=ScriptTest`