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,113 +1,98 @@
1
1
  module SimpleCipherTest
2
2
 
3
3
  open System
4
- open NUnit.Framework
4
+ open System.Text.RegularExpressions
5
+ open Xunit
6
+ open FsUnit.Xunit
5
7
 
6
8
  open SimpleCipher
7
9
 
8
10
  let plainText = "abcdefghij"
9
11
  let key = "abcdefghij";
10
12
 
11
- [<Test>]
13
+ [<Fact>]
12
14
  let ``Encode random uses key made of letters`` () =
13
15
  let (key, _) = encodeRandom plainText
14
- Assert.That(key, Does.Match("[a-z]+"))
16
+ Regex.IsMatch(key, "[a-z]+") |> should equal true
15
17
 
16
- [<Test>]
17
- [<Ignore("Remove to run test")>]
18
+ [<Fact(Skip = "Remove to run test")>]
18
19
  let ``Encode random uses key of 100 characters`` () =
19
20
  let (key, _) = encodeRandom plainText
20
- Assert.That(key, Has.Length.EqualTo(100))
21
+ key |> should haveLength 100
21
22
 
22
- [<Test>]
23
- [<Ignore("Remove to run test")>]
23
+ [<Fact(Skip = "Remove to run test")>]
24
24
  let ``Encode random uses randomly generated key`` () =
25
25
  let keys = List.init 100 (fun _ -> encodeRandom plainText |> fst)
26
- Assert.That(keys |> List.distinct, Is.EqualTo(keys))
26
+ keys |> List.distinct |> should equal keys
27
27
 
28
28
  // Here we take advantage of the fact that plaintext of "aaa..." outputs
29
29
  // the key. This is a critical problem with shift ciphers, some characters
30
30
  // will always output the key verbatim.
31
- [<Test>]
32
- [<Ignore("Remove to run test")>]
31
+ [<Fact(Skip = "Remove to run test")>]
33
32
  let ``Encode random can encode`` () =
34
33
  let (key, encoded) = encodeRandom "aaaaaaaaaa"
35
- Assert.That(encoded, Is.EqualTo(key.Substring(0, 10)))
34
+ encoded |> should equal <| key.Substring(0, 10)
36
35
 
37
- [<Test>]
38
- [<Ignore("Remove to run test")>]
36
+ [<Fact(Skip = "Remove to run test")>]
39
37
  let ``Encode random can decode`` () =
40
38
  let (key, _) = encodeRandom "aaaaaaaaaa"
41
- Assert.That(decode key (key.Substring(0, 10)), Is.EqualTo("aaaaaaaaaa"))
39
+ decode key (key.Substring(0, 10)) |> should equal "aaaaaaaaaa"
42
40
 
43
- [<Test>]
44
- [<Ignore("Remove to run test")>]
41
+ [<Fact(Skip = "Remove to run test")>]
45
42
  let ``Encode random is reversible`` () =
46
43
  let (key, encoded) = encodeRandom plainText
47
- Assert.That(decode key encoded, Is.EqualTo(plainText))
44
+ decode key encoded |> should equal plainText
48
45
 
49
- [<Test>]
50
- [<Ignore("Remove to run test")>]
46
+ [<Fact(Skip = "Remove to run test")>]
51
47
  let ``Cipher can encode with given key`` () =
52
- Assert.That(encode key "aaaaaaaaaa", Is.EqualTo("abcdefghij"))
48
+ encode key "aaaaaaaaaa" |> should equal "abcdefghij"
53
49
 
54
- [<Test>]
55
- [<Ignore("Remove to run test")>]
50
+ [<Fact(Skip = "Remove to run test")>]
56
51
  let ``Cipher can decode with given key`` () =
57
- Assert.That(decode key "abcdefghij", Is.EqualTo("aaaaaaaaaa"))
52
+ decode key "abcdefghij" |> should equal "aaaaaaaaaa"
58
53
 
59
- [<Test>]
60
- [<Ignore("Remove to run test")>]
54
+ [<Fact(Skip = "Remove to run test")>]
61
55
  let ``Cipher is reversible given key`` () =
62
- Assert.That(encode key plainText |> decode key, Is.EqualTo(plainText))
56
+ encode key plainText |> decode key |> should equal plainText
63
57
 
64
- [<Test>]
65
- [<Ignore("Remove to run test")>]
58
+ [<Fact(Skip = "Remove to run test")>]
66
59
  let ``Cipher can double shift encode`` () =
67
60
  let plainText = "iamapandabear"
68
- Assert.That(encode plainText plainText, Is.EqualTo("qayaeaagaciai"))
61
+ encode plainText plainText |> should equal "qayaeaagaciai"
69
62
 
70
- [<Test>]
71
- [<Ignore("Remove to run test")>]
63
+ [<Fact(Skip = "Remove to run test")>]
72
64
  let ``Cipher can wrap encode`` () =
73
- Assert.That(encode key "zzzzzzzzzz", Is.EqualTo("zabcdefghi"))
65
+ encode key "zzzzzzzzzz" |> should equal "zabcdefghi"
74
66
 
75
- [<Test>]
76
- [<Ignore("Remove to run test")>]
67
+ [<Fact(Skip = "Remove to run test")>]
77
68
  let ``Cipher can encode a message that is shorter than the key`` () =
78
- Assert.That(encode key "aaaaa", Is.EqualTo("abcde"))
69
+ encode key "aaaaa" |> should equal "abcde"
79
70
 
80
- [<Test>]
81
- [<Ignore("Remove to run test")>]
71
+ [<Fact(Skip = "Remove to run test")>]
82
72
  let ``Cipher can decode a message that is shorter than the key`` () =
83
- Assert.That(decode key "abcde", Is.EqualTo("aaaaa"))
73
+ decode key "abcde" |> should equal "aaaaa"
84
74
 
85
- [<Test>]
86
- [<Ignore("Remove to run test")>]
75
+ [<Fact(Skip = "Remove to run test")>]
87
76
  let ``Encode throws with an all caps key`` () =
88
77
  let key = "ABCDEF"
89
- Assert.That((fun () -> encode key plainText |> ignore), Throws.Exception)
78
+ (fun () -> encode key plainText |> ignore) |> should throw typeof<Exception>
90
79
 
91
- [<Test>]
92
- [<Ignore("Remove to run test")>]
80
+ [<Fact(Skip = "Remove to run test")>]
93
81
  let ``Encode throws with any caps key`` () =
94
82
  let key = "abcdEFg"
95
- Assert.That((fun () -> encode key plainText |> ignore), Throws.Exception)
83
+ (fun () -> encode key plainText |> ignore) |> should throw typeof<Exception>
96
84
 
97
- [<Test>]
98
- [<Ignore("Remove to run test")>]
85
+ [<Fact(Skip = "Remove to run test")>]
99
86
  let ``Encode throws with numeric key`` () =
100
87
  let key = "12345"
101
- Assert.That((fun () -> encode key plainText |> ignore), Throws.Exception)
88
+ (fun () -> encode key plainText |> ignore) |> should throw typeof<Exception>
102
89
 
103
- [<Test>]
104
- [<Ignore("Remove to run test")>]
90
+ [<Fact(Skip = "Remove to run test")>]
105
91
  let ``Encode throws with any numeric key`` () =
106
92
  let key = "abcd345ef"
107
- Assert.That((fun () -> encode key plainText |> ignore), Throws.Exception)
93
+ (fun () -> encode key plainText |> ignore) |> should throw typeof<Exception>
108
94
 
109
- [<Test>]
110
- [<Ignore("Remove to run test")>]
95
+ [<Fact(Skip = "Remove to run test")>]
111
96
  let ``Encode throws with empty key`` () =
112
97
  let key = ""
113
- Assert.That((fun () -> encode key plainText |> ignore), Throws.Exception)
98
+ (fun () -> encode key plainText |> ignore) |> should throw typeof<Exception>
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,36 @@
1
+ module SimpleLinkedList
2
+
3
+ type LinkedList<'a> =
4
+ | Nil
5
+ | Element of datum:'a * next:LinkedList<'a>
6
+
7
+ let nil = Nil
8
+
9
+ let create x n = Element (x, n)
10
+
11
+ let isNil x =
12
+ match x with
13
+ | Nil -> true
14
+ | _ -> false
15
+
16
+ let next x =
17
+ match x with
18
+ | Nil -> Nil
19
+ | Element (_, n) -> n
20
+
21
+ let datum x =
22
+ match x with
23
+ | Nil -> failwith "The nil list has no datum."
24
+ | Element (y, _) -> y
25
+
26
+ let toList x =
27
+ let rec loop acc item =
28
+ match item with
29
+ | Nil -> acc |> List.rev
30
+ | Element (b, n) -> loop (b :: acc) n
31
+
32
+ loop [] x
33
+
34
+ let fromList xs = List.foldBack create xs Nil
35
+
36
+ let reverse x = x |> toList |> List.rev |> fromList
@@ -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="SimpleLinkedList.fs" />
11
+ <Compile Include="SimpleLinkedListTest.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,75 +1,71 @@
1
- module SimpleLinkedListTest
1
+ module SimpleLinkedListTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
 
5
6
  open SimpleLinkedList
6
7
 
7
- [<Test>]
8
+ [<Fact>]
8
9
  let ``Empty list`` () =
9
10
  let list = nil
10
- Assert.That(isNil list, Is.True)
11
+ isNil list |> should equal true
11
12
 
12
- [<Test>]
13
- [<Ignore("Remove to run test")>]
13
+ [<Fact(Skip = "Remove to run test")>]
14
14
  let ``Single item list value`` () =
15
15
  let list = create 1 nil
16
- Assert.That(datum list, Is.EqualTo(1))
16
+ datum list |> should equal 1
17
17
 
18
- [<Test>]
19
- [<Ignore("Remove to run test")>]
18
+ [<Fact(Skip = "Remove to run test")>]
20
19
  let ``Single item list has no next item`` () =
21
20
  let list = create 1 nil
22
- Assert.That(next list |> isNil, Is.True)
21
+ next list |> isNil |> should equal true
23
22
 
24
- [<Test>]
25
- [<Ignore("Remove to run test")>]
23
+ [<Fact(Skip = "Remove to run test")>]
26
24
  let ``Two item list first value`` () =
27
25
  let list = create 2 (create 1 nil)
28
- Assert.That(datum list, Is.EqualTo(2))
26
+ datum list |> should equal 2
29
27
 
30
- [<Test>]
31
- [<Ignore("Remove to run test")>]
28
+ [<Fact(Skip = "Remove to run test")>]
32
29
  let ``Two item list second value`` () =
33
30
  let list = create 2 (create 1 nil)
34
- Assert.That(next list |> datum, Is.EqualTo(1))
31
+ next list |> datum |> should equal 1
35
32
 
36
- [<Test>]
37
- [<Ignore("Remove to run test")>]
33
+ [<Fact(Skip = "Remove to run test")>]
38
34
  let ``Two item list second item has no next`` () =
39
35
  let list = create 2 (create 1 nil)
40
- Assert.That(next list |> next |> isNil, Is.True)
36
+ next list |> next |> isNil |> should equal true
41
37
 
42
- [<Test>]
43
- [<Ignore("Remove to run test")>]
38
+ [<Fact(Skip = "Remove to run test")>]
44
39
  let ``To list`` () =
45
40
  let values = create 2 (create 1 nil) |> toList
46
- Assert.That(values, Is.EqualTo([2; 1]))
41
+ values |> should equal [2; 1]
47
42
 
48
- [<Test>]
49
- [<Ignore("Remove to run test")>]
43
+ [<Fact(Skip = "Remove to run test")>]
50
44
  let ``From list`` () =
51
45
  let list = fromList [11; 7; 5; 3; 2]
52
- Assert.That(list |> datum, Is.EqualTo(11))
53
- Assert.That(list |> next |> datum, Is.EqualTo(7))
54
- Assert.That(list |> next |> next |> datum, Is.EqualTo(5))
55
- Assert.That(list |> next |> next |> next |> datum, Is.EqualTo(3))
56
- Assert.That(list |> next |> next |> next |> next |> datum, Is.EqualTo(2))
57
-
58
- [<TestCase(1, Ignore = "Remove to run test case")>]
59
- [<TestCase(2, Ignore = "Remove to run test case")>]
60
- [<TestCase(10, Ignore = "Remove to run test case")>]
61
- [<TestCase(100, Ignore = "Remove to run test case")>]
46
+ list |> datum |> should equal 11
47
+ list |> next |> datum |> should equal 7
48
+ list |> next |> next |> datum |> should equal 5
49
+ list |> next |> next |> next |> datum |> should equal 3
50
+ list |> next |> next |> next |> next |> datum |> should equal 2
51
+
52
+ [<Theory(Skip = "Remove to run test")>]
53
+ [<InlineData(1)>]
54
+ [<InlineData(2)>]
55
+ [<InlineData(10)>]
56
+ [<InlineData(100)>]
62
57
  let ``Reverse`` (length: int) =
63
58
  let values = [1..length]
64
59
  let list = fromList values
65
60
  let reversed = reverse list
66
- Assert.That(reversed |> toList, Is.EqualTo(values |> List.rev))
61
+ reversed |> toList |> should equal <| List.rev values
67
62
 
68
- [<TestCase(1, Ignore = "Remove to run test case")>]
69
- [<TestCase(2, Ignore = "Remove to run test case")>]
70
- [<TestCase(10, Ignore = "Remove to run test case")>]
71
- [<TestCase(100, Ignore = "Remove to run test case")>]
63
+ [<Theory(Skip = "Remove to run test")>]
64
+ [<InlineData(1)>]
65
+ [<InlineData(2)>]
66
+ [<InlineData(10)>]
67
+ [<InlineData(100)>]
72
68
  let ``Roundtrip`` (length: int) =
73
69
  let values = [1..length]
74
70
  let listValues = fromList values
75
- Assert.That(listValues |> toList, Is.EqualTo(values))
71
+ listValues |> toList |> should equal values
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,5 @@
1
+ module SpaceAge
2
+
3
+ // TODO: define the Planet type
4
+
5
+ let spaceAge (planet: Planet) (seconds: decimal): decimal = 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="SpaceAge.fs" />
11
+ <Compile Include="SpaceAgeTest.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,58 +1,52 @@
1
- module SpaceAgeTest
1
+ module SpaceAgeTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
  open SpaceAge
5
6
 
6
- [<Test>]
7
+ [<Fact>]
7
8
  let ``Age on earth`` () =
8
9
  let seconds = 1000000000m
9
- Assert.That(spaceAge Planet.Earth seconds, Is.EqualTo(31.69m))
10
+ spaceAge Planet.Earth seconds |> should equal 31.69m
10
11
 
11
- [<Test>]
12
- [<Ignore("Remove to run test")>]
12
+ [<Fact(Skip = "Remove to run test")>]
13
13
  let ``Age on mercury`` () =
14
14
  let seconds = 2134835688m
15
- Assert.That(spaceAge Planet.Earth seconds, Is.EqualTo(67.65m))
16
- Assert.That(spaceAge Planet.Mercury seconds, Is.EqualTo(280.88m))
15
+ spaceAge Planet.Earth seconds |> should equal 67.65m
16
+ spaceAge Planet.Mercury seconds |> should equal 280.88m
17
17
 
18
- [<Test>]
19
- [<Ignore("Remove to run test")>]
18
+ [<Fact(Skip = "Remove to run test")>]
20
19
  let ``Age on venus`` () =
21
20
  let seconds = 189839836m
22
- Assert.That(spaceAge Planet.Earth seconds, Is.EqualTo(6.02m))
23
- Assert.That(spaceAge Planet.Venus seconds, Is.EqualTo(9.78m))
21
+ spaceAge Planet.Earth seconds |> should equal 6.02m
22
+ spaceAge Planet.Venus seconds |> should equal 9.78m
24
23
 
25
- [<Test>]
26
- [<Ignore("Remove to run test")>]
24
+ [<Fact(Skip = "Remove to run test")>]
27
25
  let ``Age on mars`` () =
28
26
  let seconds = 2329871239m
29
- Assert.That(spaceAge Planet.Earth seconds, Is.EqualTo(73.83m))
30
- Assert.That(spaceAge Planet.Mars seconds, Is.EqualTo(39.25m))
27
+ spaceAge Planet.Earth seconds |> should equal 73.83m
28
+ spaceAge Planet.Mars seconds |> should equal 39.25m
31
29
 
32
- [<Test>]
33
- [<Ignore("Remove to run test")>]
30
+ [<Fact(Skip = "Remove to run test")>]
34
31
  let ``Age on jupiter`` () =
35
32
  let seconds = 901876382m
36
- Assert.That(spaceAge Planet.Earth seconds, Is.EqualTo(28.58m))
37
- Assert.That(spaceAge Planet.Jupiter seconds, Is.EqualTo(2.41m))
33
+ spaceAge Planet.Earth seconds |> should equal 28.58m
34
+ spaceAge Planet.Jupiter seconds |> should equal 2.41m
38
35
 
39
- [<Test>]
40
- [<Ignore("Remove to run test")>]
36
+ [<Fact(Skip = "Remove to run test")>]
41
37
  let ``Age on saturn`` () =
42
38
  let seconds = 3000000000m
43
- Assert.That(spaceAge Planet.Earth seconds, Is.EqualTo(95.06m))
44
- Assert.That(spaceAge Planet.Saturn seconds, Is.EqualTo(3.23m))
39
+ spaceAge Planet.Earth seconds |> should equal 95.06m
40
+ spaceAge Planet.Saturn seconds |> should equal 3.23m
45
41
 
46
- [<Test>]
47
- [<Ignore("Remove to run test")>]
42
+ [<Fact(Skip = "Remove to run test")>]
48
43
  let ``Age on uranus`` () =
49
44
  let seconds = 3210123456m
50
- Assert.That(spaceAge Planet.Earth seconds, Is.EqualTo(101.72m))
51
- Assert.That(spaceAge Planet.Uranus seconds, Is.EqualTo(1.21m))
45
+ spaceAge Planet.Earth seconds |> should equal 101.72m
46
+ spaceAge Planet.Uranus seconds |> should equal 1.21m
52
47
 
53
- [<Test>]
54
- [<Ignore("Remove to run test")>]
48
+ [<Fact(Skip = "Remove to run test")>]
55
49
  let ``Age on neptune`` () =
56
50
  let seconds = 8210123456m
57
- Assert.That(spaceAge Planet.Earth seconds, Is.EqualTo(260.16m))
58
- Assert.That(spaceAge Planet.Neptune seconds, Is.EqualTo(1.58m))
51
+ spaceAge Planet.Earth seconds |> should equal 260.16m
52
+ spaceAge Planet.Neptune seconds |> should equal 1.58m
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,5 @@
1
+ module Seq
2
+
3
+ let keep pred xs = failwith "You need to implement this function."
4
+
5
+ let discard pred xs = 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="Strain.fs" />
11
+ <Compile Include="StrainTest.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,44 +1,31 @@
1
1
  module StrainTest
2
2
 
3
3
  open System.Collections.Specialized
4
- open NUnit.Framework
4
+ open Xunit
5
+ open FsUnit.Xunit
5
6
 
6
- // Note: to add your own functions to an existing module, just put your
7
- // functions in a module matching the existing module name. Your code
8
- // should thus look something like this:
9
-
10
- // module Seq
11
- //
12
- // let keep pred xs = ???
13
- // let discard pred xs = ???
14
-
15
- [<Test>]
7
+ [<Fact>]
16
8
  let ``Empty keep`` () =
17
- Assert.That([] |> Seq.keep (fun x -> x < 10), Is.EqualTo([]))
9
+ [] |> Seq.keep (fun x -> x < 10) |> should be Empty
18
10
 
19
- [<Test>]
20
- [<Ignore("Remove to run test")>]
11
+ [<Fact(Skip = "Remove to run test")>]
21
12
  let ``Keep everything`` () =
22
- Assert.That(set [1; 2; 3] |> Seq.keep (fun x -> x < 10), Is.EqualTo(set [1; 2; 3]))
13
+ set [1; 2; 3] |> Seq.keep (fun x -> x < 10) |> Seq.toList |> should equal <| [1; 2; 3]
23
14
 
24
- [<Test>]
25
- [<Ignore("Remove to run test")>]
15
+ [<Fact(Skip = "Remove to run test")>]
26
16
  let ``Keep first and last`` () =
27
- Assert.That([|1; 2; 3|] |> Seq.keep (fun x -> x % 2 <> 0), Is.EqualTo([|1; 3|]))
17
+ [|1; 2; 3|] |> Seq.keep (fun x -> x % 2 <> 0) |> Seq.toList |> should equal [1; 3]
28
18
 
29
- [<Test>]
30
- [<Ignore("Remove to run test")>]
19
+ [<Fact(Skip = "Remove to run test")>]
31
20
  let ``Keep neither first nor last`` () =
32
- Assert.That([1; 2; 3; 4; 5] |> Seq.keep (fun x -> x % 2 = 0), Is.EqualTo([2; 4]))
21
+ [1; 2; 3; 4; 5] |> Seq.keep (fun x -> x % 2 = 0) |> Seq.toList |> should equal [2; 4]
33
22
 
34
- [<Test>]
35
- [<Ignore("Remove to run test")>]
23
+ [<Fact(Skip = "Remove to run test")>]
36
24
  let ``Keep strings`` () =
37
25
  let words = "apple zebra banana zombies cherimoya zelot".Split(' ');
38
- Assert.That(words |> Seq.keep (fun (x:string) -> x.StartsWith("z")), Is.EqualTo("zebra zombies zelot".Split(' ')))
26
+ words |> Seq.keep (fun (x:string) -> x.StartsWith("z")) |> Seq.toList |> should equal <| List.ofArray("zebra zombies zelot".Split(' '))
39
27
 
40
- [<Test>]
41
- [<Ignore("Remove to run test")>]
28
+ [<Fact(Skip = "Remove to run test")>]
42
29
  let ``Keep arrays`` () =
43
30
  let actual = [|
44
31
  [|1; 2; 3|];
@@ -49,37 +36,31 @@ let ``Keep arrays`` () =
49
36
  [|2; 2; 1|];
50
37
  [|1; 2; 5|]
51
38
  |]
52
- let expected = [| [|5; 5; 5|]; [|5; 1; 2|]; [|1; 5; 2|]; [|1; 2; 5|] |]
53
- Assert.That(actual |> Seq.keep (Array.exists ((=) 5)), Is.EqualTo(expected))
39
+ let expected = [ [|5; 5; 5|]; [|5; 1; 2|]; [|1; 5; 2|]; [|1; 2; 5|] ]
40
+ actual |> Seq.keep (Array.exists ((=) 5)) |> Seq.toList |> should equal expected
54
41
 
55
- [<Test>]
56
- [<Ignore("Remove to run test")>]
42
+ [<Fact(Skip = "Remove to run test")>]
57
43
  let ``Empty discard`` () =
58
- Assert.That([] |> Seq.discard (fun x -> x < 10), Is.EqualTo([]))
44
+ [] |> Seq.discard (fun x -> x < 10) |> should be Empty
59
45
 
60
- [<Test>]
61
- [<Ignore("Remove to run test")>]
46
+ [<Fact(Skip = "Remove to run test")>]
62
47
  let ``Discard nothing`` () =
63
- Assert.That(set [1; 2; 3] |> Seq.discard (fun x -> x > 10), Is.EqualTo(set [1; 2; 3]))
48
+ set [1; 2; 3] |> Seq.discard (fun x -> x > 10) |> Seq.toList |> should equal <| [1; 2; 3]
64
49
 
65
- [<Test>]
66
- [<Ignore("Remove to run test")>]
50
+ [<Fact(Skip = "Remove to run test")>]
67
51
  let ``Discard first and last`` () =
68
- Assert.That([|1; 2; 3|] |> Seq.discard (fun x -> x % 2 <> 0), Is.EqualTo([|2|]))
52
+ [|1; 2; 3|] |> Seq.discard (fun x -> x % 2 <> 0) |> Seq.toList |> should equal [2]
69
53
 
70
- [<Test>]
71
- [<Ignore("Remove to run test")>]
54
+ [<Fact(Skip = "Remove to run test")>]
72
55
  let ``Discard neither first nor last`` () =
73
- Assert.That([1; 2; 3; 4; 5] |> Seq.discard (fun x -> x % 2 = 0), Is.EqualTo([1; 3; 5]))
56
+ [1; 2; 3; 4; 5] |> Seq.discard (fun x -> x % 2 = 0) |> Seq.toList |> should equal [1; 3; 5]
74
57
 
75
- [<Test>]
76
- [<Ignore("Remove to run test")>]
58
+ [<Fact(Skip = "Remove to run test")>]
77
59
  let ``Discard strings`` () =
78
60
  let words = "apple zebra banana zombies cherimoya zelot".Split(' ')
79
- Assert.That(words |> Seq.discard (fun (x:string) -> x.StartsWith("z")), Is.EqualTo("apple banana cherimoya".Split(' ')))
61
+ words |> Seq.discard (fun (x:string) -> x.StartsWith("z")) |> Seq.toList |> should equal <| List.ofArray("apple banana cherimoya".Split(' '))
80
62
 
81
- [<Test>]
82
- [<Ignore("Remove to run test")>]
63
+ [<Fact(Skip = "Remove to run test")>]
83
64
  let ``Discard arrays`` () =
84
65
  let actual = [|
85
66
  [|1; 2; 3|];
@@ -90,5 +71,5 @@ let ``Discard arrays`` () =
90
71
  [|2; 2; 1|];
91
72
  [|1; 2; 5|]
92
73
  |]
93
- let expected = [| [|1; 2; 3|]; [|2; 1; 2|]; [|2; 2; 1|] |]
94
- Assert.That(actual |> Seq.discard (Array.exists ((=) 5)), Is.EqualTo(expected))
74
+ let expected = [ [|1; 2; 3|]; [|2; 1; 2|]; [|2; 2; 1|] ]
75
+ actual |> Seq.discard (Array.exists ((=) 5)) |> Seq.toList |> should equal expected
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,5 @@
1
+ module Sublist
2
+
3
+ type Sublist = Equal | Sublist | Superlist | Unequal
4
+
5
+ let sublist xs ys = 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="Sublist.fs" />
11
+ <Compile Include="SublistTest.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>