鑽石 kata 的輸入是一個字母,輸出則是鑽石形狀。 給定一個字母,它會印出一個以 '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····
這個練習的測試和你平常遇到的測試不太一樣。一般來說,測試會檢查在給定某個輸入時,輸出是否與預期的值相符。這叫做_基於值的測試_(英文:value-based testing)。不過,這個練習使用的是_基於屬性的測試_(英文:property-based testing),測試會檢查在一系列的輸入下,輸出是否具有某個特定的屬性。基於屬性的測試和基於值的測試有兩個關鍵差異:
在這個練習中,所有測試驗證的都是你的程式碼應該產生的菱形的一項屬性。此外,所有測試都會檢查它們所測試的屬性是否對所有有效的輸入字母('A' 到 'Z')都成立。
為了方便進行基於屬性的測試,這個練習的測試使用了 FsCheck 和 FsCheck.Xunit 這兩個套件。想更了解 FsCheck,可以在這裡找到這個框架的說明文件。
如果你想更了解基於屬性的測試,可以看看這篇文章。