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,23 +1,27 @@
1
- module PerfectNumbersTest
1
+ module PerfectNumbersTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
 
5
6
  open PerfectNumbers
6
7
 
7
- [<TestCase(3)>]
8
- [<TestCase(7, Ignore = "Remove to run test case")>]
9
- [<TestCase(13, Ignore = "Remove to run test case")>]
8
+ [<Theory(Skip = "Remove to run test")>]
9
+ [<InlineData(3)>]
10
+ [<InlineData(7)>]
11
+ [<InlineData(13)>]
10
12
  let ``Can classify deficient numbers`` (number) =
11
- Assert.That(classify number, Is.EqualTo(Deficient))
13
+ classify number |> should equal Deficient
12
14
 
13
- [<TestCase(6, Ignore = "Remove to run test case")>]
14
- [<TestCase(28, Ignore = "Remove to run test case")>]
15
- [<TestCase(496, Ignore = "Remove to run test case")>]
15
+ [<Theory(Skip = "Remove to run test")>]
16
+ [<InlineData(6)>]
17
+ [<InlineData(28)>]
18
+ [<InlineData(496)>]
16
19
  let ``Can classify perfect numbers`` (number) =
17
- Assert.That(classify number, Is.EqualTo(Perfect))
20
+ classify number |> should equal Perfect
18
21
 
19
- [<TestCase(12, Ignore = "Remove to run test case")>]
20
- [<TestCase(18, Ignore = "Remove to run test case")>]
21
- [<TestCase(20, Ignore = "Remove to run test case")>]
22
+ [<Theory(Skip = "Remove to run test")>]
23
+ [<InlineData(12)>]
24
+ [<InlineData(18)>]
25
+ [<InlineData(20)>]
22
26
  let ``Can classify abundant numbers`` (number) =
23
- Assert.That(classify number, Is.EqualTo(Abundant))
27
+ classify number |> should equal Abundant
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module PhoneNumber
2
+
3
+ let parsePhoneNumber input = 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="PhoneNumber.fs" />
11
+ <Compile Include="PhoneNumberTest.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,54 +1,46 @@
1
- module PhoneNumberTest
1
+ module PhoneNumberTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
 
5
6
  open PhoneNumber
6
7
 
7
- [<Test>]
8
+ [<Fact>]
8
9
  let ``Cleans phone number`` () =
9
- Assert.That(parsePhoneNumber "(123) 456-7890", Is.EqualTo(Some "1234567890"))
10
+ parsePhoneNumber "(123) 456-7890" |> should equal <| Some "1234567890"
10
11
 
11
- [<Test>]
12
- [<Ignore("Remove to run test")>]
12
+ [<Fact(Skip = "Remove to run test")>]
13
13
  let ``Cleans phone number with dots`` () =
14
- Assert.That(parsePhoneNumber "123.456.7890", Is.EqualTo(Some "1234567890"))
14
+ parsePhoneNumber "123.456.7890" |> should equal <| Some "1234567890"
15
15
 
16
- [<Test>]
17
- [<Ignore("Remove to run test")>]
16
+ [<Fact(Skip = "Remove to run test")>]
18
17
  let ``Valid when 11 digits and first is 1`` () =
19
- Assert.That(parsePhoneNumber "11234567890", Is.EqualTo(Some "1234567890"))
18
+ parsePhoneNumber "11234567890" |> should equal <| Some "1234567890"
20
19
 
21
- [<Test>]
22
- [<Ignore("Remove to run test")>]
20
+ [<Fact(Skip = "Remove to run test")>]
23
21
  let ``Invalid when 11 digits`` () =
24
- Assert.That(parsePhoneNumber "21234567890", Is.EqualTo(None))
22
+ parsePhoneNumber "21234567890" |> should equal None
25
23
 
26
- [<Test>]
27
- [<Ignore("Remove to run test")>]
24
+ [<Fact(Skip = "Remove to run test")>]
28
25
  let ``Invalid when 9 digits`` () =
29
- Assert.That(parsePhoneNumber "123456789", Is.EqualTo(None))
26
+ parsePhoneNumber "123456789" |> should equal None
30
27
 
31
- [<Test>]
32
- [<Ignore("Remove to run test")>]
28
+ [<Fact(Skip = "Remove to run test")>]
33
29
  let ``Invalid when 12 digits`` () =
34
- Assert.That(parsePhoneNumber "123456789012", Is.EqualTo(None))
30
+ parsePhoneNumber "123456789012" |> should equal None
35
31
 
36
- [<Test>]
37
- [<Ignore("Remove to run test")>]
32
+ [<Fact(Skip = "Remove to run test")>]
38
33
  let ``Invalid when empty`` () =
39
- Assert.That(parsePhoneNumber "", Is.EqualTo(None))
34
+ parsePhoneNumber "" |> should equal None
40
35
 
41
- [<Test>]
42
- [<Ignore("Remove to run test")>]
36
+ [<Fact(Skip = "Remove to run test")>]
43
37
  let ``Invalid when no digits present`` () =
44
- Assert.That(parsePhoneNumber " (-) ", Is.EqualTo(None))
38
+ parsePhoneNumber " (-) " |> should equal None
45
39
 
46
- [<Test>]
47
- [<Ignore("Remove to run test")>]
40
+ [<Fact(Skip = "Remove to run test")>]
48
41
  let ``Valid with leading characters`` () =
49
- Assert.That(parsePhoneNumber "my parsePhoneNumber is 123 456 7890", Is.EqualTo(Some "1234567890"))
42
+ parsePhoneNumber "my parsePhoneNumber is 123 456 7890" |> should equal <| Some "1234567890"
50
43
 
51
- [<Test>]
52
- [<Ignore("Remove to run test")>]
44
+ [<Fact(Skip = "Remove to run test")>]
53
45
  let ``Valid with trailing characters`` () =
54
- Assert.That(parsePhoneNumber "123 456 7890 - bob", Is.EqualTo(Some "1234567890"))
46
+ parsePhoneNumber "123 456 7890 - bob" |> should equal <| Some "1234567890"
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module PigLatin
2
+
3
+ let translate input = 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="PigLatin.fs" />
11
+ <Compile Include="PigLatinTest.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,64 +1,59 @@
1
- module PigLatinTest
1
+ module PigLatinTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
  open PigLatin
5
6
 
6
- [<TestCase("apple", ExpectedResult = "appleay")>]
7
- [<TestCase("ear", ExpectedResult = "earay", Ignore = "Remove to run test case")>]
8
- [<TestCase("igloo", ExpectedResult = "iglooay", Ignore = "Remove to run test case")>]
9
- [<TestCase("object", ExpectedResult = "objectay", Ignore = "Remove to run test case")>]
10
- [<TestCase("under", ExpectedResult = "underay", Ignore = "Remove to run test case")>]
11
- let ``Ay is added to words that start with vowels`` (word) =
12
- translate word
13
-
14
- [<TestCase("pig", ExpectedResult = "igpay", Ignore = "Remove to run test case")>]
15
- [<TestCase("koala", ExpectedResult = "oalakay", Ignore = "Remove to run test case")>]
16
- [<TestCase("yellow", ExpectedResult = "ellowyay", Ignore = "Remove to run test case")>]
17
- [<TestCase("xenon", ExpectedResult = "enonxay", Ignore = "Remove to run test case")>]
18
- let ``First letter and ay are moved to the end of words that start with consonants`` (word) =
19
- translate word
20
-
21
- [<Test>]
22
- [<Ignore("Remove to run test")>]
7
+ [<Theory(Skip = "Remove to run test")>]
8
+ [<InlineData("apple", "appleay")>]
9
+ [<InlineData("ear", "earay")>]
10
+ [<InlineData("igloo", "iglooay")>]
11
+ [<InlineData("object", "objectay")>]
12
+ [<InlineData("under", "underay")>]
13
+ let ``Ay is added to words that start with vowels`` (word, expected) =
14
+ translate word |> should equal expected
15
+
16
+ [<Theory(Skip = "Remove to run test")>]
17
+ [<InlineData("pig", "igpay")>]
18
+ [<InlineData("koala", "oalakay")>]
19
+ [<InlineData("yellow", "ellowyay")>]
20
+ [<InlineData("xenon", "enonxay")>]
21
+ let ``First letter and ay are moved to the end of words that start with consonants`` (word, expected) =
22
+ translate word |> should equal expected
23
+
24
+
25
+ [<Fact(Skip = "Remove to run test")>]
23
26
  let ``Ch is treated like a single consonant`` () =
24
- Assert.That(translate "chair", Is.EqualTo("airchay"))
27
+ translate "chair" |> should equal "airchay"
25
28
 
26
- [<Test>]
27
- [<Ignore("Remove to run test")>]
29
+ [<Fact(Skip = "Remove to run test")>]
28
30
  let ``Qu is treated like a single consonant`` () =
29
- Assert.That(translate "queen", Is.EqualTo("eenquay"))
31
+ translate "queen" |> should equal "eenquay"
30
32
 
31
- [<Test>]
32
- [<Ignore("Remove to run test")>]
33
+ [<Fact(Skip = "Remove to run test")>]
33
34
  let ``Qu and a single preceding consonant are treated like a single consonant`` () =
34
- Assert.That(translate "square", Is.EqualTo("aresquay"))
35
+ translate "square" |> should equal "aresquay"
35
36
 
36
- [<Test>]
37
- [<Ignore("Remove to run test")>]
37
+ [<Fact(Skip = "Remove to run test")>]
38
38
  let ``Th is treated like a single consonant`` () =
39
- Assert.That(translate "therapy", Is.EqualTo("erapythay"))
39
+ translate "therapy" |> should equal "erapythay"
40
40
 
41
- [<Test>]
42
- [<Ignore("Remove to run test")>]
41
+ [<Fact(Skip = "Remove to run test")>]
43
42
  let ``Thr is treated like a single consonant`` () =
44
- Assert.That(translate "thrush", Is.EqualTo("ushthray"))
43
+ translate "thrush" |> should equal "ushthray"
45
44
 
46
- [<Test>]
47
- [<Ignore("Remove to run test")>]
45
+ [<Fact(Skip = "Remove to run test")>]
48
46
  let ``Sch is treated like a single consonant`` () =
49
- Assert.That(translate "school", Is.EqualTo("oolschay"))
47
+ translate "school" |> should equal "oolschay"
50
48
 
51
- [<Test>]
52
- [<Ignore("Remove to run test")>]
49
+ [<Fact(Skip = "Remove to run test")>]
53
50
  let ``Yt is treated like a single vowel`` () =
54
- Assert.That(translate "yttria", Is.EqualTo("yttriaay"))
51
+ translate "yttria" |> should equal "yttriaay"
55
52
 
56
- [<Test>]
57
- [<Ignore("Remove to run test")>]
53
+ [<Fact(Skip = "Remove to run test")>]
58
54
  let ``Xr is treated like a single vowel`` () =
59
- Assert.That(translate "xray", Is.EqualTo("xrayay"))
55
+ translate "xray" |> should equal "xrayay"
60
56
 
61
- [<Test>]
62
- [<Ignore("Remove to run test")>]
57
+ [<Fact(Skip = "Remove to run test")>]
63
58
  let ``Phrases are translated`` () =
64
- Assert.That(translate "quick fast run", Is.EqualTo("ickquay astfay unray"))
59
+ translate "quick fast run" |> should equal "ickquay astfay unray"
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module Poker
2
+
3
+ // TODO: implement this module
@@ -0,0 +1,22 @@
1
+ <Project Sdk="Microsoft.NET.Sdk">
2
+
3
+ <PropertyGroup>
4
+ <TargetFramework>netcoreapp2.0</TargetFramework>
5
+
6
+ <IsPackable>false</IsPackable>
7
+ </PropertyGroup>
8
+
9
+ <ItemGroup>
10
+ <Compile Include="Poker.fs" />
11
+ <Compile Include="PokerTest.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,134 +1,118 @@
1
- module PokerTest
1
+ module PokerTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
 
5
6
  open Poker
6
7
 
7
- [<Test>]
8
+ [<Fact>]
8
9
  let ``One hand`` () =
9
10
  let hand = "4S 5S 7H 8D JC"
10
- Assert.That(bestHands [hand], Is.EqualTo([hand]))
11
+ bestHands [hand] |> should equal [hand]
11
12
 
12
- [<Test>]
13
- [<Ignore("Remove to run test")>]
13
+ [<Fact(Skip = "Remove to run test")>]
14
14
  let ``Nothing vs one pair`` () =
15
15
  let nothing = "4S 5H 6S 8D JH"
16
16
  let pairOf4 = "2S 4H 6S 4D JH"
17
- Assert.That(bestHands [nothing; pairOf4], Is.EqualTo([pairOf4]))
17
+ bestHands [nothing; pairOf4] |> should equal [pairOf4]
18
18
 
19
- [<Test>]
20
- [<Ignore("Remove to run test")>]
19
+ [<Fact(Skip = "Remove to run test")>]
21
20
  let ``Two pairs`` () =
22
21
  let pairOf2 = "4S 2H 6S 2D JH"
23
22
  let pairOf4 = "2S 4H 6S 4D JH"
24
- Assert.That(bestHands [pairOf2; pairOf4], Is.EqualTo([pairOf4]))
23
+ bestHands [pairOf2; pairOf4] |> should equal [pairOf4]
25
24
 
26
- [<Test>]
27
- [<Ignore("Remove to run test")>]
25
+ [<Fact(Skip = "Remove to run test")>]
28
26
  let ``One pair vs double pair`` () =
29
27
  let pairOf8 = "2S 8H 6S 8D JH"
30
28
  let doublePair = "4S 5H 4S 8D 5H"
31
- Assert.That(bestHands [pairOf8; doublePair], Is.EqualTo([doublePair]))
29
+ bestHands [pairOf8; doublePair] |> should equal [doublePair]
32
30
 
33
- [<Test>]
34
- [<Ignore("Remove to run test")>]
31
+ [<Fact(Skip = "Remove to run test")>]
35
32
  let ``Two double pairs`` () =
36
33
  let doublePair2and8 = "2S 8H 2S 8D JH"
37
34
  let doublePair4and5 = "4S 5H 4S 8D 5H"
38
- Assert.That(bestHands [doublePair2and8; doublePair4and5], Is.EqualTo([doublePair2and8]))
35
+ bestHands [doublePair2and8; doublePair4and5] |> should equal [doublePair2and8]
39
36
 
40
- [<Test>]
41
- [<Ignore("Remove to run test")>]
37
+ [<Fact(Skip = "Remove to run test")>]
42
38
  let ``Double pair vs three`` () =
43
39
  let doublePair2and8 = "2S 8H 2S 8D JH"
44
40
  let threeOf4 = "4S 5H 4S 8D 4H"
45
- Assert.That(bestHands [doublePair2and8; threeOf4], Is.EqualTo([threeOf4]))
41
+ bestHands [doublePair2and8; threeOf4] |> should equal [threeOf4]
46
42
 
47
- [<Test>]
48
- [<Ignore("Remove to run test")>]
43
+ [<Fact(Skip = "Remove to run test")>]
49
44
  let ``Two threes`` () =
50
45
  let threeOf2 = "2S 2H 2S 8D JH"
51
46
  let threeOf1 = "4S AH AS 8D AH"
52
- Assert.That(bestHands [threeOf2; threeOf1], Is.EqualTo([threeOf1]))
47
+ bestHands [threeOf2; threeOf1] |> should equal [threeOf1]
53
48
 
54
- [<Test>]
55
- [<Ignore("Remove to run test")>]
49
+ [<Fact(Skip = "Remove to run test")>]
56
50
  let ``Three vs straight`` () =
57
51
  let threeOf4 = "4S 5H 4S 8D 4H"
58
52
  let straight = "3S 4H 2S 6D 5H"
59
- Assert.That(bestHands [threeOf4; straight], Is.EqualTo([straight]))
53
+ bestHands [threeOf4; straight] |> should equal [straight]
60
54
 
61
- [<Test>]
62
- [<Ignore("Remove to run test")>]
55
+ [<Fact(Skip = "Remove to run test")>]
63
56
  let ``Two straights`` () =
64
57
  let straightTo8 = "4S 6H 7S 8D 5H"
65
58
  let straightTo9 = "5S 7H 8S 9D 6H"
66
- Assert.That(bestHands [straightTo8; straightTo9], Is.EqualTo([straightTo9]))
59
+ bestHands [straightTo8; straightTo9] |> should equal [straightTo9]
67
60
 
68
61
  let straightTo1 = "AS QH KS TD JH"
69
62
  let straightTo5 = "4S AH 3S 2D 5H"
70
- Assert.That(bestHands [straightTo1; straightTo5], Is.EqualTo([straightTo1]))
63
+ bestHands [straightTo1; straightTo5] |> should equal [straightTo1]
71
64
 
72
- [<Test>]
73
- [<Ignore("Remove to run test")>]
65
+ [<Fact(Skip = "Remove to run test")>]
74
66
  let ``Straight vs flush`` () =
75
67
  let straightTo8 = "4S 6H 7S 8D 5H"
76
68
  let flushTo7 = "2S 4S 5S 6S 7S"
77
- Assert.That(bestHands [straightTo8; flushTo7], Is.EqualTo([flushTo7]))
69
+ bestHands [straightTo8; flushTo7] |> should equal [flushTo7]
78
70
 
79
- [<Test>]
80
- [<Ignore("Remove to run test")>]
71
+ [<Fact(Skip = "Remove to run test")>]
81
72
  let ``Two flushes`` () =
82
73
  let flushTo8 = "3H 6H 7H 8H 5H"
83
74
  let flushTo7 = "2S 4S 5S 6S 7S"
84
- Assert.That(bestHands [flushTo8; flushTo7], Is.EqualTo([flushTo8]))
75
+ bestHands [flushTo8; flushTo7] |> should equal [flushTo8]
85
76
 
86
- [<Test>]
87
- [<Ignore("Remove to run test")>]
77
+ [<Fact(Skip = "Remove to run test")>]
88
78
  let ``Flush vs full`` () =
89
79
  let flushTo8 = "3H 6H 7H 8H 5H"
90
80
  let full = "4S 5H 4S 5D 4H"
91
- Assert.That(bestHands [full; flushTo8], Is.EqualTo([full]))
81
+ bestHands [full; flushTo8] |> should equal [full]
92
82
 
93
- [<Test>]
94
- [<Ignore("Remove to run test")>]
83
+ [<Fact(Skip = "Remove to run test")>]
95
84
  let ``Two fulls`` () =
96
85
  let fullOf4by9 = "4H 4S 4D 9S 9D"
97
86
  let fullOf5by8 = "5H 5S 5D 8S 8D"
98
- Assert.That(bestHands [fullOf4by9; fullOf5by8], Is.EqualTo([fullOf5by8]))
87
+ bestHands [fullOf4by9; fullOf5by8] |> should equal [fullOf5by8]
99
88
 
100
- [<Test>]
101
- [<Ignore("Remove to run test")>]
89
+ [<Fact(Skip = "Remove to run test")>]
102
90
  let ``Full vs square`` () =
103
91
  let full = "4S 5H 4S 5D 4H"
104
92
  let squareOf3 = "3S 3H 2S 3D 3H"
105
- Assert.That(bestHands [full; squareOf3], Is.EqualTo([squareOf3]))
93
+ bestHands [full; squareOf3] |> should equal [squareOf3]
106
94
 
107
- [<Test>]
108
- [<Ignore("Remove to run test")>]
95
+ [<Fact(Skip = "Remove to run test")>]
109
96
  let ``Two squares`` () =
110
97
  let squareOf2 = "2S 2H 2S 8D 2H"
111
98
  let squareOf5 = "4S 5H 5S 5D 5H"
112
- Assert.That(bestHands [squareOf2; squareOf5], Is.EqualTo([squareOf5]))
99
+ bestHands [squareOf2; squareOf5] |> should equal [squareOf5]
113
100
 
114
- [<Test>]
115
- [<Ignore("Remove to run test")>]
101
+ [<Fact(Skip = "Remove to run test")>]
116
102
  let ``Square vs straight flush`` () =
117
103
  let squareOf5 = "4S 5H 5S 5D 5H"
118
104
  let straightFlushTo9 = "5S 7S 8S 9S 6S"
119
- Assert.That(bestHands [squareOf5; straightFlushTo9], Is.EqualTo([straightFlushTo9]))
105
+ bestHands [squareOf5; straightFlushTo9] |> should equal [straightFlushTo9]
120
106
 
121
- [<Test>]
122
- [<Ignore("Remove to run test")>]
107
+ [<Fact(Skip = "Remove to run test")>]
123
108
  let ``Two straight flushes`` () =
124
109
  let straightFlushTo8 = "4H 6H 7H 8H 5H"
125
110
  let straightFlushTo9 = "5S 7S 8S 9S 6S"
126
- Assert.That(bestHands [straightFlushTo8; straightFlushTo9], Is.EqualTo([straightFlushTo9]))
111
+ bestHands [straightFlushTo8; straightFlushTo9] |> should equal [straightFlushTo9]
127
112
 
128
- [<Test>]
129
- [<Ignore("Remove to run test")>]
113
+ [<Fact(Skip = "Remove to run test")>]
130
114
  let ``Three hand with tie`` () =
131
115
  let spadeStraightTo9 = "9S 8S 7S 6S 5S"
132
116
  let diamondStraightTo9 = "9D 8D 7D 6D 5D"
133
117
  let threeOf4 = "4D 4S 4H QS KS"
134
- Assert.That(bestHands [spadeStraightTo9; diamondStraightTo9; threeOf4], Is.EqualTo([spadeStraightTo9; diamondStraightTo9]))
118
+ bestHands [spadeStraightTo9; diamondStraightTo9; threeOf4] |> should equal [spadeStraightTo9; diamondStraightTo9]
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module Pov
2
+
3
+ // TODO: implement this module
@@ -0,0 +1,22 @@
1
+ <Project Sdk="Microsoft.NET.Sdk">
2
+
3
+ <PropertyGroup>
4
+ <TargetFramework>netcoreapp2.0</TargetFramework>
5
+
6
+ <IsPackable>false</IsPackable>
7
+ </PropertyGroup>
8
+
9
+ <ItemGroup>
10
+ <Compile Include="Pov.fs" />
11
+ <Compile Include="PovTest.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,6 +1,7 @@
1
- module PovTest
1
+ module PovTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
 
5
6
  open Pov
6
7
 
@@ -35,52 +36,43 @@ let cousins' = mkGraph x [
35
36
  mkGraph "cousin-0" [];
36
37
  mkGraph "cousin-1" []]]]]
37
38
 
38
- [<Test>]
39
+ [<Fact>]
39
40
  let ``Reparent singleton`` () =
40
- Assert.That(fromPOV x singleton, Is.EqualTo(Some singleton'))
41
+ fromPOV x singleton |> should equal <| Some singleton'
41
42
 
42
- [<Test>]
43
- [<Ignore("Remove to run test")>]
43
+ [<Fact(Skip = "Remove to run test")>]
44
44
  let ``Reparent flat`` () =
45
- Assert.That(fromPOV x flat, Is.EqualTo(Some flat'))
45
+ fromPOV x flat |> should equal <| Some flat'
46
46
 
47
- [<Test>]
48
- [<Ignore("Remove to run test")>]
47
+ [<Fact(Skip = "Remove to run test")>]
49
48
  let ``Reparent nested`` () =
50
- Assert.That(fromPOV x nested, Is.EqualTo(Some nested'))
49
+ fromPOV x nested |> should equal <| Some nested'
51
50
 
52
- [<Test>]
53
- [<Ignore("Remove to run test")>]
51
+ [<Fact(Skip = "Remove to run test")>]
54
52
  let ``Reparent kids`` () =
55
- Assert.That(fromPOV x kids, Is.EqualTo(Some kids'))
53
+ fromPOV x kids |> should equal <| Some kids'
56
54
 
57
- [<Test>]
58
- [<Ignore("Remove to run test")>]
55
+ [<Fact(Skip = "Remove to run test")>]
59
56
  let ``Reparent cousins`` () =
60
- Assert.That(fromPOV x cousins, Is.EqualTo(Some cousins'))
57
+ fromPOV x cousins |> should equal <| Some cousins'
61
58
 
62
- [<Test>]
63
- [<Ignore("Remove to run test")>]
59
+ [<Fact(Skip = "Remove to run test")>]
64
60
  let ``Reparent from POV of non-existent node`` () =
65
- Assert.That(fromPOV x (leaf "foo"), Is.EqualTo(None))
61
+ fromPOV x (leaf "foo") |> should equal None
66
62
 
67
- [<Test>]
68
- [<Ignore("Remove to run test")>]
63
+ [<Fact(Skip = "Remove to run test")>]
69
64
  let ``Should not be able to find a missing node`` () =
70
65
  let nodes = [singleton; flat; kids; nested; cousins] |> List.map (fromPOV "NOT THERE")
71
- Assert.That(nodes, Is.All.EqualTo(None))
66
+ nodes |> List.iter (should equal None)
72
67
 
73
- [<Test>]
74
- [<Ignore("Remove to run test")>]
68
+ [<Fact(Skip = "Remove to run test")>]
75
69
  let ``Cannot trace between un-connected nodes`` () =
76
- Assert.That(tracePathBetween x "NOT THERE" cousins, Is.EqualTo(None))
70
+ tracePathBetween x "NOT THERE" cousins |> should equal None
77
71
 
78
- [<Test>]
79
- [<Ignore("Remove to run test")>]
72
+ [<Fact(Skip = "Remove to run test")>]
80
73
  let ``Can trace a path from x to cousin`` () =
81
- Assert.That(tracePathBetween x "cousin-1" cousins, Is.EqualTo(Some ["x"; "parent"; "grandparent"; "uncle"; "cousin-1"]))
74
+ tracePathBetween x "cousin-1" cousins |> should equal <| Some ["x"; "parent"; "grandparent"; "uncle"; "cousin-1"]
82
75
 
83
- [<Test>]
84
- [<Ignore("Remove to run test")>]
76
+ [<Fact(Skip = "Remove to run test")>]
85
77
  let ``Can trace from a leaf to a leaf`` () =
86
- Assert.That(tracePathBetween "kid-a" "cousin-0" cousins, Is.EqualTo(Some ["kid-a"; "x"; "parent"; "grandparent"; "uncle"; "cousin-0"]))
78
+ tracePathBetween "kid-a" "cousin-0" cousins |> should equal <| Some ["kid-a"; "x"; "parent"; "grandparent"; "uncle"; "cousin-0"]
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -14,7 +14,7 @@ let primeFactorsFor number =
14
14
  | factor::xs ->
15
15
  match remainder with
16
16
  | _ when remainder <= 1L -> factors |> List.rev
17
- | _ when remainder % factor = 0L -> loop (factor :: factors) (remainder / factor |> int64) possibleFactors
17
+ | _ when remainder % factor = 0L -> loop (int factor :: factors) (remainder / factor |> int64) possibleFactors
18
18
  | _ -> loop factors remainder xs
19
19
 
20
20
  loop [] number (possiblePrimes number)
@@ -0,0 +1,3 @@
1
+ module PrimeFactors
2
+
3
+ let primeFactorsFor number = failwith "You need to implement this function."