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,35 +1,40 @@
1
1
  module LargestSeriesProductTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
5
+ open System
4
6
  open LargestSeriesProduct
5
7
 
6
- [<TestCase("01234567890", 2, ExpectedResult = 72)>]
7
- [<TestCase("1027839564", 3, ExpectedResult = 270, Ignore = "Remove to run test case")>]
8
- let ``Gets the largest product``(digits: string) (seriesLength: int) =
9
- largestProduct digits seriesLength
8
+ [<Theory(Skip = "Remove to run test")>]
9
+ [<InlineData("01234567890", 2, 72)>]
10
+ [<InlineData("1027839564", 3, 270)>]
11
+ let ``Gets the largest product``(digits: string) (seriesLength: int) (expected: int) =
12
+ largestProduct digits seriesLength |> should equal expected
13
+
10
14
 
11
- [<Test>]
12
- [<Ignore("Remove to run test")>]
15
+ [<Fact(Skip = "Remove to run test")>]
13
16
  let ``Largest product works for small numbers`` () =
14
- Assert.That(largestProduct "19" 2, Is.EqualTo(9))
17
+ largestProduct "19" 2 |> should equal 9
15
18
 
16
- [<Test>]
17
- [<Ignore("Remove to run test")>]
19
+ [<Fact(Skip = "Remove to run test")>]
18
20
  let ``Largest product works for large numbers`` () =
19
21
  let LARGE_NUMBER = "73167176531330624919225119674426574742355349194934"
20
- Assert.That(largestProduct LARGE_NUMBER 6, Is.EqualTo(23520))
22
+ largestProduct LARGE_NUMBER 6 |> should equal 23520
21
23
 
22
- [<TestCase("0000", 2, ExpectedResult = 0, Ignore = "Remove to run test case")>]
23
- [<TestCase("99099", 3, ExpectedResult = 0, Ignore = "Remove to run test case")>]
24
- let ``Largest product works if all spans contain zero``(digits: string) (seriesLength: int) =
25
- largestProduct digits seriesLength
24
+ [<Theory(Skip = "Remove to run test")>]
25
+ [<InlineData("0000", 2, 0)>]
26
+ [<InlineData("99099", 3, 0)>]
27
+ let ``Largest product works if all spans contain zero``(digits: string) (seriesLength: int) (expected: int) =
28
+ largestProduct digits seriesLength |> should equal expected
29
+
26
30
 
27
- [<TestCase("", ExpectedResult = 1)>]
28
- [<TestCase("123", ExpectedResult = 1)>]
29
- let ``Largest product for empty span is 1``(digits: string) =
30
- largestProduct digits 0
31
+ [<Theory(Skip = "Remove to run test")>]
32
+ [<InlineData("", 1)>]
33
+ [<InlineData("123", 1)>]
34
+ let ``Largest product for empty span is 1``(digits: string) (expected: int) =
35
+ largestProduct digits 0 |> should equal expected
36
+
31
37
 
32
- [<Test>]
33
- [<Ignore("Remove to run test")>]
38
+ [<Fact(Skip = "Remove to run test")>]
34
39
  let ``Cannot slice empty string with nonzero span`` () =
35
- Assert.That((fun () -> largestProduct "" 1 |> ignore), Throws.Exception)
40
+ (fun () -> largestProduct "" 1 |> ignore) |> should throw typeof<Exception>
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module LeapYear
2
+
3
+ let isLeapYear (year: int): bool = 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="Leap.fs" />
11
+ <Compile Include="LeapTest.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,23 +1,21 @@
1
- module LeapYearTest
1
+ module LeapYearTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
  open LeapYear
5
6
 
6
- [<Test>]
7
+ [<Fact>]
7
8
  let ``Is 1996 a valid leap year`` () =
8
- Assert.That(isLeapYear 1996, Is.True)
9
+ isLeapYear 1996 |> should equal true
9
10
 
10
- [<Test>]
11
- [<Ignore("Remove to run test")>]
11
+ [<Fact(Skip = "Remove to run test")>]
12
12
  let ``Is 1997 an invalid leap year`` () =
13
- Assert.That(isLeapYear 1997, Is.False)
13
+ isLeapYear 1997 |> should equal false
14
14
 
15
- [<Test>]
16
- [<Ignore("Remove to run test")>]
15
+ [<Fact(Skip = "Remove to run test")>]
17
16
  let ``Is the turn of the 20th century an invalid leap year`` () =
18
- Assert.That(isLeapYear 1900, Is.False)
17
+ isLeapYear 1900 |> should equal false
19
18
 
20
- [<Test>]
21
- [<Ignore("Remove to run test")>]
19
+ [<Fact(Skip = "Remove to run test")>]
22
20
  let ``Is the turn of the 25th century a valid leap year`` () =
23
- Assert.That(isLeapYear 2400, Is.True)
21
+ isLeapYear 2400 |> should equal true
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,22 @@
1
+ <Project Sdk="Microsoft.NET.Sdk">
2
+
3
+ <PropertyGroup>
4
+ <TargetFramework>netcoreapp2.0</TargetFramework>
5
+
6
+ <IsPackable>false</IsPackable>
7
+ </PropertyGroup>
8
+
9
+ <ItemGroup>
10
+ <Compile Include="Ledger.fs" />
11
+ <Compile Include="LedgerTest.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,10 +1,11 @@
1
- module LedgerTest
1
+ module LedgerTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
 
5
6
  open Ledger
6
7
 
7
- [<Test>]
8
+ [<Fact>]
8
9
  let ``Empty ledger`` () =
9
10
  let currency = "USD"
10
11
  let locale = "en-US"
@@ -12,9 +13,9 @@ let ``Empty ledger`` () =
12
13
  let expected =
13
14
  "Date | Description | Change "
14
15
 
15
- Assert.That(formatLedger currency locale entries, Is.EqualTo(expected))
16
+ formatLedger currency locale entries |> should equal expected
16
17
 
17
- [<Test>]
18
+ [<Fact>]
18
19
  let ``One entry`` () =
19
20
  let currency = "USD"
20
21
  let locale = "en-US"
@@ -26,9 +27,9 @@ let ``One entry`` () =
26
27
  "Date | Description | Change \n" +
27
28
  "01/01/2015 | Buy present | ($10.00)"
28
29
 
29
- Assert.That(formatLedger currency locale entries, Is.EqualTo(expected))
30
+ formatLedger currency locale entries |> should equal expected
30
31
 
31
- [<Test>]
32
+ [<Fact>]
32
33
  let ``Credit and debit`` () =
33
34
  let currency = "USD"
34
35
  let locale = "en-US"
@@ -42,9 +43,9 @@ let ``Credit and debit`` () =
42
43
  "01/01/2015 | Buy present | ($10.00)\n" +
43
44
  "01/02/2015 | Get present | $10.00 "
44
45
 
45
- Assert.That(formatLedger currency locale entries, Is.EqualTo(expected))
46
+ formatLedger currency locale entries |> should equal expected
46
47
 
47
- [<Test>]
48
+ [<Fact>]
48
49
  let ``Multiple entries on same date ordered by description`` () =
49
50
  let currency = "USD"
50
51
  let locale = "en-US"
@@ -58,9 +59,9 @@ let ``Multiple entries on same date ordered by description`` () =
58
59
  "01/01/2015 | Buy present | ($10.00)\n" +
59
60
  "01/01/2015 | Get present | $10.00 "
60
61
 
61
- Assert.That(formatLedger currency locale entries, Is.EqualTo(expected))
62
+ formatLedger currency locale entries |> should equal expected
62
63
 
63
- [<Test>]
64
+ [<Fact>]
64
65
  let ``Final order tie breaker is change`` () =
65
66
  let currency = "USD"
66
67
  let locale = "en-US"
@@ -76,9 +77,9 @@ let ``Final order tie breaker is change`` () =
76
77
  "01/01/2015 | Something | $0.00 \n" +
77
78
  "01/01/2015 | Something | $0.01 "
78
79
 
79
- Assert.That(formatLedger currency locale entries, Is.EqualTo(expected))
80
+ formatLedger currency locale entries |> should equal expected
80
81
 
81
- [<Test>]
82
+ [<Fact>]
82
83
  let ``Overlong descriptions`` () =
83
84
  let currency = "USD"
84
85
  let locale = "en-US"
@@ -90,9 +91,9 @@ let ``Overlong descriptions`` () =
90
91
  "Date | Description | Change \n" +
91
92
  "01/01/2015 | Freude schoner Gotterf... | ($1,234.56)"
92
93
 
93
- Assert.That(formatLedger currency locale entries, Is.EqualTo(expected))
94
+ formatLedger currency locale entries |> should equal expected
94
95
 
95
- [<Test>]
96
+ [<Fact>]
96
97
  let ``Euros`` () =
97
98
  let currency = "EUR"
98
99
  let locale = "en-US"
@@ -104,9 +105,9 @@ let ``Euros`` () =
104
105
  "Date | Description | Change \n" +
105
106
  "01/01/2015 | Buy present | (€10.00)"
106
107
 
107
- Assert.That(formatLedger currency locale entries, Is.EqualTo(expected))
108
+ formatLedger currency locale entries |> should equal expected
108
109
 
109
- [<Test>]
110
+ [<Fact>]
110
111
  let ``Dutch locale`` () =
111
112
  let currency = "USD"
112
113
  let locale = "nl-NL"
@@ -118,9 +119,9 @@ let ``Dutch locale`` () =
118
119
  "Datum | Omschrijving | Verandering \n" +
119
120
  "12-03-2015 | Buy present | $ 1.234,56 "
120
121
 
121
- Assert.That(formatLedger currency locale entries, Is.EqualTo(expected))
122
+ formatLedger currency locale entries |> should equal expected
122
123
 
123
- [<Test>]
124
+ [<Fact>]
124
125
  let ``Dutch negative number with 3 digits before decimal point`` () =
125
126
  let currency = "USD"
126
127
  let locale = "nl-NL"
@@ -132,9 +133,9 @@ let ``Dutch negative number with 3 digits before decimal point`` () =
132
133
  "Datum | Omschrijving | Verandering \n" +
133
134
  "12-03-2015 | Buy present | $ -123,45"
134
135
 
135
- Assert.That(formatLedger currency locale entries, Is.EqualTo(expected))
136
+ formatLedger currency locale entries |> should equal expected
136
137
 
137
- [<Test>]
138
+ [<Fact>]
138
139
  let ``American negative number with 3 digits before decimal point`` () =
139
140
  let currency = "USD"
140
141
  let locale = "en-US"
@@ -146,4 +147,4 @@ let ``American negative number with 3 digits before decimal point`` () =
146
147
  "Date | Description | Change \n" +
147
148
  "03/12/2015 | Buy present | ($123.45)"
148
149
 
149
- Assert.That(formatLedger currency locale entries, Is.EqualTo(expected))
150
+ formatLedger currency locale entries |> should equal expected
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -1,24 +1,3 @@
1
1
  module LensPerson
2
2
 
3
- open Aether
4
- open Aether.Operators
5
- open System
6
-
7
- type Address =
8
- { street: string
9
- houseNumber: int
10
- place: string
11
- country: string }
12
-
13
- type Born =
14
- { at: Address
15
- on: DateTime }
16
-
17
- type Name =
18
- { name: string
19
- surName: string }
20
-
21
- type Person =
22
- { name: Name
23
- born: Born
24
- address: Address }
3
+ // TODO: implement this module
@@ -0,0 +1,23 @@
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="LensPerson.fs" />
11
+ <Compile Include="LensPersonTest.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
+ <PackageReference Include="Aether" Version="8.2.0" />
21
+ </ItemGroup>
22
+
23
+ </Project>
@@ -1,7 +1,8 @@
1
- module LensPersonTest
1
+ module LensPersonTest
2
2
 
3
3
  open System
4
- open NUnit.Framework
4
+ open Xunit
5
+ open FsUnit.Xunit
5
6
  open Aether
6
7
  open Aether.Operators
7
8
  open LensPerson
@@ -23,21 +24,18 @@ let testPerson =
23
24
  place = "Fallmeadow"
24
25
  country = "Canada" } }
25
26
 
26
- [<Test>]
27
+ [<Fact>]
27
28
  let ``Set born at street`` () =
28
- Assert.That(Optic.get bornAtStreet testPerson, Is.EqualTo("Longway"))
29
+ Optic.get bornAtStreet testPerson |> should equal "Longway"
29
30
 
30
- [<Test>]
31
- [<Ignore("Remove to run test")>]
31
+ [<Fact(Skip = "Remove to run test")>]
32
32
  let ``Set current street`` () =
33
- Assert.That(Optic.set currentStreet "Middleroad" testPerson |> Optic.get currentStreet, Is.EqualTo("Middleroad"))
33
+ Optic.set currentStreet "Middleroad" testPerson |> Optic.get currentStreet |> should equal "Middleroad"
34
34
 
35
- [<Test>]
36
- [<Ignore("Remove to run test")>]
35
+ [<Fact(Skip = "Remove to run test")>]
37
36
  let ``Upper case born at street`` () =
38
- Assert.That(Optic.map bornAtStreet (fun x -> x.ToUpper()) testPerson |> Optic.get bornAtStreet, Is.EqualTo("LONGWAY"))
37
+ Optic.map bornAtStreet (fun x -> x.ToUpper()) testPerson |> Optic.get bornAtStreet |> should equal "LONGWAY"
39
38
 
40
- [<Test>]
41
- [<Ignore("Remove to run test")>]
39
+ [<Fact(Skip = "Remove to run test")>]
42
40
  let ``Set birth month`` () =
43
- Assert.That(Optic.set birthMonth 9 testPerson |> Optic.get bornOn, Is.EqualTo(DateTime(1984, 9, 12)))
41
+ Optic.set birthMonth 9 testPerson |> Optic.get bornOn |> should equal <| DateTime(1984, 9, 12)
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,13 @@
1
+ module LinkedList
2
+
3
+ let mkLinkedList () = failwith "You need to implement this function."
4
+
5
+ let addToEmpty newValue linkedList = failwith "You need to implement this function."
6
+
7
+ let pop linkedList = failwith "You need to implement this function."
8
+
9
+ let shift linkedList = failwith "You need to implement this function."
10
+
11
+ let push newValue linkedList = failwith "You need to implement this function."
12
+
13
+ let unshift newValue linkedList = 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="LinkedList.fs" />
11
+ <Compile Include="LinkedListTest.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,9 +1,10 @@
1
1
  module LinkedListTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
  open LinkedList
5
6
 
6
- [<Test>]
7
+ [<Fact>]
7
8
  let ``Push and pop are first in last out order`` () =
8
9
  let linkedList = mkLinkedList ()
9
10
  linkedList |> push 10
@@ -12,11 +13,10 @@ let ``Push and pop are first in last out order`` () =
12
13
  let val1 = pop linkedList
13
14
  let val2 = pop linkedList
14
15
 
15
- Assert.That(val1, Is.EqualTo(20))
16
- Assert.That(val2, Is.EqualTo(10))
16
+ val1 |> should equal 20
17
+ val2 |> should equal 10
17
18
 
18
- [<Test>]
19
- [<Ignore("Remove to run test")>]
19
+ [<Fact(Skip = "Remove to run test")>]
20
20
  let ``Push and shift are first in first out order`` () =
21
21
  let linkedList = mkLinkedList ()
22
22
  linkedList |> push 10
@@ -25,11 +25,10 @@ let ``Push and shift are first in first out order`` () =
25
25
  let val1 = shift linkedList
26
26
  let val2 = shift linkedList
27
27
 
28
- Assert.That(val1, Is.EqualTo(10))
29
- Assert.That(val2, Is.EqualTo(20))
28
+ val1 |> should equal 10
29
+ val2 |> should equal 20
30
30
 
31
- [<Test>]
32
- [<Ignore("Remove to run test")>]
31
+ [<Fact(Skip = "Remove to run test")>]
33
32
  let ``Unshift and shift are last in first out order`` () =
34
33
  let linkedList = mkLinkedList ()
35
34
  linkedList |> unshift 10
@@ -38,11 +37,10 @@ let ``Unshift and shift are last in first out order`` () =
38
37
  let val1 = shift linkedList
39
38
  let val2 = shift linkedList
40
39
 
41
- Assert.That(val1, Is.EqualTo(20))
42
- Assert.That(val2, Is.EqualTo(10))
40
+ val1 |> should equal 20
41
+ val2 |> should equal 10
43
42
 
44
- [<Test>]
45
- [<Ignore("Remove to run test")>]
43
+ [<Fact(Skip = "Remove to run test")>]
46
44
  let ``Unshift and pop are last in last out order`` () =
47
45
  let linkedList = mkLinkedList ()
48
46
  linkedList |> unshift 10
@@ -51,11 +49,10 @@ let ``Unshift and pop are last in last out order`` () =
51
49
  let val1 = pop linkedList
52
50
  let val2 = pop linkedList
53
51
 
54
- Assert.That(val1, Is.EqualTo(10))
55
- Assert.That(val2, Is.EqualTo(20))
52
+ val1 |> should equal 10
53
+ val2 |> should equal 20
56
54
 
57
- [<Test>]
58
- [<Ignore("Remove to run test")>]
55
+ [<Fact(Skip = "Remove to run test")>]
59
56
  let ``Push and pop can handle multiple values`` () =
60
57
  let linkedList = mkLinkedList ()
61
58
  linkedList |> push 10
@@ -66,12 +63,11 @@ let ``Push and pop can handle multiple values`` () =
66
63
  let val2 = pop linkedList
67
64
  let val3 = pop linkedList
68
65
 
69
- Assert.That(val1, Is.EqualTo(30))
70
- Assert.That(val2, Is.EqualTo(20))
71
- Assert.That(val3, Is.EqualTo(10))
66
+ val1 |> should equal 30
67
+ val2 |> should equal 20
68
+ val3 |> should equal 10
72
69
 
73
- [<Test>]
74
- [<Ignore("Remove to run test")>]
70
+ [<Fact(Skip = "Remove to run test")>]
75
71
  let ``Unshift and shift can handle multiple values`` () =
76
72
  let linkedList = mkLinkedList ()
77
73
  linkedList |> unshift 10
@@ -82,12 +78,11 @@ let ``Unshift and shift can handle multiple values`` () =
82
78
  let val2 = shift linkedList
83
79
  let val3 = shift linkedList
84
80
 
85
- Assert.That(val1, Is.EqualTo(30))
86
- Assert.That(val2, Is.EqualTo(20))
87
- Assert.That(val3, Is.EqualTo(10))
81
+ val1 |> should equal 30
82
+ val2 |> should equal 20
83
+ val3 |> should equal 10
88
84
 
89
- [<Test>]
90
- [<Ignore("Remove to run test")>]
85
+ [<Fact(Skip = "Remove to run test")>]
91
86
  let ``All methods of manipulating the linkedList can be used together`` () =
92
87
  let linkedList = mkLinkedList ()
93
88
  linkedList |> push 10
@@ -95,12 +90,12 @@ let ``All methods of manipulating the linkedList can be used together`` () =
95
90
 
96
91
  let val1 = pop linkedList
97
92
 
98
- Assert.That(val1, Is.EqualTo(20))
93
+ val1 |> should equal 20
99
94
 
100
95
  linkedList |> push 30
101
96
  let val2 = shift linkedList
102
97
 
103
- Assert.That(val2, Is.EqualTo(10))
98
+ val2 |> should equal 10
104
99
 
105
100
  linkedList |> unshift 40
106
101
  linkedList |> push 50
@@ -109,6 +104,6 @@ let ``All methods of manipulating the linkedList can be used together`` () =
109
104
  let val4 = pop linkedList
110
105
  let val5 = shift linkedList
111
106
 
112
- Assert.That(val3, Is.EqualTo(40))
113
- Assert.That(val4, Is.EqualTo(50))
114
- Assert.That(val5, Is.EqualTo(30))
107
+ val3 |> should equal 40
108
+ val4 |> should equal 50
109
+ val5 |> should equal 30
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,17 @@
1
+ module ListOps
2
+
3
+ let rec foldl folder state list = failwith "You need to implement this function."
4
+
5
+ let rec foldr folder list state = failwith "You need to implement this function."
6
+
7
+ let length list = failwith "You need to implement this function."
8
+
9
+ let reverse list = failwith "You need to implement this function."
10
+
11
+ let map f list = failwith "You need to implement this function."
12
+
13
+ let filter f list = failwith "You need to implement this function."
14
+
15
+ let append xs ys = failwith "You need to implement this function."
16
+
17
+ let concat xs = failwith "You need to implement this function."
@@ -0,0 +1,22 @@
1
+ <Project Sdk="Microsoft.NET.Sdk">
2
+
3
+ <PropertyGroup>
4
+ <TargetFramework>netcoreapp2.0</TargetFramework>
5
+
6
+ <IsPackable>false</IsPackable>
7
+ </PropertyGroup>
8
+
9
+ <ItemGroup>
10
+ <Compile Include="ListOps.fs" />
11
+ <Compile Include="ListOpsTest.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>