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,6 +1,7 @@
1
- module ListOpsTest
1
+ module ListOpsTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
 
5
6
  open ListOps
6
7
 
@@ -8,121 +9,98 @@ let big = 100000
8
9
  let bigList = [1 .. big]
9
10
  let odd x = x % 2 = 1
10
11
 
11
- [<Test>]
12
+ [<Fact>]
12
13
  let ``length of empty list`` () =
13
- Assert.That(length [], Is.EqualTo(0))
14
+ length [] |> should equal 0
14
15
 
15
- [<Test>]
16
- [<Ignore("Remove to run test")>]
16
+ [<Fact(Skip = "Remove to run test")>]
17
17
  let ``length of non-empty list`` () =
18
- Assert.That(length [1 .. 4], Is.EqualTo(4))
18
+ length [1 .. 4] |> should equal 4
19
19
 
20
- [<Test>]
21
- [<Ignore("Remove to run test")>]
20
+ [<Fact(Skip = "Remove to run test")>]
22
21
  let ``length of large list`` () =
23
- Assert.That(length [1 .. big], Is.EqualTo(big))
22
+ length [1 .. big] |> should equal big
24
23
 
25
- [<Test>]
26
- [<Ignore("Remove to run test")>]
24
+ [<Fact(Skip = "Remove to run test")>]
27
25
  let ``reverse of empty list`` () =
28
- Assert.That(reverse [], Is.EqualTo([]))
26
+ reverse [] |> should be Empty
29
27
 
30
- [<Test>]
31
- [<Ignore("Remove to run test")>]
28
+ [<Fact(Skip = "Remove to run test")>]
32
29
  let ``reverse of non-empty list`` () =
33
- Assert.That(reverse [1 .. 100], Is.EqualTo([100 .. -1 .. 1]))
30
+ reverse [1 .. 100] |> should equal [100 .. -1 .. 1]
34
31
 
35
- [<Test>]
36
- [<Ignore("Remove to run test")>]
32
+ [<Fact(Skip = "Remove to run test")>]
37
33
  let ``map of empty list`` () =
38
- Assert.That(map ((+) 1) [], Is.EqualTo([]))
34
+ map ((+) 1) [] |> should be Empty
39
35
 
40
- [<Test>]
41
- [<Ignore("Remove to run test")>]
36
+ [<Fact(Skip = "Remove to run test")>]
42
37
  let ``map of non-empty list`` () =
43
- Assert.That(map ((+) 1) [1 .. 2 .. 7], Is.EqualTo([2 .. 2 .. 8]))
38
+ map ((+) 1) [1 .. 2 .. 7] |> should equal [2 .. 2 .. 8]
44
39
 
45
- [<Test>]
46
- [<Ignore("Remove to run test")>]
40
+ [<Fact(Skip = "Remove to run test")>]
47
41
  let ``filter of empty list`` () =
48
- Assert.That(filter id [], Is.EqualTo([]))
42
+ filter id [] |> should be Empty
49
43
 
50
- [<Test>]
51
- [<Ignore("Remove to run test")>]
44
+ [<Fact(Skip = "Remove to run test")>]
52
45
  let ``filter of normal list`` () =
53
- Assert.That(filter odd [1 .. 4], Is.EqualTo([1; 3]))
46
+ filter odd [1 .. 4] |> should equal [1; 3]
54
47
 
55
- [<Test>]
56
- [<Ignore("Remove to run test")>]
48
+ [<Fact(Skip = "Remove to run test")>]
57
49
  let ``foldl of empty list`` () =
58
- Assert.That(foldl (+) 0 [], Is.EqualTo(0))
50
+ foldl (+) 0 [] |> should equal 0
59
51
 
60
- [<Test>]
61
- [<Ignore("Remove to run test")>]
52
+ [<Fact(Skip = "Remove to run test")>]
62
53
  let ``foldl of non-empty list`` () =
63
- Assert.That(foldl (+) -3 [1 .. 4], Is.EqualTo(7))
54
+ foldl (+) -3 [1 .. 4] |> should equal 7
64
55
 
65
- [<Test>]
66
- [<Ignore("Remove to run test")>]
56
+ [<Fact(Skip = "Remove to run test")>]
67
57
  let ``foldl of huge list`` () =
68
- Assert.That(foldl (+) 0 [1 .. big], Is.EqualTo(big * (big + 1) / 2))
58
+ foldl (+) 0 [1 .. big] |> should equal (big * (big + 1) / 2)
69
59
 
70
- [<Test>]
71
- [<Ignore("Remove to run test")>]
60
+ [<Fact(Skip = "Remove to run test")>]
72
61
  let ``foldl with non-commutative function`` () =
73
- Assert.That(foldl (-) 10 [1 .. 4], Is.EqualTo(0))
62
+ foldl (-) 10 [1 .. 4] |> should equal 0
74
63
 
75
- [<Test>]
76
- [<Ignore("Remove to run test")>]
64
+ [<Fact(Skip = "Remove to run test")>]
77
65
  let ``foldl is not just foldr . flip`` () =
78
- Assert.That(foldl (fun acc item -> item :: acc) [] (List.ofSeq "asdf"), Is.EqualTo(List.ofSeq "fdsa"))
66
+ foldl (fun acc item -> item :: acc) [] (List.ofSeq "asdf") |> should equal (List.ofSeq "fdsa")
79
67
 
80
- [<Test>]
81
- [<Ignore("Remove to run test")>]
68
+ [<Fact(Skip = "Remove to run test")>]
82
69
  let ``foldr as id`` () =
83
- Assert.That(foldr (fun item acc -> item :: acc) [1 .. big] [] = bigList, Is.True)
70
+ foldr (fun item acc -> item :: acc) [1 .. big] [] = bigList |> should equal true
84
71
 
85
- [<Test>]
86
- [<Ignore("Remove to run test")>]
72
+ [<Fact(Skip = "Remove to run test")>]
87
73
  let ``foldr as append`` () =
88
- Assert.That(foldr (fun item acc -> item :: acc) [1 .. 99] [100 .. big] = bigList, Is.True)
74
+ foldr (fun item acc -> item :: acc) [1 .. 99] [100 .. big] = bigList |> should equal true
89
75
 
90
- [<Test>]
91
- [<Ignore("Remove to run test")>]
76
+ [<Fact(Skip = "Remove to run test")>]
92
77
  let ``append of empty lists`` () =
93
- Assert.That(append [] [], Is.EqualTo([]))
78
+ append [] [] |> should be Empty
94
79
 
95
- [<Test>]
96
- [<Ignore("Remove to run test")>]
80
+ [<Fact(Skip = "Remove to run test")>]
97
81
  let ``append of empty and non-empty lists`` () =
98
- Assert.That(append [] [1 .. 4], Is.EqualTo([1 .. 4]))
82
+ append [] [1 .. 4] |> should equal [1 .. 4]
99
83
 
100
- [<Test>]
101
- [<Ignore("Remove to run test")>]
84
+ [<Fact(Skip = "Remove to run test")>]
102
85
  let ``append of non-empty and empty lists`` () =
103
- Assert.That(append [1 .. 4] [], Is.EqualTo([1 .. 4]))
86
+ append [1 .. 4] [] |> should equal [1 .. 4]
104
87
 
105
- [<Test>]
106
- [<Ignore("Remove to run test")>]
88
+ [<Fact(Skip = "Remove to run test")>]
107
89
  let ``append of non-empty lists`` () =
108
- Assert.That(append [1 .. 3] [4; 5], Is.EqualTo([1 .. 5]))
90
+ append [1 .. 3] [4; 5] |> should equal [1 .. 5]
109
91
 
110
- [<Test>]
111
- [<Ignore("Remove to run test")>]
92
+ [<Fact(Skip = "Remove to run test")>]
112
93
  let ``append of large lists`` () =
113
- Assert.That(append [1 .. (big / 2)] [1 + big / 2 .. big] = bigList, Is.True)
94
+ append [1 .. (big / 2)] [1 + big / 2 .. big] = bigList |> should equal true
114
95
 
115
- [<Test>]
116
- [<Ignore("Remove to run test")>]
96
+ [<Fact(Skip = "Remove to run test")>]
117
97
  let ``concat of no lists`` () =
118
- Assert.That(concat [], Is.EqualTo([]))
98
+ concat [] |> should be Empty
119
99
 
120
- [<Test>]
121
- [<Ignore("Remove to run test")>]
100
+ [<Fact(Skip = "Remove to run test")>]
122
101
  let ``concat of list of lists`` () =
123
- Assert.That(concat [[1; 2]; [3]; []; [4; 5; 6]], Is.EqualTo([1 .. 6]))
102
+ concat [[1; 2]; [3]; []; [4; 5; 6]] |> should equal [1 .. 6]
124
103
 
125
- [<Test>]
126
- [<Ignore("Remove to run test")>]
104
+ [<Fact(Skip = "Remove to run test")>]
127
105
  let ``concat of large list of small lists`` () =
128
- Assert.That(concat (map (fun x -> [x]) [1 .. big]) = bigList, Is.True)
106
+ concat (map (fun x -> [x]) [1 .. big]) = bigList |> should equal true
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module Luhn
2
+
3
+ let valid number = 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="Luhn.fs" />
11
+ <Compile Include="LuhnTest.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,107 +1,96 @@
1
1
  module LuhnTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
  open Luhn
5
6
 
6
- [<Test>]
7
+ [<Fact>]
7
8
  let ``Single digit strings cannot be valid`` () =
8
9
  let input = "1"
9
10
  let expected = false
10
11
  let actual = valid input
11
- Assert.That(actual, Is.EqualTo(expected))
12
+ actual |> should equal expected
12
13
 
13
- [<Test>]
14
- [<Ignore("Remove to run test")>]
14
+ [<Fact(Skip = "Remove to run test")>]
15
15
  let ``A single zero is invalid`` () =
16
16
  let input = "0"
17
17
  let expected = false
18
18
  let actual = valid input
19
- Assert.That(actual, Is.EqualTo(expected))
19
+ actual |> should equal expected
20
20
 
21
- [<Test>]
22
- [<Ignore("Remove to run test")>]
21
+ [<Fact(Skip = "Remove to run test")>]
23
22
  let ``Single zero with space is invalid`` () =
24
23
  let input = "0 "
25
24
  let expected = false
26
25
  let actual = valid input
27
- Assert.That(actual, Is.EqualTo(expected))
26
+ actual |> should equal expected
28
27
 
29
- [<Test>]
30
- [<Ignore("Remove to run test")>]
28
+ [<Fact(Skip = "Remove to run test")>]
31
29
  let ``Lots of zeros are valid`` () =
32
30
  let input = "00000"
33
31
  let expected = true
34
32
  let actual = valid input
35
- Assert.That(actual, Is.EqualTo(expected))
33
+ actual |> should equal expected
36
34
 
37
- [<Test>]
38
- [<Ignore("Remove to run test")>]
35
+ [<Fact(Skip = "Remove to run test")>]
39
36
  let ``Nine doubled is nine`` () =
40
37
  let input = "091"
41
38
  let expected = true
42
39
  let actual = valid input
43
- Assert.That(actual, Is.EqualTo(expected))
40
+ actual |> should equal expected
44
41
 
45
- [<Test>]
46
- [<Ignore("Remove to run test")>]
42
+ [<Fact(Skip = "Remove to run test")>]
47
43
  let ``Simple valid number`` () =
48
44
  let input = " 5 9 "
49
45
  let expected = true
50
46
  let actual = valid input
51
- Assert.That(actual, Is.EqualTo(expected))
47
+ actual |> should equal expected
52
48
 
53
- [<Test>]
54
- [<Ignore("Remove to run test")>]
49
+ [<Fact(Skip = "Remove to run test")>]
55
50
  let ``Valid Canadian SIN`` () =
56
51
  let input = "046 454 286"
57
52
  let expected = true
58
53
  let actual = valid input
59
- Assert.That(actual, Is.EqualTo(expected))
54
+ actual |> should equal expected
60
55
 
61
- [<Test>]
62
- [<Ignore("Remove to run test")>]
56
+ [<Fact(Skip = "Remove to run test")>]
63
57
  let ``Another valid SIN`` () =
64
58
  let input = "055 444 285"
65
59
  let expected = true
66
60
  let actual = valid input
67
- Assert.That(actual, Is.EqualTo(expected))
61
+ actual |> should equal expected
68
62
 
69
- [<Test>]
70
- [<Ignore("Remove to run test")>]
63
+ [<Fact(Skip = "Remove to run test")>]
71
64
  let ``Invalid Canadian SIN`` () =
72
65
  let input = "046 454 287"
73
66
  let expected = false
74
67
  let actual = valid input
75
- Assert.That(actual, Is.EqualTo(expected))
68
+ actual |> should equal expected
76
69
 
77
- [<Test>]
78
- [<Ignore("Remove to run test")>]
70
+ [<Fact(Skip = "Remove to run test")>]
79
71
  let ``Invalid credit card`` () =
80
72
  let input = "8273 1232 7352 0569"
81
73
  let expected = false
82
74
  let actual = valid input
83
- Assert.That(actual, Is.EqualTo(expected))
75
+ actual |> should equal expected
84
76
 
85
- [<Test>]
86
- [<Ignore("Remove to run test")>]
77
+ [<Fact(Skip = "Remove to run test")>]
87
78
  let ``Strings that contain non-digits are not valid`` () =
88
79
  let input = "827a 1232 7352 0569"
89
80
  let expected = false
90
81
  let actual = valid input
91
- Assert.That(actual, Is.EqualTo(expected))
82
+ actual |> should equal expected
92
83
 
93
- [<Test>]
94
- [<Ignore("Remove to run test")>]
84
+ [<Fact(Skip = "Remove to run test")>]
95
85
  let ``Punctuation is not allowed`` () =
96
86
  let input = "055-444-285"
97
87
  let expected = false
98
88
  let actual = valid input
99
- Assert.That(actual, Is.EqualTo(expected))
89
+ actual |> should equal expected
100
90
 
101
- [<Test>]
102
- [<Ignore("Remove to run test")>]
91
+ [<Fact(Skip = "Remove to run test")>]
103
92
  let ``Symbols are not allowed`` () =
104
93
  let input = "055£ 444$ 285"
105
94
  let expected = false
106
95
  let actual = valid input
107
- Assert.That(actual, Is.EqualTo(expected))
96
+ actual |> should equal expected
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -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="Markdown.fs" />
11
+ <Compile Include="MarkdownTest.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,59 +1,60 @@
1
- module MarkdownTest
1
+ module MarkdownTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
 
5
6
  open Markdown
6
7
 
7
- [<Test>]
8
+ [<Fact>]
8
9
  let ``Parses normal text as a paragraph`` () =
9
10
  let input = "This will be a paragraph"
10
11
  let expected = "<p>This will be a paragraph</p>"
11
- Assert.That(parse input, Is.EqualTo(expected))
12
+ parse input |> should equal expected
12
13
 
13
- [<Test>]
14
+ [<Fact>]
14
15
  let ``Parsing italics`` () =
15
16
  let input = "_This will be italic_"
16
17
  let expected = "<p><em>This will be italic</em></p>"
17
- Assert.That(parse input, Is.EqualTo(expected))
18
+ parse input |> should equal expected
18
19
 
19
- [<Test>]
20
+ [<Fact>]
20
21
  let ``Parsing bold text`` () =
21
22
  let input = "__This will be bold__"
22
23
  let expected = "<p><strong>This will be bold</strong></p>"
23
- Assert.That(parse input, Is.EqualTo(expected))
24
+ parse input |> should equal expected
24
25
 
25
- [<Test>]
26
+ [<Fact>]
26
27
  let ``Mixed normal, italics and bold text`` () =
27
28
  let input = "This will _be_ __mixed__"
28
29
  let expected = "<p>This will <em>be</em> <strong>mixed</strong></p>"
29
- Assert.That(parse input, Is.EqualTo(expected))
30
+ parse input |> should equal expected
30
31
 
31
- [<Test>]
32
+ [<Fact>]
32
33
  let ``With h1 header level`` () =
33
34
  let input = "# This will be an h1"
34
35
  let expected = "<h1>This will be an h1</h1>"
35
- Assert.That(parse input, Is.EqualTo(expected))
36
+ parse input |> should equal expected
36
37
 
37
- [<Test>]
38
+ [<Fact>]
38
39
  let ``With h2 header level`` () =
39
40
  let input = "## This will be an h2"
40
41
  let expected = "<h2>This will be an h2</h2>"
41
- Assert.That(parse input, Is.EqualTo(expected))
42
+ parse input |> should equal expected
42
43
 
43
- [<Test>]
44
+ [<Fact>]
44
45
  let ``With h6 header level`` () =
45
46
  let input = "###### This will be an h6"
46
47
  let expected = "<h6>This will be an h6</h6>"
47
- Assert.That(parse input, Is.EqualTo(expected))
48
+ parse input |> should equal expected
48
49
 
49
- [<Test>]
50
+ [<Fact>]
50
51
  let ``Unordered lists`` () =
51
52
  let input = "* Item 1\n* Item 2"
52
53
  let expected = "<ul><li>Item 1</li><li>Item 2</li></ul>"
53
- Assert.That(parse input, Is.EqualTo(expected))
54
+ parse input |> should equal expected
54
55
 
55
- [<Test>]
56
+ [<Fact>]
56
57
  let ``With a little bit of everything`` () =
57
58
  let input = "# Header!\n* __Bold Item__\n* _Italic Item_"
58
59
  let expected = "<h1>Header!</h1><ul><li><strong>Bold Item</strong></li><li><em>Italic Item</em></li></ul>"
59
- Assert.That(parse input, Is.EqualTo(expected))
60
+ parse input |> should equal expected
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,7 @@
1
+ module Matrix
2
+
3
+ let fromString str = failwith "You need to implement this function."
4
+
5
+ let rows matrix = failwith "You need to implement this function."
6
+
7
+ let cols matrix = 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="Matrix.fs" />
11
+ <Compile Include="MatrixTest.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,52 +1,80 @@
1
- module MatrixTest
1
+ module MatrixTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
 
5
6
  open Matrix
6
7
 
7
- [<TestCase("1", ExpectedResult = [| 1 |])>]
8
- [<TestCase("4 7", ExpectedResult = [| 4; 7 |], Ignore = "Remove to run test case")>]
9
- [<TestCase("1 2\n10 20", ExpectedResult = [| 1; 2 |], Ignore = "Remove to run test case")>]
10
- [<TestCase("9 7 6\n8 6 5\n5 3 2", ExpectedResult = [| 9; 7; 6 |], Ignore = "Remove to run test case")>]
11
- let ``Extract first row`` (input: string) =
12
- let matrix = fromString input
13
- rows matrix |> Array.head
14
-
15
- [<TestCase("5", ExpectedResult = [| 5 |], Ignore = "Remove to run test case")>]
16
- [<TestCase("9 7", ExpectedResult = [| 9; 7 |], Ignore = "Remove to run test case")>]
17
- [<TestCase("9 8 7\n19 18 17", ExpectedResult = [| 19; 18; 17 |], Ignore = "Remove to run test case")>]
18
- [<TestCase("1 4 9\n16 25 36\n5 6 7", ExpectedResult = [| 5; 6; 7 |], Ignore = "Remove to run test case")>]
19
- let ``Extract last row`` (input: string) =
20
- let matrix = fromString input
21
- rows matrix |> Array.last
22
-
23
- [<TestCase("55 44", ExpectedResult = [| 55 |], Ignore = "Remove to run test case")>]
24
- [<TestCase("89 1903\n18 3", ExpectedResult = [| 89; 18 |], Ignore = "Remove to run test case")>]
25
- [<TestCase("1 2 3\n4 5 6\n7 8 9\n8 7 6", ExpectedResult = [| 1; 4; 7; 8 |], Ignore = "Remove to run test case")>]
26
- let ``Extract first column`` (input: string) =
27
- let matrix = fromString input
28
- cols matrix |> Array.head
29
-
30
- [<TestCase("28", ExpectedResult = [| 28 |], Ignore = "Remove to run test case")>]
31
- [<TestCase("13\n16\n19", ExpectedResult = [| 13; 16; 19 |], Ignore = "Remove to run test case")>]
32
- [<TestCase("289 21903 23\n218 23 21", ExpectedResult = [| 23; 21 |], Ignore = "Remove to run test case")>]
33
- [<TestCase("11 12 13\n14 15 16\n17 18 19\n18 17 16", ExpectedResult = [| 13; 16; 19; 16 |], Ignore = "Remove to run test case")>]
34
- let ``Extract last column`` (input: string) =
35
- let matrix = fromString input
36
- cols matrix |> Array.last
37
-
38
- [<TestCase("28", ExpectedResult = 1, Ignore = "Remove to run test case")>]
39
- [<TestCase("13\n16", ExpectedResult = 2, Ignore = "Remove to run test case")>]
40
- [<TestCase("289 21903\n23 218\n23 21", ExpectedResult = 3, Ignore = "Remove to run test case")>]
41
- [<TestCase("11 12 13\n14 15 16\n17 18 19\n18 17 16", ExpectedResult = 4, Ignore = "Remove to run test case")>]
42
- let ``Number of rows`` (input: string) =
43
- let matrix = fromString input
44
- rows matrix |> Array.length
45
-
46
- [<TestCase("28", ExpectedResult = 1, Ignore = "Remove to run test case")>]
47
- [<TestCase("13 2\n16 3\n19 4", ExpectedResult = 2, Ignore = "Remove to run test case")>]
48
- [<TestCase("289 21903\n23 218\n23 21", ExpectedResult = 2, Ignore = "Remove to run test case")>]
49
- [<TestCase("11 12 13\n14 15 16\n17 18 19\n18 17 16", ExpectedResult = 3, Ignore = "Remove to run test case")>]
50
- let ``Number of columns`` (input: string) =
51
- let matrix = fromString input
52
- cols matrix |> Array.length
8
+ type MatrixTest() =
9
+ static member ExtractFirstRowData =
10
+ let theoryData = new TheoryData<string, int[]>()
11
+ theoryData.Add("1", [| 1 |])
12
+ theoryData.Add("4 7", [| 4; 7 |])
13
+ theoryData.Add("1 2\n10 20", [| 1; 2 |])
14
+ theoryData.Add("9 7 6\n8 6 5\n5 3 2", [| 9; 7; 6 |])
15
+ theoryData
16
+
17
+ [<Theory>]
18
+ [<MemberData("ExtractFirstRowData")>]
19
+ member this.``Extract first row`` (input: string) expected =
20
+ let matrix = fromString input
21
+ rows matrix |> Array.head |> should equal expected
22
+
23
+ static member ExtractLastRowData =
24
+ let theoryData = new TheoryData<string, int[]>()
25
+ theoryData.Add("5", [| 5 |])
26
+ theoryData.Add("9 7", [| 9; 7 |])
27
+ theoryData.Add("9 8 7\n19 18 17", [| 19; 18; 17 |])
28
+ theoryData.Add("1 4 9\n16 25 36\n5 6 7", [| 5; 6; 7 |])
29
+ theoryData
30
+
31
+ [<Theory(Skip = "Remove to run test")>]
32
+ [<MemberData("ExtractLastRowData")>]
33
+ member this.``Extract last row`` (input: string) expected =
34
+ let matrix = fromString input
35
+ rows matrix |> Array.last |> should equal expected
36
+
37
+ static member ExtractFirstColumnData =
38
+ let theoryData = new TheoryData<string, int[]>()
39
+ theoryData.Add("55 44", [| 55 |])
40
+ theoryData.Add("89 1903\n18 3", [| 89; 18 |])
41
+ theoryData.Add("1 2 3\n4 5 6\n7 8 9\n8 7 6", [| 1; 4; 7; 8 |])
42
+ theoryData
43
+
44
+ [<Theory(Skip = "Remove to run test")>]
45
+ [<MemberData("ExtractFirstColumnData")>]
46
+ member this.``Extract first column`` (input: string) expected =
47
+ let matrix = fromString input
48
+ cols matrix |> Array.head |> should equal expected
49
+
50
+ static member ExtractLastColumnData =
51
+ let theoryData = new TheoryData<string, int[]>()
52
+ theoryData.Add("28", [| 28 |])
53
+ theoryData.Add("13\n16\n19", [| 13; 16; 19 |])
54
+ theoryData.Add("289 21903 23\n218 23 21", [| 23; 21 |])
55
+ theoryData.Add("11 12 13\n14 15 16\n17 18 19\n18 17 16", [| 13; 16; 19; 16 |])
56
+ theoryData
57
+
58
+ [<Theory(Skip = "Remove to run test")>]
59
+ [<MemberData("ExtractLastColumnData")>]
60
+ member this.``Extract last column`` (input: string) expected =
61
+ let matrix = fromString input
62
+ cols matrix |> Array.last |> should equal expected
63
+
64
+ [<Theory(Skip = "Remove to run test")>]
65
+ [<InlineData("28", 1)>]
66
+ [<InlineData("13\n16", 2)>]
67
+ [<InlineData("289 21903\n23 218\n23 21", 3)>]
68
+ [<InlineData("11 12 13\n14 15 16\n17 18 19\n18 17 16", 4)>]
69
+ member this.``Number of rows`` (input: string) expected =
70
+ let matrix = fromString input
71
+ rows matrix |> Array.length |> should equal expected
72
+
73
+ [<Theory(Skip = "Remove to run test")>]
74
+ [<InlineData("28", 1)>]
75
+ [<InlineData("13 2\n16 3\n19 4", 2)>]
76
+ [<InlineData("289 21903\n23 218\n23 21", 2)>]
77
+ [<InlineData("11 12 13\n14 15 16\n17 18 19\n18 17 16", 3)>]
78
+ member this.``Number of columns`` (input: string) expected =
79
+ let matrix = fromString input
80
+ cols matrix |> Array.length |> should equal expected
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,7 @@
1
+ module Meetup
2
+
3
+ open System
4
+
5
+ type Schedule = First | Second | Third | Fourth | Last | Teenth
6
+
7
+ let meetupDay dayOfWeek schedule year month: DateTime = failwith "You need to implement this function."