Pyretトラックでのテスト

ExercismでPyretの演習をテストする方法を学びます。


前提条件のインストール

演習のダウンロードが無事に完了したら、テストを実行するためにNode.jsのモジュールをインストールする必要があります。

cd /path/to/exercise
npm install

次に、pyretコマンドラインツールが入っているディレクトリを$PATHに追加します。

# bash
PATH="./node_modules/.bin:$PATH"

# zsh
path=(./node_modules/.bin $path)

# fish
fish_add_path ./node_modules/.bin

はじめに

演習のディレクトリにはいくつかのファイルがありますが、とくに重要なのは解答ファイルとテストファイルの2つです。 次の例では、Leapの演習をダウンロードしています。

leap/
├── leap.arr       # Solution file - your code goes here
├── leap-test.arr  # Test cases for the exercise

テストを実行するには、公式のExercism CLIをダウンロードしていればexercism testを、そうでなければpyret leap-test.arrを実行します。 Pyretはテストスイートを実行します。テストスイートは、ラベル付きのcheckブロックの集まりで、解答ファイルを特定の入力と期待する結果に対してテストするものです。 この流れで重要なのは、テストスイートから見えるように、コードの一部を明示的にエクスポートすることです。

provide

このトラックのテストはファイルをインポートするので、明示的にエクスポートしたものすべてにアクセスできます。

変数をエクスポートするには、ファイルの先頭にprovide文を追加する必要があります。

次の2つのコードスニペットは、a、b、cをエクスポートする有効な方法です。

# using a list of bindings
provide a, b, c end
# using an object literal
provide {
  a: a,
  b: b,
  c: c
}
end

3つ目の方法であるprovide *は、カスタムデータ型を除くすべてのトップレベル束縛をエクスポートする省略記法です。 ただし、Pyretはシャドーイングを厳しく禁止しているため、一般的にはおすすめしません。

provide-types

演習によっては、テストのためにカスタムデータ型をエクスポートする必要があります。 そのような場合は、provide-types文を使えます。 データ型にはエクスポートされない可能性のある追加の関数があるため、シャドーイングの心配はありますが、provide-types *を使うことをおすすめします。

provide-types *

data MyPoint:
  | two-dim(x, y)
  | three-dim(x, y, z)
end

すべての演習のスタブには、provideまたはprovide-types文があらかじめ用意されています。