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
@@ -0,0 +1,3 @@
1
+ module Accumulate
2
+
3
+ let accumulate<'a, 'b> (func: 'a -> 'b) (input: 'a list): 'b list = 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="Accumulate.fs" />
11
+ <Compile Include="AccumulateTest.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,39 +1,35 @@
1
- module AccumulateTest
1
+ module AccumulateTest
2
2
 
3
3
  open System
4
- open NUnit.Framework
4
+ open Xunit
5
+ open FsUnit.Xunit
5
6
  open Accumulate
6
7
 
7
8
  let reverse (str:string) = new string(str.ToCharArray() |> Array.rev)
8
9
 
9
- [<Test>]
10
+ [<Fact>]
10
11
  let ``Empty accumulation produces empty accumulation`` () =
11
- Assert.That(accumulate (fun x -> x + 1) List.empty, Is.EqualTo(List.empty))
12
+ accumulate (fun x -> x + 1) List.empty |> should be Empty
12
13
 
13
- [<Test>]
14
- [<Ignore("Remove to run test")>]
14
+ [<Fact(Skip = "Remove to run test")>]
15
15
  let ``Identity accumulation returns unmodified list`` () =
16
- Assert.That(accumulate id [1; 2; 3], Is.EqualTo([1; 2; 3]))
16
+ accumulate id [1; 2; 3] |> should equal [1; 2; 3]
17
17
 
18
- [<Test>]
19
- [<Ignore("Remove to run test")>]
18
+ [<Fact(Skip = "Remove to run test")>]
20
19
  let ``Accumulate squares`` () =
21
- Assert.That(accumulate (fun x -> x * x) [1; 2; 3], Is.EqualTo([1; 4; 9]))
20
+ accumulate (fun x -> x * x) [1; 2; 3] |> should equal [1; 4; 9]
22
21
 
23
- [<Test>]
24
- [<Ignore("Remove to run test")>]
22
+ [<Fact(Skip = "Remove to run test")>]
25
23
  let ``Accumulate upcases`` () =
26
- Assert.That(accumulate (fun (x:string) -> x.ToUpper()) ["hello"; "world"],
27
- Is.EqualTo(["HELLO"; "WORLD"]))
24
+ accumulate (fun (x:string) -> x.ToUpper()) ["hello"; "world"]
25
+ |> should equal ["HELLO"; "WORLD"]
28
26
 
29
- [<Test>]
30
- [<Ignore("Remove to run test")>]
27
+ [<Fact(Skip = "Remove to run test")>]
31
28
  let ``Accumulate reversed strings`` () =
32
- Assert.That(accumulate reverse (List.ofArray ("the quick brown fox etc".Split(' '))),
33
- Is.EqualTo(List.ofArray ("eht kciuq nworb xof cte".Split(' '))))
29
+ accumulate reverse (List.ofArray ("the quick brown fox etc".Split(' ')))
30
+ |> should equal (List.ofArray("eht kciuq nworb xof cte".Split(' ')))
34
31
 
35
- [<Test>]
36
- [<Ignore("Remove to run test")>]
32
+ [<Fact(Skip = "Remove to run test")>]
37
33
  let ``Accumulate within accumulate`` () =
38
- Assert.That(accumulate (fun (x:string) -> String.Join(" ", accumulate (fun y -> x + y) ["1"; "2"; "3"])) ["a"; "b"; "c"],
39
- Is.EqualTo(["a1 a2 a3"; "b1 b2 b3"; "c1 c2 c3"]))
34
+ accumulate (fun (x:string) -> String.concat " " (accumulate (fun y -> x + y) ["1"; "2"; "3"])) ["a"; "b"; "c"]
35
+ |> should equal ["a1 a2 a3"; "b1 b2 b3"; "c1 c2 c3"]
@@ -1,3 +1,4 @@
1
1
  ## Hints
2
2
  For this exercise the following F# feature comes in handy:
3
3
  - [Tail recursion](https://blogs.msdn.microsoft.com/fsharpteam/2011/07/08/tail-calls-in-f/) Prevent stack overflows with large input by using tail recursion. While there are no test cases checking explicitly for this, using tail recursion leads to a more performant solution. Another good resource on tail recursion is [this blog post](http://blog.ploeh.dk/2015/12/22/tail-recurse/).
4
+ - [Type inference](https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/generics/#implicitly-generic-constructs) The F# compiler can automatically infer types, which means you often don't have to add any types at all. For more information on how this works and its advantages, see [this page](https://fsharpforfunandprofit.com/posts/type-inference/).
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module Acronym
2
+
3
+ let acronym phrase = 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="Acronym.fs" />
11
+ <Compile Include="AcronymTest.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,58 @@
1
1
  module AcronymTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
  open Acronym
5
6
 
6
- [<Test>]
7
+ [<Fact>]
7
8
  let ``Empty string abbreviated to empty string`` () =
8
- Assert.That(acronym "", Is.EqualTo(""))
9
+ acronym "" |> should equal ""
9
10
 
10
- [<Test>]
11
- [<Ignore("Remove to run test")>]
11
+ [<Fact(Skip = "Remove to run test")>]
12
12
  let ``Basic`` () =
13
13
  let phrase = "Portable Network Graphics"
14
14
  let expected = "PNG"
15
15
  let actual = acronym phrase
16
- Assert.That(expected, Is.EqualTo(actual))
16
+ expected |> should equal actual
17
17
 
18
- [<Test>]
19
- [<Ignore("Remove to run test")>]
18
+ [<Fact(Skip = "Remove to run test")>]
20
19
  let ``Lowercase words`` () =
21
20
  let phrase = "Ruby on Rails"
22
21
  let expected = "ROR"
23
22
  let actual = acronym phrase
24
- Assert.That(expected, Is.EqualTo(actual))
23
+ expected |> should equal actual
25
24
 
26
- [<Test>]
27
- [<Ignore("Remove to run test")>]
25
+ [<Fact(Skip = "Remove to run test")>]
28
26
  let ``Camel case`` () =
29
27
  let phrase = "HyperText Markup Language"
30
28
  let expected = "HTML"
31
29
  let actual = acronym phrase
32
- Assert.That(expected, Is.EqualTo(actual))
30
+ expected |> should equal actual
33
31
 
34
- [<Test>]
35
- [<Ignore("Remove to run test")>]
32
+ [<Fact(Skip = "Remove to run test")>]
36
33
  let ``Punctuation`` () =
37
34
  let phrase = "First In, First Out"
38
35
  let expected = "FIFO"
39
36
  let actual = acronym phrase
40
- Assert.That(expected, Is.EqualTo(actual))
37
+ expected |> should equal actual
41
38
 
42
- [<Test>]
43
- [<Ignore("Remove to run test")>]
39
+ [<Fact(Skip = "Remove to run test")>]
44
40
  let ``All-Caps words`` () =
45
41
  let phrase = "PHP: Hypertext Preprocessor"
46
42
  let expected = "PHP"
47
43
  let actual = acronym phrase
48
- Assert.That(expected, Is.EqualTo(actual))
44
+ expected |> should equal actual
49
45
 
50
- [<Test>]
51
- [<Ignore("Remove to run test")>]
46
+ [<Fact(Skip = "Remove to run test")>]
52
47
  let ``Non-acronym all-caps word`` () =
53
48
  let phrase = "GNU Image Manipulation Program"
54
49
  let expected = "GIMP"
55
50
  let actual = acronym phrase
56
- Assert.That(expected, Is.EqualTo(actual))
51
+ expected |> should equal actual
57
52
 
58
- [<Test>]
59
- [<Ignore("Remove to run test")>]
53
+ [<Fact(Skip = "Remove to run test")>]
60
54
  let ``Hyphenated`` () =
61
55
  let phrase = "Complementary metal-oxide semiconductor"
62
56
  let expected = "CMOS"
63
57
  let actual = acronym phrase
64
- Assert.That(expected, Is.EqualTo(actual))
58
+ expected |> should equal actual
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module AllYourBase
2
+
3
+ let rebase inB inDigits outB = 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="AllYourBase.fs" />
11
+ <Compile Include="AllYourBaseTest.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,193 +1,174 @@
1
- module AllYourBaseTest
1
+ module AllYourBaseTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
 
5
6
  open AllYourBase
6
7
 
7
- [<Test>]
8
+ [<Fact>]
8
9
  let ``Single bit one to decimal`` () =
9
10
  let inputBase = 2
10
11
  let inputDigits = [1]
11
12
  let outputBase = 10
12
13
  let outputDigits = Some [1]
13
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
14
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
14
15
 
15
- [<Test>]
16
- [<Ignore("Remove to run test")>]
16
+ [<Fact(Skip = "Remove to run test")>]
17
17
  let ``Binary to single decimal`` () =
18
18
  let inputBase = 2
19
19
  let inputDigits = [1; 0; 1]
20
20
  let outputBase = 10
21
21
  let outputDigits = Some [5]
22
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
22
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
23
23
 
24
- [<Test>]
25
- [<Ignore("Remove to run test")>]
24
+ [<Fact(Skip = "Remove to run test")>]
26
25
  let ``Single decimal to binary`` () =
27
26
  let inputBase = 10
28
27
  let inputDigits = [5]
29
28
  let outputBase = 2
30
29
  let outputDigits = Some [1; 0; 1]
31
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
30
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
32
31
 
33
- [<Test>]
34
- [<Ignore("Remove to run test")>]
32
+ [<Fact(Skip = "Remove to run test")>]
35
33
  let ``Binary to multiple decimal`` () =
36
34
  let inputBase = 2
37
35
  let inputDigits = [1; 0; 1; 0; 1; 0]
38
36
  let outputBase = 10
39
37
  let outputDigits = Some [4; 2]
40
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
38
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
41
39
 
42
- [<Test>]
43
- [<Ignore("Remove to run test")>]
40
+ [<Fact(Skip = "Remove to run test")>]
44
41
  let ``Decimal to binary`` () =
45
42
  let inputBase = 10
46
43
  let inputDigits = [4; 2]
47
44
  let outputBase = 2
48
45
  let outputDigits = Some [1; 0; 1; 0; 1; 0]
49
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
46
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
50
47
 
51
- [<Test>]
52
- [<Ignore("Remove to run test")>]
48
+ [<Fact(Skip = "Remove to run test")>]
53
49
  let ``Trinary to hexadecimal`` () =
54
50
  let inputBase = 3
55
51
  let inputDigits = [1; 1; 2; 0]
56
52
  let outputBase = 16
57
53
  let outputDigits = Some [2; 10]
58
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
54
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
59
55
 
60
- [<Test>]
61
- [<Ignore("Remove to run test")>]
56
+ [<Fact(Skip = "Remove to run test")>]
62
57
  let ``Hexadecimal to trinary`` () =
63
58
  let inputBase = 16
64
59
  let inputDigits = [2; 10]
65
60
  let outputBase = 3
66
61
  let outputDigits = Some [1; 1; 2; 0]
67
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
62
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
68
63
 
69
- [<Test>]
70
- [<Ignore("Remove to run test")>]
64
+ [<Fact(Skip = "Remove to run test")>]
71
65
  let ``15-bit integer`` () =
72
66
  let inputBase = 97
73
67
  let inputDigits = [3; 46; 60]
74
68
  let outputBase = 73
75
69
  let outputDigits = Some [6; 10; 45]
76
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
70
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
77
71
 
78
- [<Test>]
79
- [<Ignore("Remove to run test")>]
72
+ [<Fact(Skip = "Remove to run test")>]
80
73
  let ``Empty list`` () =
81
74
  let inputBase = 2
82
75
  let inputDigits = []
83
76
  let outputBase = 10
84
77
  let outputDigits = None
85
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
78
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
86
79
 
87
- [<Test>]
88
- [<Ignore("Remove to run test")>]
80
+ [<Fact(Skip = "Remove to run test")>]
89
81
  let ``Single zero`` () =
90
82
  let inputBase = 10
91
83
  let inputDigits = [0]
92
84
  let outputBase = 2
93
85
  let outputDigits = Some [0]
94
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
86
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
95
87
 
96
- [<Test>]
97
- [<Ignore("Remove to run test")>]
88
+ [<Fact(Skip = "Remove to run test")>]
98
89
  let ``Multiple zeros`` () =
99
90
  let inputBase = 10
100
91
  let inputDigits = [0; 0; 0]
101
92
  let outputBase = 2
102
93
  let outputDigits = Some [0]
103
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
94
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
104
95
 
105
- [<Test>]
106
- [<Ignore("Remove to run test")>]
96
+ [<Fact(Skip = "Remove to run test")>]
107
97
  let ``Leading zeros`` () =
108
98
  let inputBase = 7
109
99
  let inputDigits = [0; 6; 0]
110
100
  let outputBase = 10
111
101
  let outputDigits = Some [4; 2]
112
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
102
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
113
103
 
114
- [<Test>]
115
- [<Ignore("Remove to run test")>]
104
+ [<Fact(Skip = "Remove to run test")>]
116
105
  let ``Negative digit`` () =
117
106
  let inputBase = 2
118
107
  let inputDigits = [1; -1; 1; 0; 1; 0]
119
108
  let outputBase = 10
120
109
  let outputDigits = None
121
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
110
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
122
111
 
123
- [<Test>]
124
- [<Ignore("Remove to run test")>]
112
+ [<Fact(Skip = "Remove to run test")>]
125
113
  let ``Invalid positive digit`` () =
126
114
  let inputBase = 2
127
115
  let inputDigits = [1; 2; 1; 0; 1; 0]
128
116
  let outputBase = 10
129
117
  let outputDigits = None
130
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
118
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
131
119
 
132
- [<Test>]
133
- [<Ignore("Remove to run test")>]
120
+ [<Fact(Skip = "Remove to run test")>]
134
121
  let ``First base is one`` () =
135
122
  let inputBase = 1
136
123
  let inputDigits = []
137
124
  let outputBase = 10
138
125
  let outputDigits = None
139
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
126
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
140
127
 
141
- [<Test>]
142
- [<Ignore("Remove to run test")>]
128
+ [<Fact(Skip = "Remove to run test")>]
143
129
  let ``Second base is one`` () =
144
130
  let inputBase = 2
145
131
  let inputDigits = [1; 0; 1; 0; 1; 0]
146
132
  let outputBase = 1
147
133
  let outputDigits = None
148
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
134
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
149
135
 
150
- [<Test>]
151
- [<Ignore("Remove to run test")>]
136
+ [<Fact(Skip = "Remove to run test")>]
152
137
  let ``First base is zero`` () =
153
138
  let inputBase = 0
154
139
  let inputDigits = []
155
140
  let outputBase = 10
156
141
  let outputDigits = None
157
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
142
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
158
143
 
159
- [<Test>]
160
- [<Ignore("Remove to run test")>]
144
+ [<Fact(Skip = "Remove to run test")>]
161
145
  let ``Second base is zero`` () =
162
146
  let inputBase = 10
163
147
  let inputDigits = [7]
164
148
  let outputBase = 0
165
149
  let outputDigits = None
166
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
150
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
167
151
 
168
- [<Test>]
169
- [<Ignore("Remove to run test")>]
152
+ [<Fact(Skip = "Remove to run test")>]
170
153
  let ``First base is negative`` () =
171
154
  let inputBase = -2
172
155
  let inputDigits = [1]
173
156
  let outputBase = 10
174
157
  let outputDigits = None
175
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
158
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
176
159
 
177
- [<Test>]
178
- [<Ignore("Remove to run test")>]
160
+ [<Fact(Skip = "Remove to run test")>]
179
161
  let ``Second base is negative`` () =
180
162
  let inputBase = 2
181
163
  let inputDigits = [1]
182
164
  let outputBase = -7
183
165
  let outputDigits = None
184
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
166
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
185
167
 
186
- [<Test>]
187
- [<Ignore("Remove to run test")>]
168
+ [<Fact(Skip = "Remove to run test")>]
188
169
  let ``Both bases are negative`` () =
189
170
  let inputBase = -2
190
171
  let inputDigits = [1]
191
172
  let outputBase = -7
192
173
  let outputDigits = None
193
- Assert.That(rebase inputBase inputDigits outputBase, Is.EqualTo(outputDigits))
174
+ rebase inputBase inputDigits outputBase |> should equal outputDigits
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,9 @@
1
+ module Allergies
2
+
3
+ open System
4
+
5
+ // TODO: define the Allergen type
6
+
7
+ let allergicTo allergen codedAllergies = failwith "You need to implement this function."
8
+
9
+ let allergies codedAllergies = 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="Allergies.fs" />
11
+ <Compile Include="AllergiesTest.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,74 +1,70 @@
1
- module AllergiesTest
1
+ module AllergiesTest
2
2
 
3
3
  open System
4
- open NUnit.Framework
4
+ open Xunit
5
+ open FsUnit.Xunit
5
6
  open Allergies
6
7
 
7
- [<Test>]
8
+ [<Fact>]
8
9
  let ``No allergies means not allergic`` () =
9
- Assert.That(allergicTo Allergen.Peanuts 0, Is.False)
10
- Assert.That(allergicTo Allergen.Cats 0, Is.False)
11
- Assert.That(allergicTo Allergen.Strawberries 0, Is.False)
10
+ allergicTo Allergen.Peanuts 0 |> should equal false
11
+ allergicTo Allergen.Cats 0 |> should equal false
12
+ allergicTo Allergen.Strawberries 0 |> should equal false
12
13
 
13
- [<Test>]
14
- [<Ignore("Remove to run test")>]
14
+ [<Fact(Skip = "Remove to run test")>]
15
15
  let ``Allergic to eggs`` () =
16
- Assert.That(allergicTo Allergen.Eggs 1, Is.True)
16
+ allergicTo Allergen.Eggs 1 |> should equal true
17
17
 
18
- [<Test>]
19
- [<Ignore("Remove to run test")>]
18
+ [<Fact(Skip = "Remove to run test")>]
20
19
  let ``Allergic to eggs in addition to other stuff`` () =
21
- Assert.That(allergicTo Allergen.Eggs 5, Is.True)
22
- Assert.That(allergicTo Allergen.Shellfish 5, Is.True)
23
- Assert.That(allergicTo Allergen.Strawberries 5, Is.False)
20
+ allergicTo Allergen.Eggs 5 |> should equal true
21
+ allergicTo Allergen.Shellfish 5 |> should equal true
22
+ allergicTo Allergen.Strawberries 5 |> should equal false
24
23
 
25
- [<Test>]
26
- [<Ignore("Remove to run test")>]
24
+ [<Fact(Skip = "Remove to run test")>]
27
25
  let ``No allergies at all`` () =
28
- Assert.That(allergies 0, Is.Empty)
26
+ allergies 0 |> should be Empty
29
27
 
30
- [<Test>]
31
- [<Ignore("Remove to run test")>]
28
+ [<Fact(Skip = "Remove to run test")>]
32
29
  let ``Allergic to just eggs`` () =
33
- Assert.That(allergies 1, Is.EqualTo([Allergen.Eggs]))
30
+ allergies 1 |> should equal [Allergen.Eggs]
34
31
 
35
- [<Test>]
36
- [<Ignore("Remove to run test")>]
32
+ [<Fact(Skip = "Remove to run test")>]
37
33
  let ``Allergic to just peanuts`` () =
38
- Assert.That(allergies 2, Is.EqualTo([Allergen.Peanuts]))
34
+ allergies 2 |> should equal [Allergen.Peanuts]
39
35
 
40
- [<Test>]
41
- [<Ignore("Remove to run test")>]
36
+ [<Fact(Skip = "Remove to run test")>]
42
37
  let ``Allergic to eggs and peanuts`` () =
43
- Assert.That(allergies 3, Is.EqualTo([Allergen.Eggs; Allergen.Peanuts]))
38
+ allergies 3 |> should equal [Allergen.Eggs; Allergen.Peanuts]
44
39
 
45
- [<Test>]
46
- [<Ignore("Remove to run test")>]
40
+ [<Fact(Skip = "Remove to run test")>]
47
41
  let ``Allergic to lots of stuff`` () =
48
- Assert.That(allergies 248,
49
- Is.EqualTo([Allergen.Strawberries; Allergen.Tomatoes; Allergen.Chocolate; Allergen.Pollen; Allergen.Cats]))
42
+ allergies 248 |> should equal
43
+ [ Allergen.Strawberries;
44
+ Allergen.Tomatoes;
45
+ Allergen.Chocolate;
46
+ Allergen.Pollen;
47
+ Allergen.Cats ]
50
48
 
51
- [<Test>]
52
- [<Ignore("Remove to run test")>]
49
+ [<Fact(Skip = "Remove to run test")>]
53
50
  let ``Allergic to everything`` () =
54
- Assert.That(allergies 255,
55
- Is.EqualTo([Allergen.Eggs;
56
- Allergen.Peanuts;
57
- Allergen.Shellfish;
58
- Allergen.Strawberries;
59
- Allergen.Tomatoes;
60
- Allergen.Chocolate;
61
- Allergen.Pollen;
62
- Allergen.Cats]))
51
+ allergies 255 |> should equal
52
+ [ Allergen.Eggs;
53
+ Allergen.Peanuts;
54
+ Allergen.Shellfish;
55
+ Allergen.Strawberries;
56
+ Allergen.Tomatoes;
57
+ Allergen.Chocolate;
58
+ Allergen.Pollen;
59
+ Allergen.Cats ]
63
60
 
64
- [<Test>]
65
- [<Ignore("Remove to run test")>]
61
+ [<Fact(Skip = "Remove to run test")>]
66
62
  let ``Ignore non allergen score parts`` () =
67
- Assert.That(allergies 509,
68
- Is.EqualTo([Allergen.Eggs;
69
- Allergen.Shellfish;
70
- Allergen.Strawberries;
71
- Allergen.Tomatoes;
72
- Allergen.Chocolate;
73
- Allergen.Pollen;
74
- Allergen.Cats]))
63
+ allergies 509 |> should equal
64
+ [ Allergen.Eggs;
65
+ Allergen.Shellfish;
66
+ Allergen.Strawberries;
67
+ Allergen.Tomatoes;
68
+ Allergen.Chocolate;
69
+ Allergen.Pollen;
70
+ Allergen.Cats ]
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module Alphametics
2
+
3
+ // TODO: implement this module