trackler 2.2.1.22 → 2.2.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/bash/exercises/bob/bob_test.sh +8 -6
  4. data/tracks/bash/exercises/bob/example.sh +30 -6
  5. data/tracks/coffeescript/docs/SNIPPET.txt +4 -0
  6. data/tracks/csharp/generators/Exercises/Allergies.cs +0 -2
  7. data/tracks/csharp/generators/Exercises/Anagram.cs +0 -2
  8. data/tracks/csharp/generators/Exercises/BinarySearch.cs +0 -2
  9. data/tracks/csharp/generators/Exercises/ComplexNumbers.cs +0 -2
  10. data/tracks/csharp/generators/Exercises/RailFenceCipher.cs +1 -2
  11. data/tracks/csharp/generators/Exercises/SpaceAge.cs +0 -3
  12. data/tracks/csharp/generators/Input/CanonicalDataCase.cs +37 -2
  13. data/tracks/dart/docs/SNIPPET.txt +5 -0
  14. data/tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js +5 -1
  15. data/tracks/elm/docs/SNIPPET.txt +10 -0
  16. data/tracks/fortran/docs/SNIPPET.txt +9 -0
  17. data/tracks/fsharp/.gitignore +2 -2
  18. data/tracks/fsharp/.travis.yml +18 -5
  19. data/tracks/fsharp/build.cake +92 -0
  20. data/tracks/fsharp/build.ps1 +81 -0
  21. data/tracks/fsharp/build.sh +56 -33
  22. data/tracks/fsharp/config.json +14 -14
  23. data/tracks/fsharp/docs/INSTALLATION.md +14 -45
  24. data/tracks/fsharp/docs/TESTS.md +12 -25
  25. data/tracks/fsharp/exercises/Exercises.sln +648 -0
  26. data/tracks/fsharp/exercises/accumulate/Accumulate.fs +3 -0
  27. data/tracks/fsharp/exercises/accumulate/Accumulate.fsproj +22 -0
  28. data/tracks/fsharp/exercises/accumulate/AccumulateTest.fs +18 -22
  29. data/tracks/fsharp/exercises/accumulate/HINTS.md +1 -0
  30. data/tracks/fsharp/exercises/accumulate/Program.fs +1 -0
  31. data/tracks/fsharp/exercises/acronym/Acronym.fs +3 -0
  32. data/tracks/fsharp/exercises/acronym/Acronym.fsproj +22 -0
  33. data/tracks/fsharp/exercises/acronym/AcronymTest.fs +18 -24
  34. data/tracks/fsharp/exercises/acronym/Program.fs +1 -0
  35. data/tracks/fsharp/exercises/all-your-base/AllYourBase.fs +3 -0
  36. data/tracks/fsharp/exercises/all-your-base/AllYourBase.fsproj +22 -0
  37. data/tracks/fsharp/exercises/all-your-base/AllYourBaseTest.fs +45 -64
  38. data/tracks/fsharp/exercises/all-your-base/Program.fs +1 -0
  39. data/tracks/fsharp/exercises/allergies/Allergies.fs +9 -0
  40. data/tracks/fsharp/exercises/allergies/Allergies.fsproj +22 -0
  41. data/tracks/fsharp/exercises/allergies/AllergiesTest.fs +47 -51
  42. data/tracks/fsharp/exercises/allergies/Program.fs +1 -0
  43. data/tracks/fsharp/exercises/alphametics/Alphametics.fs +3 -0
  44. data/tracks/fsharp/exercises/alphametics/Alphametics.fsproj +22 -0
  45. data/tracks/fsharp/exercises/alphametics/AlphameticsTest.fs +19 -25
  46. data/tracks/fsharp/exercises/alphametics/Example.fs +13 -13
  47. data/tracks/fsharp/exercises/alphametics/Program.fs +1 -0
  48. data/tracks/fsharp/exercises/anagram/Anagram.fs +3 -0
  49. data/tracks/fsharp/exercises/anagram/Anagram.fsproj +22 -0
  50. data/tracks/fsharp/exercises/anagram/AnagramTest.fs +22 -33
  51. data/tracks/fsharp/exercises/anagram/Program.fs +1 -0
  52. data/tracks/fsharp/exercises/atbash-cipher/AtbashCipher.fs +3 -0
  53. data/tracks/fsharp/exercises/atbash-cipher/AtbashCipher.fsproj +22 -0
  54. data/tracks/fsharp/exercises/atbash-cipher/{AtbashTest.fs → AtbashCipherTest.fs} +18 -24
  55. data/tracks/fsharp/exercises/atbash-cipher/Program.fs +1 -0
  56. data/tracks/fsharp/exercises/bank-account/BankAccount.fs +11 -0
  57. data/tracks/fsharp/exercises/bank-account/BankAccount.fsproj +22 -0
  58. data/tracks/fsharp/exercises/bank-account/BankAccountTest.fs +16 -19
  59. data/tracks/fsharp/exercises/bank-account/Program.fs +1 -0
  60. data/tracks/fsharp/exercises/beer-song/BeerSong.fs +7 -0
  61. data/tracks/fsharp/exercises/beer-song/BeerSong.fsproj +22 -0
  62. data/tracks/fsharp/exercises/beer-song/BeerSongTest.fs +17 -22
  63. data/tracks/fsharp/exercises/beer-song/Program.fs +1 -0
  64. data/tracks/fsharp/exercises/binary-search/BinarySearch.fs +3 -0
  65. data/tracks/fsharp/exercises/binary-search/BinarySearch.fsproj +22 -0
  66. data/tracks/fsharp/exercises/binary-search/BinarySearchTest.fs +21 -28
  67. data/tracks/fsharp/exercises/binary-search/Program.fs +1 -0
  68. data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTree.fs +15 -0
  69. data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTree.fsproj +22 -0
  70. data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTreeTest.fs +31 -38
  71. data/tracks/fsharp/exercises/binary-search-tree/Program.fs +1 -0
  72. data/tracks/fsharp/exercises/bob/Bob.fs +3 -0
  73. data/tracks/fsharp/exercises/bob/Bob.fsproj +22 -0
  74. data/tracks/fsharp/exercises/bob/BobTest.fs +33 -46
  75. data/tracks/fsharp/exercises/bob/Program.fs +1 -0
  76. data/tracks/fsharp/exercises/book-store/BookStore.fs +3 -0
  77. data/tracks/fsharp/exercises/book-store/BookStore.fsproj +22 -0
  78. data/tracks/fsharp/exercises/book-store/BookStoreTest.fs +27 -37
  79. data/tracks/fsharp/exercises/book-store/Program.fs +1 -0
  80. data/tracks/fsharp/exercises/bowling/Bowling.fs +7 -0
  81. data/tracks/fsharp/exercises/bowling/Bowling.fsproj +22 -0
  82. data/tracks/fsharp/exercises/bowling/BowlingTest.fs +75 -97
  83. data/tracks/fsharp/exercises/bowling/Example.fs +1 -1
  84. data/tracks/fsharp/exercises/bowling/Program.fs +1 -0
  85. data/tracks/fsharp/exercises/bracket-push/BracketPush.fs +3 -0
  86. data/tracks/fsharp/exercises/bracket-push/BracketPush.fsproj +22 -0
  87. data/tracks/fsharp/exercises/bracket-push/BracketPushTest.fs +27 -37
  88. data/tracks/fsharp/exercises/bracket-push/Program.fs +1 -0
  89. data/tracks/fsharp/exercises/change/Change.fs +3 -0
  90. data/tracks/fsharp/exercises/change/Change.fsproj +22 -0
  91. data/tracks/fsharp/exercises/change/ChangeTest.fs +19 -25
  92. data/tracks/fsharp/exercises/change/Program.fs +1 -0
  93. data/tracks/fsharp/exercises/circular-buffer/CircularBuffer.fs +11 -0
  94. data/tracks/fsharp/exercises/circular-buffer/CircularBuffer.fsproj +22 -0
  95. data/tracks/fsharp/exercises/circular-buffer/CircularBufferTest.fs +36 -42
  96. data/tracks/fsharp/exercises/circular-buffer/Program.fs +1 -0
  97. data/tracks/fsharp/exercises/clock/Clock.fs +9 -0
  98. data/tracks/fsharp/exercises/clock/Clock.fsproj +22 -0
  99. data/tracks/fsharp/exercises/clock/ClockTest.fs +34 -48
  100. data/tracks/fsharp/exercises/clock/Program.fs +1 -0
  101. data/tracks/fsharp/exercises/connect/Connect.fs +3 -0
  102. data/tracks/fsharp/exercises/connect/Connect.fsproj +22 -0
  103. data/tracks/fsharp/exercises/connect/ConnectTest.fs +19 -25
  104. data/tracks/fsharp/exercises/connect/Program.fs +1 -0
  105. data/tracks/fsharp/exercises/crypto-square/CryptoSquare.fs +44 -0
  106. data/tracks/fsharp/exercises/crypto-square/CryptoSquare.fsproj +22 -0
  107. data/tracks/fsharp/exercises/crypto-square/CryptoSquareTest.fs +28 -39
  108. data/tracks/fsharp/exercises/crypto-square/Program.fs +1 -0
  109. data/tracks/fsharp/exercises/custom-set/CustomSet.fs +29 -0
  110. data/tracks/fsharp/exercises/custom-set/CustomSet.fsproj +22 -0
  111. data/tracks/fsharp/exercises/custom-set/CustomSetTest.fs +77 -119
  112. data/tracks/fsharp/exercises/custom-set/Program.fs +1 -0
  113. data/tracks/fsharp/exercises/diamond/Diamond.fs +3 -0
  114. data/tracks/fsharp/exercises/diamond/Diamond.fsproj +22 -0
  115. data/tracks/fsharp/exercises/diamond/DiamondTest.fs +31 -27
  116. data/tracks/fsharp/exercises/diamond/Program.fs +1 -0
  117. data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquares.fs +7 -0
  118. data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquares.fsproj +22 -0
  119. data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquaresTest.fs +21 -28
  120. data/tracks/fsharp/exercises/difference-of-squares/Program.fs +1 -0
  121. data/tracks/fsharp/exercises/diffie-hellman/DiffieHellman.fs +7 -0
  122. data/tracks/fsharp/exercises/diffie-hellman/DiffieHellman.fsproj +22 -0
  123. data/tracks/fsharp/exercises/diffie-hellman/DiffieHellmanTest.fs +16 -19
  124. data/tracks/fsharp/exercises/diffie-hellman/Program.fs +1 -0
  125. data/tracks/fsharp/exercises/dominoes/Dominoes.fs +3 -0
  126. data/tracks/fsharp/exercises/dominoes/Dominoes.fsproj +22 -0
  127. data/tracks/fsharp/exercises/dominoes/DominoesTest.fs +27 -37
  128. data/tracks/fsharp/exercises/dominoes/Program.fs +1 -0
  129. data/tracks/fsharp/exercises/dot-dsl/DotDsl.fs +15 -0
  130. data/tracks/fsharp/exercises/dot-dsl/DotDsl.fsproj +22 -0
  131. data/tracks/fsharp/exercises/dot-dsl/DotDslTest.fs +27 -31
  132. data/tracks/fsharp/exercises/dot-dsl/Program.fs +1 -0
  133. data/tracks/fsharp/exercises/error-handling/ErrorHandling.fs +11 -0
  134. data/tracks/fsharp/exercises/error-handling/ErrorHandling.fsproj +22 -0
  135. data/tracks/fsharp/exercises/error-handling/ErrorHandlingTest.fs +20 -25
  136. data/tracks/fsharp/exercises/error-handling/Program.fs +1 -0
  137. data/tracks/fsharp/exercises/etl/Etl.fs +3 -0
  138. data/tracks/fsharp/exercises/etl/Etl.fsproj +22 -0
  139. data/tracks/fsharp/exercises/etl/{ETLTest.fs → EtlTest.fs} +11 -13
  140. data/tracks/fsharp/exercises/etl/Program.fs +1 -0
  141. data/tracks/fsharp/exercises/food-chain/FoodChain.fs +5 -0
  142. data/tracks/fsharp/exercises/food-chain/FoodChain.fsproj +22 -0
  143. data/tracks/fsharp/exercises/food-chain/FoodChainTest.fs +13 -16
  144. data/tracks/fsharp/exercises/food-chain/Program.fs +1 -0
  145. data/tracks/fsharp/exercises/forth/Forth.fs +3 -0
  146. data/tracks/fsharp/exercises/forth/Forth.fsproj +22 -0
  147. data/tracks/fsharp/exercises/forth/ForthTest.fs +44 -57
  148. data/tracks/fsharp/exercises/forth/Program.fs +1 -0
  149. data/tracks/fsharp/exercises/gigasecond/Gigasecond.fs +3 -0
  150. data/tracks/fsharp/exercises/gigasecond/Gigasecond.fsproj +22 -0
  151. data/tracks/fsharp/exercises/gigasecond/GigasecondTest.fs +9 -10
  152. data/tracks/fsharp/exercises/gigasecond/Program.fs +1 -0
  153. data/tracks/fsharp/exercises/go-counting/GoCounting.fs +3 -0
  154. data/tracks/fsharp/exercises/go-counting/GoCounting.fsproj +22 -0
  155. data/tracks/fsharp/exercises/go-counting/GoCountingTest.fs +23 -30
  156. data/tracks/fsharp/exercises/go-counting/Program.fs +1 -0
  157. data/tracks/fsharp/exercises/grade-school/Example.fs +1 -1
  158. data/tracks/fsharp/exercises/grade-school/GradeSchool.fs +9 -0
  159. data/tracks/fsharp/exercises/grade-school/GradeSchool.fsproj +22 -0
  160. data/tracks/fsharp/exercises/grade-school/GradeSchoolTest.fs +17 -22
  161. data/tracks/fsharp/exercises/grade-school/Program.fs +1 -0
  162. data/tracks/fsharp/exercises/grains/Grains.fs +6 -0
  163. data/tracks/fsharp/exercises/grains/Grains.fsproj +22 -0
  164. data/tracks/fsharp/exercises/grains/GrainsTest.fs +19 -25
  165. data/tracks/fsharp/exercises/grains/Program.fs +1 -0
  166. data/tracks/fsharp/exercises/grep/Grep.fs +3 -0
  167. data/tracks/fsharp/exercises/grep/Grep.fsproj +22 -0
  168. data/tracks/fsharp/exercises/grep/GrepTest.fs +332 -348
  169. data/tracks/fsharp/exercises/grep/Program.fs +1 -0
  170. data/tracks/fsharp/exercises/hamming/Hamming.fs +3 -0
  171. data/tracks/fsharp/exercises/hamming/Hamming.fsproj +22 -0
  172. data/tracks/fsharp/exercises/hamming/HammingTest.fs +15 -19
  173. data/tracks/fsharp/exercises/hamming/Program.fs +1 -0
  174. data/tracks/fsharp/exercises/hangman/Hangman.fs +3 -0
  175. data/tracks/fsharp/exercises/hangman/Hangman.fsproj +22 -0
  176. data/tracks/fsharp/exercises/hangman/HangmanTest.fs +30 -34
  177. data/tracks/fsharp/exercises/hangman/Program.fs +1 -0
  178. data/tracks/fsharp/exercises/hello-world/HelloWorld.fs +3 -0
  179. data/tracks/fsharp/exercises/hello-world/HelloWorld.fsproj +22 -0
  180. data/tracks/fsharp/exercises/hello-world/HelloWorldTest.fs +5 -4
  181. data/tracks/fsharp/exercises/hello-world/Program.fs +1 -0
  182. data/tracks/fsharp/exercises/house/House.fs +3 -0
  183. data/tracks/fsharp/exercises/house/House.fsproj +22 -0
  184. data/tracks/fsharp/exercises/house/HouseTest.fs +5 -4
  185. data/tracks/fsharp/exercises/house/Program.fs +1 -0
  186. data/tracks/fsharp/exercises/isogram/Isogram.fs +3 -0
  187. data/tracks/fsharp/exercises/isogram/Isogram.fsproj +22 -0
  188. data/tracks/fsharp/exercises/isogram/IsogramTest.fs +21 -28
  189. data/tracks/fsharp/exercises/isogram/Program.fs +1 -0
  190. data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGarden.fs +9 -0
  191. data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGarden.fsproj +22 -0
  192. data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGardenTest.fs +51 -0
  193. data/tracks/fsharp/exercises/kindergarten-garden/Program.fs +1 -0
  194. data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProduct.fs +3 -0
  195. data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProduct.fsproj +22 -0
  196. data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProductTest.fs +27 -22
  197. data/tracks/fsharp/exercises/largest-series-product/Program.fs +1 -0
  198. data/tracks/fsharp/exercises/leap/Leap.fs +3 -0
  199. data/tracks/fsharp/exercises/leap/Leap.fsproj +22 -0
  200. data/tracks/fsharp/exercises/leap/LeapTest.fs +11 -13
  201. data/tracks/fsharp/exercises/leap/Program.fs +1 -0
  202. data/tracks/fsharp/exercises/ledger/Ledger.fsproj +22 -0
  203. data/tracks/fsharp/exercises/ledger/LedgerTest.fs +23 -22
  204. data/tracks/fsharp/exercises/ledger/Program.fs +1 -0
  205. data/tracks/fsharp/exercises/lens-person/LensPerson.fs +1 -22
  206. data/tracks/fsharp/exercises/lens-person/LensPerson.fsproj +23 -0
  207. data/tracks/fsharp/exercises/lens-person/LensPersonTest.fs +11 -13
  208. data/tracks/fsharp/exercises/lens-person/Program.fs +1 -0
  209. data/tracks/fsharp/exercises/linked-list/LinkedList.fs +13 -0
  210. data/tracks/fsharp/exercises/linked-list/LinkedList.fsproj +22 -0
  211. data/tracks/fsharp/exercises/linked-list/LinkedListTest.fs +28 -33
  212. data/tracks/fsharp/exercises/linked-list/Program.fs +1 -0
  213. data/tracks/fsharp/exercises/list-ops/ListOps.fs +17 -0
  214. data/tracks/fsharp/exercises/list-ops/ListOps.fsproj +22 -0
  215. data/tracks/fsharp/exercises/list-ops/ListOpsTest.fs +51 -73
  216. data/tracks/fsharp/exercises/list-ops/Program.fs +1 -0
  217. data/tracks/fsharp/exercises/luhn/Luhn.fs +3 -0
  218. data/tracks/fsharp/exercises/luhn/Luhn.fsproj +22 -0
  219. data/tracks/fsharp/exercises/luhn/LuhnTest.fs +28 -39
  220. data/tracks/fsharp/exercises/luhn/Program.fs +1 -0
  221. data/tracks/fsharp/exercises/markdown/Markdown.fsproj +22 -0
  222. data/tracks/fsharp/exercises/markdown/MarkdownTest.fs +21 -20
  223. data/tracks/fsharp/exercises/markdown/Program.fs +1 -0
  224. data/tracks/fsharp/exercises/matrix/Matrix.fs +7 -0
  225. data/tracks/fsharp/exercises/matrix/Matrix.fsproj +22 -0
  226. data/tracks/fsharp/exercises/matrix/MatrixTest.fs +76 -48
  227. data/tracks/fsharp/exercises/matrix/Program.fs +1 -0
  228. data/tracks/fsharp/exercises/meetup/Meetup.fs +7 -0
  229. data/tracks/fsharp/exercises/meetup/Meetup.fsproj +22 -0
  230. data/tracks/fsharp/exercises/meetup/MeetupTest.fs +67 -60
  231. data/tracks/fsharp/exercises/meetup/Program.fs +1 -0
  232. data/tracks/fsharp/exercises/minesweeper/Minesweeper.fs +3 -0
  233. data/tracks/fsharp/exercises/minesweeper/Minesweeper.fsproj +22 -0
  234. data/tracks/fsharp/exercises/minesweeper/MinesweeperTest.fs +17 -22
  235. data/tracks/fsharp/exercises/minesweeper/Program.fs +1 -0
  236. data/tracks/fsharp/exercises/nth-prime/NthPrime.fs +3 -0
  237. data/tracks/fsharp/exercises/nth-prime/NthPrime.fsproj +22 -0
  238. data/tracks/fsharp/exercises/nth-prime/NthPrimeTest.fs +25 -34
  239. data/tracks/fsharp/exercises/nth-prime/Program.fs +1 -0
  240. data/tracks/fsharp/exercises/nucleotide-count/NucleotideCount.fs +5 -0
  241. data/tracks/fsharp/exercises/nucleotide-count/NucleotideCount.fsproj +22 -0
  242. data/tracks/fsharp/exercises/nucleotide-count/NucleotideCountTest.fs +17 -21
  243. data/tracks/fsharp/exercises/nucleotide-count/Program.fs +1 -0
  244. data/tracks/fsharp/exercises/ocr-numbers/OcrNumbers.fs +3 -0
  245. data/tracks/fsharp/exercises/ocr-numbers/OcrNumbers.fsproj +22 -0
  246. data/tracks/fsharp/exercises/ocr-numbers/OcrNumbersTest.fs +33 -46
  247. data/tracks/fsharp/exercises/ocr-numbers/Program.fs +1 -0
  248. data/tracks/fsharp/exercises/palindrome-products/PalindromeProducts.fs +5 -0
  249. data/tracks/fsharp/exercises/palindrome-products/PalindromeProducts.fsproj +22 -0
  250. data/tracks/fsharp/exercises/palindrome-products/PalindromeProductsTest.fs +54 -0
  251. data/tracks/fsharp/exercises/palindrome-products/Program.fs +1 -0
  252. data/tracks/fsharp/exercises/pangram/Pangram.fs +3 -0
  253. data/tracks/fsharp/exercises/pangram/Pangram.fsproj +22 -0
  254. data/tracks/fsharp/exercises/pangram/PangramTest.fs +23 -31
  255. data/tracks/fsharp/exercises/pangram/Program.fs +1 -0
  256. data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequency.fs +3 -0
  257. data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequency.fsproj +22 -0
  258. data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequencyTest.fs +27 -35
  259. data/tracks/fsharp/exercises/parallel-letter-frequency/Program.fs +1 -0
  260. data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangle.fs +3 -0
  261. data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangle.fsproj +22 -0
  262. data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangleTest.fs +15 -19
  263. data/tracks/fsharp/exercises/pascals-triangle/Program.fs +1 -0
  264. data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbers.fs +5 -0
  265. data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbers.fsproj +22 -0
  266. data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbersTest.fs +18 -14
  267. data/tracks/fsharp/exercises/perfect-numbers/Program.fs +1 -0
  268. data/tracks/fsharp/exercises/phone-number/PhoneNumber.fs +3 -0
  269. data/tracks/fsharp/exercises/phone-number/PhoneNumber.fsproj +22 -0
  270. data/tracks/fsharp/exercises/phone-number/PhoneNumberTest.fs +23 -31
  271. data/tracks/fsharp/exercises/phone-number/Program.fs +1 -0
  272. data/tracks/fsharp/exercises/pig-latin/PigLatin.fs +3 -0
  273. data/tracks/fsharp/exercises/pig-latin/PigLatin.fsproj +22 -0
  274. data/tracks/fsharp/exercises/pig-latin/PigLatinTest.fs +39 -44
  275. data/tracks/fsharp/exercises/pig-latin/Program.fs +1 -0
  276. data/tracks/fsharp/exercises/poker/Poker.fs +3 -0
  277. data/tracks/fsharp/exercises/poker/Poker.fsproj +22 -0
  278. data/tracks/fsharp/exercises/poker/PokerTest.fs +40 -56
  279. data/tracks/fsharp/exercises/poker/Program.fs +1 -0
  280. data/tracks/fsharp/exercises/pov/Pov.fs +3 -0
  281. data/tracks/fsharp/exercises/pov/Pov.fsproj +22 -0
  282. data/tracks/fsharp/exercises/pov/PovTest.fs +23 -31
  283. data/tracks/fsharp/exercises/pov/Program.fs +1 -0
  284. data/tracks/fsharp/exercises/prime-factors/Example.fs +1 -1
  285. data/tracks/fsharp/exercises/prime-factors/PrimeFactors.fs +3 -0
  286. data/tracks/fsharp/exercises/prime-factors/PrimeFactors.fsproj +22 -0
  287. data/tracks/fsharp/exercises/prime-factors/PrimeFactorsTest.fs +22 -30
  288. data/tracks/fsharp/exercises/prime-factors/Program.fs +1 -0
  289. data/tracks/fsharp/exercises/protein-translation/Program.fs +1 -0
  290. data/tracks/fsharp/exercises/protein-translation/ProteinTranslation.fs +3 -0
  291. data/tracks/fsharp/exercises/protein-translation/ProteinTranslation.fsproj +22 -0
  292. data/tracks/fsharp/exercises/protein-translation/ProteinTranslationTest.fs +41 -36
  293. data/tracks/fsharp/exercises/proverb/Program.fs +1 -0
  294. data/tracks/fsharp/exercises/proverb/Proverb.fs +5 -0
  295. data/tracks/fsharp/exercises/proverb/Proverb.fsproj +22 -0
  296. data/tracks/fsharp/exercises/proverb/ProverbTest.fs +11 -13
  297. data/tracks/fsharp/exercises/pythagorean-triplet/Program.fs +1 -0
  298. data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTriplet.fs +7 -0
  299. data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTriplet.fsproj +22 -0
  300. data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTripletTest.fs +19 -20
  301. data/tracks/fsharp/exercises/queen-attack/Program.fs +1 -0
  302. data/tracks/fsharp/exercises/queen-attack/QueenAttack.fs +3 -0
  303. data/tracks/fsharp/exercises/queen-attack/QueenAttack.fsproj +22 -0
  304. data/tracks/fsharp/exercises/queen-attack/QueenAttackTest.fs +19 -25
  305. data/tracks/fsharp/exercises/rail-fence-cipher/Program.fs +1 -0
  306. data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipher.fs +5 -0
  307. data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipher.fsproj +22 -0
  308. data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipherTest.fs +15 -19
  309. data/tracks/fsharp/exercises/raindrops/Program.fs +1 -0
  310. data/tracks/fsharp/exercises/raindrops/Raindrops.fs +3 -0
  311. data/tracks/fsharp/exercises/raindrops/Raindrops.fsproj +22 -0
  312. data/tracks/fsharp/exercises/raindrops/RaindropsTest.fs +30 -24
  313. data/tracks/fsharp/exercises/react/Program.fs +1 -0
  314. data/tracks/fsharp/exercises/react/React.fs +3 -0
  315. data/tracks/fsharp/exercises/react/React.fsproj +22 -0
  316. data/tracks/fsharp/exercises/react/ReactTest.fs +26 -31
  317. data/tracks/fsharp/exercises/rectangles/Program.fs +1 -0
  318. data/tracks/fsharp/exercises/rectangles/Rectangles.fs +3 -0
  319. data/tracks/fsharp/exercises/rectangles/Rectangles.fsproj +22 -0
  320. data/tracks/fsharp/exercises/rectangles/RectanglesTest.fs +23 -31
  321. data/tracks/fsharp/exercises/rna-transcription/Program.fs +1 -0
  322. data/tracks/fsharp/exercises/rna-transcription/RnaTranscription.fs +3 -0
  323. data/tracks/fsharp/exercises/rna-transcription/RnaTranscription.fsproj +22 -0
  324. data/tracks/fsharp/exercises/rna-transcription/RnaTranscriptionTest.fs +26 -0
  325. data/tracks/fsharp/exercises/robot-name/Program.fs +1 -0
  326. data/tracks/fsharp/exercises/robot-name/RobotName.fs +7 -0
  327. data/tracks/fsharp/exercises/robot-name/RobotName.fsproj +22 -0
  328. data/tracks/fsharp/exercises/robot-name/RobotNameTest.fs +12 -13
  329. data/tracks/fsharp/exercises/robot-simulator/Program.fs +1 -0
  330. data/tracks/fsharp/exercises/robot-simulator/RobotSimulator.fs +13 -0
  331. data/tracks/fsharp/exercises/robot-simulator/RobotSimulator.fsproj +22 -0
  332. data/tracks/fsharp/exercises/robot-simulator/RobotSimulatorTest.fs +16 -20
  333. data/tracks/fsharp/exercises/roman-numerals/Program.fs +1 -0
  334. data/tracks/fsharp/exercises/roman-numerals/RomanNumerals.fs +3 -0
  335. data/tracks/fsharp/exercises/roman-numerals/RomanNumerals.fsproj +22 -0
  336. data/tracks/fsharp/exercises/roman-numerals/RomanNumeralsTest.fs +28 -0
  337. data/tracks/fsharp/exercises/run-length-encoding/Program.fs +1 -0
  338. data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncoding.fs +5 -0
  339. data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncoding.fsproj +22 -0
  340. data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncodingTest.fs +17 -22
  341. data/tracks/fsharp/exercises/saddle-points/Program.fs +1 -0
  342. data/tracks/fsharp/exercises/saddle-points/SaddlePoints.fs +3 -0
  343. data/tracks/fsharp/exercises/saddle-points/SaddlePoints.fsproj +22 -0
  344. data/tracks/fsharp/exercises/saddle-points/{SaddlePointTest.fs → SaddlePointsTest.fs} +13 -16
  345. data/tracks/fsharp/exercises/say/Program.fs +1 -0
  346. data/tracks/fsharp/exercises/say/Say.fs +3 -0
  347. data/tracks/fsharp/exercises/say/Say.fsproj +22 -0
  348. data/tracks/fsharp/exercises/say/SayTest.fs +35 -49
  349. data/tracks/fsharp/exercises/scale-generator/Program.fs +1 -0
  350. data/tracks/fsharp/exercises/scale-generator/ScaleGenerator.fs +3 -0
  351. data/tracks/fsharp/exercises/scale-generator/ScaleGenerator.fsproj +22 -0
  352. data/tracks/fsharp/exercises/scale-generator/ScaleGeneratorTest.fs +31 -43
  353. data/tracks/fsharp/exercises/scrabble-score/Program.fs +1 -0
  354. data/tracks/fsharp/exercises/scrabble-score/ScrabbleScore.fs +3 -0
  355. data/tracks/fsharp/exercises/scrabble-score/ScrabbleScore.fsproj +22 -0
  356. data/tracks/fsharp/exercises/scrabble-score/ScrabbleScoreTest.fs +18 -24
  357. data/tracks/fsharp/exercises/secret-handshake/Program.fs +1 -0
  358. data/tracks/fsharp/exercises/secret-handshake/SecretHandshake.fs +3 -0
  359. data/tracks/fsharp/exercises/secret-handshake/SecretHandshake.fsproj +22 -0
  360. data/tracks/fsharp/exercises/secret-handshake/SecretHandshakeTest.fs +17 -22
  361. data/tracks/fsharp/exercises/series/Program.fs +1 -0
  362. data/tracks/fsharp/exercises/series/Series.fs +3 -0
  363. data/tracks/fsharp/exercises/series/Series.fsproj +22 -0
  364. data/tracks/fsharp/exercises/series/SeriesTest.fs +53 -55
  365. data/tracks/fsharp/exercises/sgf-parsing/Program.fs +1 -0
  366. data/tracks/fsharp/exercises/sgf-parsing/SgfParsing.fs +3 -0
  367. data/tracks/fsharp/exercises/sgf-parsing/SgfParsing.fsproj +22 -0
  368. data/tracks/fsharp/exercises/sgf-parsing/SgfParsingTest.fs +27 -37
  369. data/tracks/fsharp/exercises/sieve/Program.fs +1 -0
  370. data/tracks/fsharp/exercises/sieve/Sieve.fs +3 -0
  371. data/tracks/fsharp/exercises/sieve/Sieve.fsproj +22 -0
  372. data/tracks/fsharp/exercises/sieve/SieveTest.fs +19 -21
  373. data/tracks/fsharp/exercises/simple-cipher/Program.fs +1 -0
  374. data/tracks/fsharp/exercises/simple-cipher/SimpleCipher.fs +7 -0
  375. data/tracks/fsharp/exercises/simple-cipher/SimpleCipher.fsproj +22 -0
  376. data/tracks/fsharp/exercises/simple-cipher/SimpleCipherTest.fs +39 -54
  377. data/tracks/fsharp/exercises/simple-linked-list/Program.fs +1 -0
  378. data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedList.fs +36 -0
  379. data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedList.fsproj +22 -0
  380. data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedListTest.fs +36 -40
  381. data/tracks/fsharp/exercises/space-age/Program.fs +1 -0
  382. data/tracks/fsharp/exercises/space-age/SpaceAge.fs +5 -0
  383. data/tracks/fsharp/exercises/space-age/SpaceAge.fsproj +22 -0
  384. data/tracks/fsharp/exercises/space-age/SpaceAgeTest.fs +26 -32
  385. data/tracks/fsharp/exercises/strain/Program.fs +1 -0
  386. data/tracks/fsharp/exercises/strain/Strain.fs +5 -0
  387. data/tracks/fsharp/exercises/strain/Strain.fsproj +22 -0
  388. data/tracks/fsharp/exercises/strain/StrainTest.fs +28 -47
  389. data/tracks/fsharp/exercises/sublist/Program.fs +1 -0
  390. data/tracks/fsharp/exercises/sublist/Sublist.fs +5 -0
  391. data/tracks/fsharp/exercises/sublist/Sublist.fsproj +22 -0
  392. data/tracks/fsharp/exercises/sublist/SublistTest.fs +39 -55
  393. data/tracks/fsharp/exercises/sum-of-multiples/Program.fs +1 -0
  394. data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiples.fs +3 -0
  395. data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiples.fsproj +22 -0
  396. data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiplesTest.fs +15 -19
  397. data/tracks/fsharp/exercises/tournament/Program.fs +1 -0
  398. data/tracks/fsharp/exercises/tournament/Tournament.fs +3 -0
  399. data/tracks/fsharp/exercises/tournament/Tournament.fsproj +22 -0
  400. data/tracks/fsharp/exercises/tournament/TournamentTest.fs +9 -10
  401. data/tracks/fsharp/exercises/transpose/Program.fs +1 -0
  402. data/tracks/fsharp/exercises/transpose/Transpose.fs +3 -0
  403. data/tracks/fsharp/exercises/transpose/Transpose.fsproj +22 -0
  404. data/tracks/fsharp/exercises/transpose/TransposeTest.fs +25 -34
  405. data/tracks/fsharp/exercises/tree-building/Program.fs +1 -0
  406. data/tracks/fsharp/exercises/tree-building/TreeBuilding.fsproj +22 -0
  407. data/tracks/fsharp/exercises/tree-building/TreeBuildingTest.fs +84 -82
  408. data/tracks/fsharp/exercises/triangle/Program.fs +1 -0
  409. data/tracks/fsharp/exercises/triangle/Triangle.fs +8 -0
  410. data/tracks/fsharp/exercises/triangle/Triangle.fsproj +22 -0
  411. data/tracks/fsharp/exercises/triangle/TriangleTest.fs +31 -43
  412. data/tracks/fsharp/exercises/twelve-days/Program.fs +1 -0
  413. data/tracks/fsharp/exercises/twelve-days/TwelveDays.fs +7 -0
  414. data/tracks/fsharp/exercises/twelve-days/TwelveDays.fsproj +22 -0
  415. data/tracks/fsharp/exercises/twelve-days/TwelveDaysTest.fs +31 -43
  416. data/tracks/fsharp/exercises/two-bucket/Program.fs +1 -0
  417. data/tracks/fsharp/exercises/two-bucket/TwoBucket.fs +3 -0
  418. data/tracks/fsharp/exercises/two-bucket/TwoBucket.fsproj +22 -0
  419. data/tracks/fsharp/exercises/two-bucket/TwoBucketTest.fs +11 -13
  420. data/tracks/fsharp/exercises/two-fer/Program.fs +1 -0
  421. data/tracks/fsharp/exercises/two-fer/TwoFer.fs +3 -0
  422. data/tracks/fsharp/exercises/two-fer/TwoFer.fsproj +22 -0
  423. data/tracks/fsharp/exercises/two-fer/TwoFerTest.fs +9 -10
  424. data/tracks/fsharp/exercises/variable-length-quantity/Program.fs +1 -0
  425. data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantity.fs +3 -0
  426. data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantity.fsproj +22 -0
  427. data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantityTest.fs +42 -50
  428. data/tracks/fsharp/exercises/word-count/Program.fs +1 -0
  429. data/tracks/fsharp/exercises/word-count/WordCount.fs +3 -0
  430. data/tracks/fsharp/exercises/word-count/WordCount.fsproj +22 -0
  431. data/tracks/fsharp/exercises/word-count/WordCountTest.fs +27 -37
  432. data/tracks/fsharp/exercises/word-search/Program.fs +1 -0
  433. data/tracks/fsharp/exercises/word-search/WordSearch.fs +3 -0
  434. data/tracks/fsharp/exercises/word-search/WordSearch.fsproj +22 -0
  435. data/tracks/fsharp/exercises/word-search/WordSearchTest.fs +23 -31
  436. data/tracks/fsharp/exercises/wordy/Program.fs +1 -0
  437. data/tracks/fsharp/exercises/wordy/Wordy.fs +3 -0
  438. data/tracks/fsharp/exercises/wordy/Wordy.fsproj +22 -0
  439. data/tracks/fsharp/exercises/wordy/WordyTest.fs +34 -48
  440. data/tracks/fsharp/exercises/zebra-puzzle/Example.fs +1 -1
  441. data/tracks/fsharp/exercises/zebra-puzzle/Program.fs +1 -0
  442. data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzle.fs +3 -0
  443. data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzle.fsproj +22 -0
  444. data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzleTest.fs +9 -9
  445. data/tracks/fsharp/exercises/zipper/Program.fs +1 -0
  446. data/tracks/fsharp/exercises/zipper/Zipper.fs +3 -0
  447. data/tracks/fsharp/exercises/zipper/Zipper.fsproj +22 -0
  448. data/tracks/fsharp/exercises/zipper/ZipperTest.fs +19 -25
  449. data/tracks/javascript/exercises/simple-linked-list/example.js +4 -3
  450. data/tracks/javascript/exercises/simple-linked-list/simple-linked-list.spec.js +3 -0
  451. data/tracks/nim/docs/SNIPPET.txt +2 -0
  452. data/tracks/perl5/docs/SNIPPET.txt +9 -0
  453. data/tracks/php/docs/SNIPPET.txt +6 -0
  454. data/tracks/pony/docs/SNIPPET.txt +2 -0
  455. data/tracks/powershell/docs/SNIPPET.txt +4 -0
  456. data/tracks/prolog/docs/SNIPPET.txt +6 -0
  457. data/tracks/python/exercises/simple-cipher/README.md +1 -1
  458. data/tracks/vimscript/docs/SNIPPET.txt +4 -0
  459. metadata +334 -17
  460. data/tracks/fsharp/.paket/paket.bootstrapper.exe +0 -0
  461. data/tracks/fsharp/build.cmd +0 -14
  462. data/tracks/fsharp/build.fsx +0 -65
  463. data/tracks/fsharp/exercises/app.config +0 -11
  464. data/tracks/fsharp/exercises/exercises.fsproj +0 -225
  465. data/tracks/fsharp/exercises/kindergarten-garden/KinderGartenGardenTest.fs +0 -55
  466. data/tracks/fsharp/exercises/paket.references +0 -4
  467. data/tracks/fsharp/exercises/palindrome-products/PalindromeTest.fs +0 -60
  468. data/tracks/fsharp/exercises/rna-transcription/RNATranscriptionTest.fs +0 -29
  469. data/tracks/fsharp/exercises/roman-numerals/RomanNumeralTest.fs +0 -26
  470. data/tracks/fsharp/paket.dependencies +0 -8
  471. data/tracks/fsharp/paket.lock +0 -11
@@ -1,19 +1,20 @@
1
- module CircularBufferTest
1
+ module CircularBufferTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
5
+ open System
4
6
 
5
7
  open CircularBuffer
6
8
 
7
- [<Test>]
9
+ [<Fact>]
8
10
  let ``Write and read back one item`` () =
9
11
  let buffer1 = mkCircularBuffer 1 |> write '1'
10
12
  let (val2, buffer2) = read buffer1
11
13
 
12
- Assert.That(val2, Is.EqualTo('1'))
13
- Assert.That((fun () -> read buffer2 |> ignore), Throws.Exception)
14
+ val2 |> should equal '1'
15
+ (fun () -> read buffer2 |> ignore) |> should throw typeof<Exception>
14
16
 
15
- [<Test>]
16
- [<Ignore("Remove to run test")>]
17
+ [<Fact(Skip = "Remove to run test")>]
17
18
  let ``Write and read back multiple items`` () =
18
19
  let buffer1 =
19
20
  mkCircularBuffer 2
@@ -23,12 +24,11 @@ let ``Write and read back multiple items`` () =
23
24
  let (val2, buffer2) = read buffer1
24
25
  let (val3, buffer3) = read buffer2
25
26
 
26
- Assert.That(val2, Is.EqualTo('1'))
27
- Assert.That(val3, Is.EqualTo('2'))
28
- Assert.That((fun () -> read buffer3 |> ignore), Throws.Exception)
27
+ val2 |> should equal '1'
28
+ val3 |> should equal '2'
29
+ (fun () -> read buffer3 |> ignore) |> should throw typeof<Exception>
29
30
 
30
- [<Test>]
31
- [<Ignore("Remove to run test")>]
31
+ [<Fact(Skip = "Remove to run test")>]
32
32
  let ``Clearing buffer`` () =
33
33
  let buffer1 = mkCircularBuffer 3
34
34
  let buffer2 = List.fold (fun buffer value -> write value buffer) buffer1 ['1'..'3']
@@ -43,12 +43,11 @@ let ``Clearing buffer`` () =
43
43
  let buffer6 = buffer5 |> write '3'
44
44
  let (val7, _) = read buffer6
45
45
 
46
- Assert.That((fun () -> read buffer3 |> ignore), Throws.Exception)
47
- Assert.That(val5, Is.EqualTo('1'))
48
- Assert.That(val7, Is.EqualTo('2'))
46
+ (fun () -> read buffer3 |> ignore) |> should throw typeof<Exception>
47
+ val5 |> should equal '1'
48
+ val7 |> should equal '2'
49
49
 
50
- [<Test>]
51
- [<Ignore("Remove to run test")>]
50
+ [<Fact(Skip = "Remove to run test")>]
52
51
  let ``Alternate write and read`` () =
53
52
  let buffer1 = mkCircularBuffer 2
54
53
  let buffer2 = buffer1 |> write '1'
@@ -56,11 +55,10 @@ let ``Alternate write and read`` () =
56
55
  let buffer4 = buffer3 |> write '2'
57
56
  let (val5, _) = read buffer4
58
57
 
59
- Assert.That(val3, Is.EqualTo('1'))
60
- Assert.That(val5, Is.EqualTo('2'))
58
+ val3 |> should equal '1'
59
+ val5 |> should equal '2'
61
60
 
62
- [<Test>]
63
- [<Ignore("Remove to run test")>]
61
+ [<Fact(Skip = "Remove to run test")>]
64
62
  let ``Reads back oldest item`` () =
65
63
  let buffer1 =
66
64
  mkCircularBuffer 3
@@ -71,21 +69,19 @@ let ``Reads back oldest item`` () =
71
69
  let buffer3 = buffer2 |> write '3'
72
70
  let (val4, buffer4) = read buffer3
73
71
  let (val5, _) = read buffer4
74
- Assert.That(val4, Is.EqualTo('2'))
75
- Assert.That(val5, Is.EqualTo('3'))
72
+ val4 |> should equal '2'
73
+ val5 |> should equal '3'
76
74
 
77
- [<Test>]
78
- [<Ignore("Remove to run test")>]
75
+ [<Fact(Skip = "Remove to run test")>]
79
76
  let ``Writing to a full buffer throws an exception`` () =
80
77
  let buffer =
81
78
  mkCircularBuffer 2
82
79
  |> write '1'
83
80
  |> write '2'
84
81
 
85
- Assert.That((fun () -> buffer |> write 'A' |> ignore), Throws.Exception)
82
+ (fun () -> buffer |> write 'A' |> ignore) |> should throw typeof<Exception>
86
83
 
87
- [<Test>]
88
- [<Ignore("Remove to run test")>]
84
+ [<Fact(Skip = "Remove to run test")>]
89
85
  let ``Overwriting oldest item in a full buffer`` () =
90
86
  let buffer1 =
91
87
  mkCircularBuffer 2
@@ -96,12 +92,11 @@ let ``Overwriting oldest item in a full buffer`` () =
96
92
  let (val2, buffer2) = read buffer1
97
93
  let (val3, buffer3) = read buffer2
98
94
 
99
- Assert.That(val2, Is.EqualTo('2'))
100
- Assert.That(val3, Is.EqualTo('A'))
101
- Assert.That((fun () -> read buffer3 |> ignore), Throws.Exception)
95
+ val2 |> should equal '2'
96
+ val3 |> should equal 'A'
97
+ (fun () -> read buffer3 |> ignore) |> should throw typeof<Exception>
102
98
 
103
- [<Test>]
104
- [<Ignore("Remove to run test")>]
99
+ [<Fact(Skip = "Remove to run test")>]
105
100
  let ``Forced writes to non full buffer should behave like writes`` () =
106
101
  let buffer1 =
107
102
  mkCircularBuffer 2
@@ -111,12 +106,11 @@ let ``Forced writes to non full buffer should behave like writes`` () =
111
106
  let (val2, buffer2) = read buffer1
112
107
  let (val3, buffer3) = read buffer2
113
108
 
114
- Assert.That(val2, Is.EqualTo('1'))
115
- Assert.That(val3, Is.EqualTo('2'))
116
- Assert.That((fun () -> read buffer3 |> ignore), Throws.Exception)
109
+ val2 |> should equal '1'
110
+ val3 |> should equal '2'
111
+ (fun () -> read buffer3 |> ignore) |> should throw typeof<Exception>
117
112
 
118
- [<Test>]
119
- [<Ignore("Remove to run test")>]
113
+ [<Fact(Skip = "Remove to run test")>]
120
114
  let ``Alternate read and write into buffer overflow`` () =
121
115
  let buffer1 = mkCircularBuffer 5
122
116
  let buffer2 = List.fold (fun buffer value -> write value buffer) buffer1 ['1'..'3']
@@ -133,7 +127,7 @@ let ``Alternate read and write into buffer overflow`` () =
133
127
 
134
128
  let folder buffer value =
135
129
  let (val', buffer') = read buffer
136
- Assert.IsTrue((val' = value)) |> ignore
130
+ val' |> should equal value |> ignore
137
131
  buffer'
138
132
 
139
133
  let buffer8 = List.fold folder buffer7 ['6'..'8']
@@ -141,6 +135,6 @@ let ``Alternate read and write into buffer overflow`` () =
141
135
  let (val9, buffer9) = read buffer8
142
136
  let (val10, buffer10) = read buffer9
143
137
 
144
- Assert.That(val9, Is.EqualTo('A'))
145
- Assert.That(val10, Is.EqualTo('B'))
146
- Assert.That((fun () -> read buffer10 |> ignore), Throws.Exception)
138
+ val9 |> should equal 'A'
139
+ val10 |> should equal 'B'
140
+ (fun () -> read buffer10 |> ignore) |> should throw typeof<Exception>
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,9 @@
1
+ module Clock
2
+
3
+ let mkClock hours minutes = failwith "You need to implement this function."
4
+
5
+ let add minutes clock = failwith "You need to implement this function."
6
+
7
+ let subtract minutes clock = failwith "You need to implement this function."
8
+
9
+ let display clock = failwith "You need to implement this function."
@@ -0,0 +1,22 @@
1
+ <Project Sdk="Microsoft.NET.Sdk">
2
+
3
+ <PropertyGroup>
4
+ <TargetFramework>netcoreapp2.0</TargetFramework>
5
+
6
+ <IsPackable>false</IsPackable>
7
+ </PropertyGroup>
8
+
9
+ <ItemGroup>
10
+ <Compile Include="Clock.fs" />
11
+ <Compile Include="ClockTest.fs" />
12
+ <Compile Include="Program.fs" />
13
+ </ItemGroup>
14
+
15
+ <ItemGroup>
16
+ <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
17
+ <PackageReference Include="xunit" Version="2.3.0-beta5-build3769" />
18
+ <PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta5-build3769" />
19
+ <PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
20
+ </ItemGroup>
21
+
22
+ </Project>
@@ -1,110 +1,96 @@
1
1
  module ClockTest
2
2
 
3
3
  open System
4
- open NUnit.Framework
4
+ open Xunit
5
+ open FsUnit.Xunit
5
6
  open Clock
6
7
 
7
- [<Test>]
8
+ [<Fact>]
8
9
  let ``Prints 8 o'clock`` () =
9
10
  let clock = mkClock 8 0
10
- Assert.That(display clock, Is.EqualTo("08:00"))
11
+ display clock |> should equal "08:00"
11
12
 
12
- [<Test>]
13
- [<Ignore("Remove to run test")>]
13
+ [<Fact(Skip = "Remove to run test")>]
14
14
  let ``Prints 9 o'clock`` () =
15
15
  let clock = mkClock 9 0
16
- Assert.That(display clock, Is.EqualTo("09:00"))
16
+ display clock |> should equal "09:00"
17
17
 
18
- [<Test>]
19
- [<Ignore("Remove to run test")>]
18
+ [<Fact(Skip = "Remove to run test")>]
20
19
  let ``Can print single-digit minutes`` () =
21
20
  let clock = mkClock 11 9
22
- Assert.That(display clock, Is.EqualTo("11:09"))
21
+ display clock |> should equal "11:09"
23
22
 
24
- [<Test>]
25
- [<Ignore("Remove to run test")>]
23
+ [<Fact(Skip = "Remove to run test")>]
26
24
  let ``Can print double-digit minutes`` () =
27
25
  let clock = mkClock 11 19
28
- Assert.That(display clock, Is.EqualTo("11:19"))
26
+ display clock |> should equal "11:19"
29
27
 
30
- [<Test>]
31
- [<Ignore("Remove to run test")>]
28
+ [<Fact(Skip = "Remove to run test")>]
32
29
  let ``Can add minutes`` () =
33
30
  let clock = mkClock 10 0
34
31
  let added = clock |> add 3
35
- Assert.That(display added, Is.EqualTo("10:03"))
32
+ display added |> should equal "10:03"
36
33
 
37
- [<Test>]
38
- [<Ignore("Remove to run test")>]
34
+ [<Fact(Skip = "Remove to run test")>]
39
35
  let ``Can add over an hour`` () =
40
36
  let clock = mkClock 10 0
41
37
  let added = clock |> add 63
42
- Assert.That(display added, Is.EqualTo("11:03"))
38
+ display added |> should equal "11:03"
43
39
 
44
- [<Test>]
45
- [<Ignore("Remove to run test")>]
40
+ [<Fact(Skip = "Remove to run test")>]
46
41
  let ``Can add over more than one day`` () =
47
42
  let clock = mkClock 10 0
48
43
  let added = clock |> add 7224
49
- Assert.That(display added, Is.EqualTo("10:24"))
44
+ display added |> should equal "10:24"
50
45
 
51
- [<Test>]
52
- [<Ignore("Remove to run test")>]
46
+ [<Fact(Skip = "Remove to run test")>]
53
47
  let ``Can subtract minutes`` () =
54
48
  let clock = mkClock 10 3
55
49
  let subtracted = clock |> subtract 3
56
- Assert.That(display subtracted, Is.EqualTo("10:00"))
50
+ display subtracted |> should equal "10:00"
57
51
 
58
- [<Test>]
59
- [<Ignore("Remove to run test")>]
52
+ [<Fact(Skip = "Remove to run test")>]
60
53
  let ``Can subtract to previous hour`` () =
61
54
  let clock = mkClock 10 3
62
55
  let subtracted = clock |> subtract 30
63
- Assert.That(display subtracted, Is.EqualTo("09:33"))
56
+ display subtracted |> should equal "09:33"
64
57
 
65
- [<Test>]
66
- [<Ignore("Remove to run test")>]
58
+ [<Fact(Skip = "Remove to run test")>]
67
59
  let ``Can subtract over an hour`` () =
68
60
  let clock = mkClock 10 3
69
61
  let subtracted = clock |> subtract 70
70
- Assert.That(display subtracted, Is.EqualTo("08:53"))
62
+ display subtracted |> should equal "08:53"
71
63
 
72
- [<Test>]
73
- [<Ignore("Remove to run test")>]
64
+ [<Fact(Skip = "Remove to run test")>]
74
65
  let ``Wraps around midnight`` () =
75
66
  let clock = mkClock 23 59
76
67
  let added = clock |> add 2
77
- Assert.That(display added, Is.EqualTo("00:01"))
68
+ display added |> should equal "00:01"
78
69
 
79
- [<Test>]
80
- [<Ignore("Remove to run test")>]
70
+ [<Fact(Skip = "Remove to run test")>]
81
71
  let ``Wraps around midnight backwards`` () =
82
72
  let clock = mkClock 0 1
83
73
  let subtracted = clock |> subtract 2
84
- Assert.That(display subtracted, Is.EqualTo("23:59"))
74
+ display subtracted |> should equal "23:59"
85
75
 
86
- [<Test>]
87
- [<Ignore("Remove to run test")>]
76
+ [<Fact(Skip = "Remove to run test")>]
88
77
  let ``Midnight is zero hundred hours`` () =
89
78
  let clock = mkClock 24 0
90
- Assert.That(display clock, Is.EqualTo("00:00"))
79
+ display clock |> should equal "00:00"
91
80
 
92
- [<Test>]
93
- [<Ignore("Remove to run test")>]
81
+ [<Fact(Skip = "Remove to run test")>]
94
82
  let ``Sixty minutes is next hour`` () =
95
83
  let clock = mkClock 1 60
96
- Assert.That(display clock, Is.EqualTo("02:00"))
84
+ display clock |> should equal "02:00"
97
85
 
98
- [<Test>]
99
- [<Ignore("Remove to run test")>]
86
+ [<Fact(Skip = "Remove to run test")>]
100
87
  let ``Clocks with same time are equal`` () =
101
88
  let clock1 = mkClock 14 30
102
89
  let clock2 = mkClock 14 30
103
- Assert.That(clock1, Is.EqualTo(clock2))
90
+ clock1 |> should equal clock2
104
91
 
105
- [<Test>]
106
- [<Ignore("Remove to run test")>]
92
+ [<Fact(Skip = "Remove to run test")>]
107
93
  let ``Overflown clocks with same time are equal`` () =
108
94
  let clock1 = mkClock 14 30
109
95
  let clock2 = mkClock 38 30
110
- Assert.That(clock1, Is.EqualTo(clock2))
96
+ clock1 |> should equal clock2
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module Connect
2
+
3
+ // TODO: implement this module
@@ -0,0 +1,22 @@
1
+ <Project Sdk="Microsoft.NET.Sdk">
2
+
3
+ <PropertyGroup>
4
+ <TargetFramework>netcoreapp2.0</TargetFramework>
5
+
6
+ <IsPackable>false</IsPackable>
7
+ </PropertyGroup>
8
+
9
+ <ItemGroup>
10
+ <Compile Include="Connect.fs" />
11
+ <Compile Include="ConnectTest.fs" />
12
+ <Compile Include="Program.fs" />
13
+ </ItemGroup>
14
+
15
+ <ItemGroup>
16
+ <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
17
+ <PackageReference Include="xunit" Version="2.3.0-beta5-build3769" />
18
+ <PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta5-build3769" />
19
+ <PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
20
+ </ItemGroup>
21
+
22
+ </Project>
@@ -1,13 +1,14 @@
1
- module ConnectTest
1
+ module ConnectTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
  open System
5
6
 
6
7
  open Connect
7
8
 
8
9
  let makeBoard (board: string list) = board |> List.map (fun x -> x.Replace(" ", ""))
9
10
 
10
- [<Test>]
11
+ [<Fact>]
11
12
  let ``Empty board has no winner`` () =
12
13
  let lines = [". . . . . ";
13
14
  " . . . . . ";
@@ -15,24 +16,21 @@ let ``Empty board has no winner`` () =
15
16
  " . . . . . ";
16
17
  " . . . . ."]
17
18
  let board = makeBoard lines
18
- Assert.That(resultFor board, Is.EqualTo(None))
19
+ resultFor board |> should equal None
19
20
 
20
- [<Test>]
21
- [<Ignore("Remove to run test")>]
21
+ [<Fact(Skip = "Remove to run test")>]
22
22
  let ``1x1 board with black stone`` () =
23
23
  let lines = ["X"]
24
24
  let board = makeBoard lines
25
- Assert.That(resultFor board, Is.EqualTo(Some Black))
25
+ resultFor board |> should equal <| Some Black
26
26
 
27
- [<Test>]
28
- [<Ignore("Remove to run test")>]
27
+ [<Fact(Skip = "Remove to run test")>]
29
28
  let ``1x1 board with white stone`` () =
30
29
  let lines = ["O"]
31
30
  let board = makeBoard lines
32
- Assert.That(resultFor board, Is.EqualTo(Some White))
31
+ resultFor board |> should equal <| Some White
33
32
 
34
- [<Test>]
35
- [<Ignore("Remove to run test")>]
33
+ [<Fact(Skip = "Remove to run test")>]
36
34
  let ``Convoluted path`` () =
37
35
  let lines = [". X X . . ";
38
36
  " X . X . X ";
@@ -40,10 +38,9 @@ let ``Convoluted path`` () =
40
38
  " . X X . . ";
41
39
  " O O O O O"]
42
40
  let board = makeBoard lines
43
- Assert.That(resultFor board, Is.EqualTo(Some Black))
41
+ resultFor board |> should equal <| Some Black
44
42
 
45
- [<Test>]
46
- [<Ignore("Remove to run test")>]
43
+ [<Fact(Skip = "Remove to run test")>]
47
44
  let ``Rectangle, black wins`` () =
48
45
  let lines = [". O . . ";
49
46
  " O X X X ";
@@ -51,10 +48,9 @@ let ``Rectangle, black wins`` () =
51
48
  " X X O X ";
52
49
  " . O X ."]
53
50
  let board = makeBoard lines
54
- Assert.That(resultFor board, Is.EqualTo(Some Black))
51
+ resultFor board |> should equal <| Some Black
55
52
 
56
- [<Test>]
57
- [<Ignore("Remove to run test")>]
53
+ [<Fact(Skip = "Remove to run test")>]
58
54
  let ``Rectangle, white wins`` () =
59
55
  let lines = [". O . . ";
60
56
  " O X X X ";
@@ -62,10 +58,9 @@ let ``Rectangle, white wins`` () =
62
58
  " X X O X ";
63
59
  " . O X ."]
64
60
  let board = makeBoard lines
65
- Assert.That(resultFor board, Is.EqualTo(Some White))
61
+ resultFor board |> should equal <| Some White
66
62
 
67
- [<Test>]
68
- [<Ignore("Remove to run test")>]
63
+ [<Fact(Skip = "Remove to run test")>]
69
64
  let ``Spiral, black wins`` () =
70
65
  let lines = ["OXXXXXXXX";
71
66
  "OXOOOOOOO";
@@ -77,10 +72,9 @@ let ``Spiral, black wins`` () =
77
72
  "OOOOOOOXO";
78
73
  "XXXXXXXXO"]
79
74
  let board = makeBoard lines
80
- Assert.That(resultFor board, Is.EqualTo(Some Black))
75
+ resultFor board |> should equal <| Some Black
81
76
 
82
- [<Test>]
83
- [<Ignore("Remove to run test")>]
77
+ [<Fact(Skip = "Remove to run test")>]
84
78
  let ``Spiral, nobody wins`` () =
85
79
  let lines = ["OXXXXXXXX";
86
80
  "OXOOOOOOO";
@@ -92,4 +86,4 @@ let ``Spiral, nobody wins`` () =
92
86
  "OOOOOOOXO";
93
87
  "XXXXXXXXO"]
94
88
  let board = makeBoard lines
95
- Assert.That(resultFor board, Is.EqualTo(None))
89
+ resultFor board |> should equal None
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,44 @@
1
+ module CryptoSquare
2
+
3
+ open System
4
+
5
+ let charsToString chars = new String(chars |> Array.ofSeq)
6
+
7
+ let chunksOfSize n seq =
8
+ seq
9
+ |> Seq.mapi(fun i x -> i / n, x)
10
+ |> Seq.groupBy fst
11
+ |> Seq.map (fun (_, g) -> g |> Seq.map snd |> charsToString)
12
+
13
+ let transpose seq =
14
+ seq
15
+ |> Seq.collect(fun s -> s |> Seq.mapi(fun i e -> (i, e)))
16
+ |> Seq.groupBy(fst)
17
+ |> Seq.map(fun (_, s) -> s |> Seq.map snd |> charsToString)
18
+
19
+ let normalizePlaintext (input: string) = seq { for c in input do if Char.IsLetterOrDigit c then yield Char.ToLowerInvariant c } |> charsToString
20
+
21
+ let size (input: string) =
22
+ input
23
+ |> normalizePlaintext
24
+ |> String.length
25
+ |> float
26
+ |> Math.Sqrt
27
+ |> ceil
28
+ |> int
29
+
30
+ let plaintextSegments (input: string) =
31
+ chunksOfSize (size input) (normalizePlaintext input)
32
+ |> List.ofSeq
33
+
34
+ let ciphertext (input: string) =
35
+ input
36
+ |> plaintextSegments
37
+ |> transpose
38
+ |> String.concat ""
39
+
40
+ let normalizeCiphertext (input: string) =
41
+ input
42
+ |> plaintextSegments
43
+ |> transpose
44
+ |> String.concat " "
@@ -0,0 +1,22 @@
1
+ <Project Sdk="Microsoft.NET.Sdk">
2
+
3
+ <PropertyGroup>
4
+ <TargetFramework>netcoreapp2.0</TargetFramework>
5
+
6
+ <IsPackable>false</IsPackable>
7
+ </PropertyGroup>
8
+
9
+ <ItemGroup>
10
+ <Compile Include="CryptoSquare.fs" />
11
+ <Compile Include="CryptoSquareTest.fs" />
12
+ <Compile Include="Program.fs" />
13
+ </ItemGroup>
14
+
15
+ <ItemGroup>
16
+ <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
17
+ <PackageReference Include="xunit" Version="2.3.0-beta5-build3769" />
18
+ <PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta5-build3769" />
19
+ <PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
20
+ </ItemGroup>
21
+
22
+ </Project>
@@ -1,68 +1,57 @@
1
1
  module CryptoSquareTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
  open CryptoSquare
5
6
 
6
- [<Test>]
7
+ [<Fact>]
7
8
  let ``Strange characters are stripped during normalization`` () =
8
- Assert.That(normalizePlaintext "s#$%^&plunk", Is.EqualTo("splunk"))
9
+ normalizePlaintext "s#$%^&plunk" |> should equal "splunk"
9
10
 
10
- [<Test>]
11
- [<Ignore("Remove to run test")>]
11
+ [<Fact(Skip = "Remove to run test")>]
12
12
  let ``Letters are lowercased during normalization`` () =
13
- Assert.That(normalizePlaintext "WHOA HEY!", Is.EqualTo("whoahey"))
13
+ normalizePlaintext "WHOA HEY!" |> should equal "whoahey"
14
14
 
15
- [<Test>]
16
- [<Ignore("Remove to run test")>]
15
+ [<Fact(Skip = "Remove to run test")>]
17
16
  let ``Numbers are kept during normalization`` () =
18
- Assert.That(normalizePlaintext "1, 2, 3, GO!", Is.EqualTo("123go"))
17
+ normalizePlaintext "1, 2, 3, GO!" |> should equal "123go"
19
18
 
20
- [<Test>]
21
- [<Ignore("Remove to run test")>]
19
+ [<Fact(Skip = "Remove to run test")>]
22
20
  let ``Smallest square size is 2`` () =
23
- Assert.That(size "1234", Is.EqualTo(2))
21
+ size "1234" |> should equal 2
24
22
 
25
- [<Test>]
26
- [<Ignore("Remove to run test")>]
23
+ [<Fact(Skip = "Remove to run test")>]
27
24
  let ``Size of text whose length is a perfect square is its square root`` () =
28
- Assert.That(size "123456789", Is.EqualTo(3))
25
+ size "123456789" |> should equal 3
29
26
 
30
- [<Test>]
31
- [<Ignore("Remove to run test")>]
27
+ [<Fact(Skip = "Remove to run test")>]
32
28
  let ``Size of text whose length is not a perfect square is next biggest square root`` () =
33
- Assert.That(size "123456789abc", Is.EqualTo(4))
29
+ size "123456789abc" |> should equal 4
34
30
 
35
- [<Test>]
36
- [<Ignore("Remove to run test")>]
31
+ [<Fact(Skip = "Remove to run test")>]
37
32
  let ``Size is determined by normalized text`` () =
38
- Assert.That(size "Oh hey, this is nuts!", Is.EqualTo(4))
33
+ size "Oh hey, this is nuts!" |> should equal 4
39
34
 
40
- [<Test>]
41
- [<Ignore("Remove to run test")>]
35
+ [<Fact(Skip = "Remove to run test")>]
42
36
  let ``Segments are split by square size`` () =
43
- Assert.That(plaintextSegments "Never vex thine heart with idle woes", Is.EqualTo(["neverv"; "exthin"; "eheart"; "withid"; "lewoes"]))
37
+ plaintextSegments "Never vex thine heart with idle woes" |> should equal ["neverv"; "exthin"; "eheart"; "withid"; "lewoes"]
44
38
 
45
- [<Test>]
46
- [<Ignore("Remove to run test")>]
39
+ [<Fact(Skip = "Remove to run test")>]
47
40
  let ``Segments are split by square size until text runs out`` () =
48
- Assert.That(plaintextSegments "ZOMG! ZOMBIES!!!", Is.EqualTo(["zomg"; "zomb"; "ies"]))
41
+ plaintextSegments "ZOMG! ZOMBIES!!!" |> should equal ["zomg"; "zomb"; "ies"]
49
42
 
50
- [<Test>]
51
- [<Ignore("Remove to run test")>]
43
+ [<Fact(Skip = "Remove to run test")>]
52
44
  let ``Ciphertext combines text by column`` () =
53
- Assert.That(ciphertext "First, solve the problem. Then, write the code.", Is.EqualTo("foeewhilpmrervrticseohtottbeedshlnte"))
45
+ ciphertext "First, solve the problem. Then, write the code." |> should equal "foeewhilpmrervrticseohtottbeedshlnte"
54
46
 
55
- [<Test>]
56
- [<Ignore("Remove to run test")>]
47
+ [<Fact(Skip = "Remove to run test")>]
57
48
  let ``Ciphertext skips cells with no text`` () =
58
- Assert.That(ciphertext "Time is an illusion. Lunchtime doubly so.", Is.EqualTo("tasneyinicdsmiohooelntuillibsuuml"))
49
+ ciphertext "Time is an illusion. Lunchtime doubly so." |> should equal "tasneyinicdsmiohooelntuillibsuuml"
59
50
 
60
- [<Test>]
61
- [<Ignore("Remove to run test")>]
51
+ [<Fact(Skip = "Remove to run test")>]
62
52
  let ``Normalized ciphertext is split by 5`` () =
63
- Assert.That(normalizeCiphertext "Vampires are people too!", Is.EqualTo("vrel aepe mset paoo irpo"))
53
+ normalizeCiphertext "Vampires are people too!" |> should equal "vrel aepe mset paoo irpo"
64
54
 
65
- [<Test>]
66
- [<Ignore("Remove to run test")>]
55
+ [<Fact(Skip = "Remove to run test")>]
67
56
  let ``Normalized ciphertext not exactly divisible by 5 spills into a smaller segment`` () =
68
- Assert.That(normalizeCiphertext "Madness, and then illumination.", Is.EqualTo("msemo aanin dnin ndla etlt shui"))
57
+ normalizeCiphertext "Madness, and then illumination." |> should equal "msemo aanin dnin ndla etlt shui"
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0