ダイヤモンドのKataは、文字を1つ入力として受け取り、それをダイヤモンドの形で出力します。 文字を1つ受け取ると、'A'から始まり、渡された文字が最も幅の広い位置にくるダイヤモンドを出力します。
以下の例では、スペースは·で表します。
文字'A'のダイヤモンド:
A
文字'C'のダイヤモンド:
··A··
·B·B·
C···C
·B·B·
··A··
文字'E'のダイヤモンド:
····A····
···B·B···
··C···C··
·D·····D·
E·······E
·D·····D·
··C···C··
···B·B···
····A····
この演習のテストは、いつものテストとは違います。通常、テストは、ある入力に対して出力が期待する値と一致するかどうかを確認します。これを_値ベースのテスト_と呼びます。しかし、この演習では_プロパティベースのテスト_を使います。これは、さまざまな入力に対して、出力が特定の性質を持っているかどうかを確認するものです。値ベースのテストとプロパティベースのテストを分ける、2つの大きな違いは次のとおりです。
この演習では、テストはすべて、書いたコードが作り出すべきダイヤモンドの形の性質を検証します。さらに、どのテストも、検証する性質がすべての有効な入力文字('A'から'Z'まで)に当てはまるかどうかを確認します。
プロパティベースのテストをやりやすくするために、この演習のテストではFsCheckとFsCheck.Xunitのパッケージを利用しています。FsCheckについてもっと知りたい場合は、こちらにフレームワークのドキュメントがあります。
プロパティベースのテストについてもっと知りたい場合は、こちらの記事をご覧ください。