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,30 +1,29 @@
1
- module FoodChainTest
1
+ module FoodChainTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
 
5
6
  open FoodChain
6
7
 
7
8
  let combine = List.reduce (fun x y -> x + "\n" + y)
8
9
 
9
- [<Test>]
10
+ [<Fact>]
10
11
  let ``Verse one`` () =
11
12
  let expected = ["I know an old lady who swallowed a fly.";
12
13
  "I don't know why she swallowed the fly. Perhaps she'll die."] |> combine
13
14
 
14
- Assert.That(verse 1, Is.EqualTo(expected))
15
+ verse 1 |> should equal expected
15
16
 
16
- [<Test>]
17
- [<Ignore("Remove to run test")>]
17
+ [<Fact(Skip = "Remove to run test")>]
18
18
  let ``Verse two`` () =
19
19
  let expected = ["I know an old lady who swallowed a spider.";
20
20
  "It wriggled and jiggled and tickled inside her.";
21
21
  "She swallowed the spider to catch the fly.";
22
22
  "I don't know why she swallowed the fly. Perhaps she'll die."] |> combine
23
23
 
24
- Assert.That(verse 2, Is.EqualTo(expected))
24
+ verse 2 |> should equal expected
25
25
 
26
- [<Test>]
27
- [<Ignore("Remove to run test")>]
26
+ [<Fact(Skip = "Remove to run test")>]
28
27
  let ``Verse four`` () =
29
28
  let expected = ["I know an old lady who swallowed a cat.";
30
29
  "Imagine that, to swallow a cat!";
@@ -33,18 +32,16 @@ let ``Verse four`` () =
33
32
  "She swallowed the spider to catch the fly.";
34
33
  "I don't know why she swallowed the fly. Perhaps she'll die."] |> combine
35
34
 
36
- Assert.That(verse 4, Is.EqualTo(expected))
35
+ verse 4 |> should equal expected
37
36
 
38
- [<Test>]
39
- [<Ignore("Remove to run test")>]
37
+ [<Fact(Skip = "Remove to run test")>]
40
38
  let ``Verse eight`` () =
41
39
  let expected = ["I know an old lady who swallowed a horse.";
42
40
  "She's dead, of course!"] |> combine
43
41
 
44
- Assert.That(verse 8, Is.EqualTo(expected))
42
+ verse 8 |> should equal expected
45
43
 
46
- [<Test>]
47
- [<Ignore("Remove to run test")>]
44
+ [<Fact(Skip = "Remove to run test")>]
48
45
  let ``Complete song`` () =
49
46
  let expected = ["I know an old lady who swallowed a fly.";
50
47
  "I don't know why she swallowed the fly. Perhaps she'll die.";
@@ -97,4 +94,4 @@ let ``Complete song`` () =
97
94
  "I know an old lady who swallowed a horse.";
98
95
  "She's dead, of course!"] |> combine
99
96
 
100
- Assert.That(song, Is.EqualTo(expected))
97
+ song |> should equal expected
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module Forth
2
+
3
+ // TODO: implement this module
@@ -0,0 +1,22 @@
1
+ <Project Sdk="Microsoft.NET.Sdk">
2
+
3
+ <PropertyGroup>
4
+ <TargetFramework>netcoreapp2.0</TargetFramework>
5
+
6
+ <IsPackable>false</IsPackable>
7
+ </PropertyGroup>
8
+
9
+ <ItemGroup>
10
+ <Compile Include="Forth.fs" />
11
+ <Compile Include="ForthTest.fs" />
12
+ <Compile Include="Program.fs" />
13
+ </ItemGroup>
14
+
15
+ <ItemGroup>
16
+ <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
17
+ <PackageReference Include="xunit" Version="2.3.0-beta5-build3769" />
18
+ <PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta5-build3769" />
19
+ <PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
20
+ </ItemGroup>
21
+
22
+ </Project>
@@ -1,6 +1,7 @@
1
- module ForthTest
1
+ module ForthTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
 
5
6
  open Forth
6
7
 
@@ -21,63 +22,54 @@ let run text = eval text empty |> map formatStack
21
22
  // contained in a Choice1Of2. If an error occured, that error is contained
22
23
  // in a Choice2Of2.
23
24
 
24
- [<Test>]
25
+ [<Fact>]
25
26
  let ``No input, no stack`` () =
26
- Assert.That(formatStack empty, Is.EqualTo(""))
27
+ formatStack empty |> should equal ""
27
28
 
28
- [<Test>]
29
- [<Ignore("Remove to run test")>]
29
+ [<Fact(Skip = "Remove to run test")>]
30
30
  let ``Numbers just get pushed onto the stack`` () =
31
- Assert.That(run "1 2 3 4 5", Is.EqualTo(Choice1Of2 "1 2 3 4 5": Choice<string,ForthError>))
31
+ run "1 2 3 4 5" |> should equal (Choice1Of2 "1 2 3 4 5": Choice<string,ForthError>)
32
32
 
33
- [<Test>]
34
- [<Ignore("Remove to run test")>]
33
+ [<Fact(Skip = "Remove to run test")>]
35
34
  let ``Non-word characters are separators`` () =
36
- Assert.That(run "1\b2\t3\n4\r5 6\t7", Is.EqualTo(Choice1Of2 "1 2 3 4 5 6 7": Choice<string,ForthError>))
35
+ run "1\b2\t3\n4\r5 6\t7" |> should equal (Choice1Of2 "1 2 3 4 5 6 7": Choice<string,ForthError>)
37
36
 
38
- [<Test>]
39
- [<Ignore("Remove to run test")>]
37
+ [<Fact(Skip = "Remove to run test")>]
40
38
  let ``Basic arithmetic`` () =
41
- Assert.That(run "1 2 + 4 -", Is.EqualTo(Choice1Of2 "-1": Choice<string,ForthError>))
42
- Assert.That(run "2 4 * 3 /", Is.EqualTo(Choice1Of2 "2": Choice<string,ForthError>))
39
+ run "1 2 + 4 -" |> should equal (Choice1Of2 "-1": Choice<string,ForthError>)
40
+ run "2 4 * 3 /" |> should equal (Choice1Of2 "2": Choice<string,ForthError>)
43
41
 
44
- [<Test>]
45
- [<Ignore("Remove to run test")>]
42
+ [<Fact(Skip = "Remove to run test")>]
46
43
  let ``Division by zero`` () =
47
- Assert.That(run "4 2 2 - /", Is.EqualTo(Choice2Of2 DivisionByZero: Choice<string,ForthError>))
44
+ run "4 2 2 - /" |> should equal (Choice2Of2 DivisionByZero: Choice<string,ForthError>)
48
45
 
49
- [<Test>]
50
- [<Ignore("Remove to run test")>]
46
+ [<Fact(Skip = "Remove to run test")>]
51
47
  let ``dup`` () =
52
- Assert.That(run "1 DUP", Is.EqualTo(Choice1Of2 "1 1": Choice<string,ForthError>))
53
- Assert.That(run "1 2 Dup", Is.EqualTo(Choice1Of2 "1 2 2": Choice<string,ForthError>))
54
- Assert.That(run "dup", Is.EqualTo(Choice2Of2 StackUnderflow: Choice<string,ForthError>))
48
+ run "1 DUP" |> should equal (Choice1Of2 "1 1": Choice<string,ForthError>)
49
+ run "1 2 Dup" |> should equal (Choice1Of2 "1 2 2": Choice<string,ForthError>)
50
+ run "dup" |> should equal (Choice2Of2 StackUnderflow: Choice<string,ForthError>)
55
51
 
56
- [<Test>]
57
- [<Ignore("Remove to run test")>]
52
+ [<Fact(Skip = "Remove to run test")>]
58
53
  let ``drop`` () =
59
- Assert.That(run "1 drop", Is.EqualTo(Choice1Of2 "": Choice<string,ForthError>))
60
- Assert.That(run "1 2 drop", Is.EqualTo(Choice1Of2 "1": Choice<string,ForthError>))
61
- Assert.That(run "drop", Is.EqualTo(Choice2Of2 StackUnderflow: Choice<string,ForthError>))
54
+ run "1 drop" |> should equal (Choice1Of2 "": Choice<string,ForthError>)
55
+ run "1 2 drop" |> should equal (Choice1Of2 "1": Choice<string,ForthError>)
56
+ run "drop" |> should equal (Choice2Of2 StackUnderflow: Choice<string,ForthError>)
62
57
 
63
- [<Test>]
64
- [<Ignore("Remove to run test")>]
58
+ [<Fact(Skip = "Remove to run test")>]
65
59
  let ``swap`` () =
66
- Assert.That(run "1 2 swap", Is.EqualTo(Choice1Of2 "2 1": Choice<string,ForthError>))
67
- Assert.That(run "1 2 3 swap", Is.EqualTo(Choice1Of2 "1 3 2": Choice<string,ForthError>))
68
- Assert.That(run "1 swap", Is.EqualTo(Choice2Of2 StackUnderflow: Choice<string,ForthError>))
69
- Assert.That(run "swap", Is.EqualTo(Choice2Of2 StackUnderflow: Choice<string,ForthError>))
60
+ run "1 2 swap" |> should equal (Choice1Of2 "2 1": Choice<string,ForthError>)
61
+ run "1 2 3 swap" |> should equal (Choice1Of2 "1 3 2": Choice<string,ForthError>)
62
+ run "1 swap" |> should equal (Choice2Of2 StackUnderflow: Choice<string,ForthError>)
63
+ run "swap" |> should equal (Choice2Of2 StackUnderflow: Choice<string,ForthError>)
70
64
 
71
- [<Test>]
72
- [<Ignore("Remove to run test")>]
65
+ [<Fact(Skip = "Remove to run test")>]
73
66
  let ``over`` () =
74
- Assert.That(run "1 2 over", Is.EqualTo(Choice1Of2 "1 2 1": Choice<string,ForthError>))
75
- Assert.That(run "1 2 3 over", Is.EqualTo(Choice1Of2 "1 2 3 2": Choice<string,ForthError>))
76
- Assert.That(run "1 over", Is.EqualTo(Choice2Of2 StackUnderflow: Choice<string,ForthError>))
77
- Assert.That(run "over", Is.EqualTo(Choice2Of2 StackUnderflow: Choice<string,ForthError>))
67
+ run "1 2 over" |> should equal (Choice1Of2 "1 2 1": Choice<string,ForthError>)
68
+ run "1 2 3 over" |> should equal (Choice1Of2 "1 2 3 2": Choice<string,ForthError>)
69
+ run "1 over" |> should equal (Choice2Of2 StackUnderflow: Choice<string,ForthError>)
70
+ run "over" |> should equal (Choice2Of2 StackUnderflow: Choice<string,ForthError>)
78
71
 
79
- [<Test>]
80
- [<Ignore("Remove to run test")>]
72
+ [<Fact(Skip = "Remove to run test")>]
81
73
  let ``Defining a new word`` () =
82
74
  let actual =
83
75
  empty
@@ -85,10 +77,9 @@ let ``Defining a new word`` () =
85
77
  |> bind (eval "1 dup-twice")
86
78
  |> map formatStack
87
79
 
88
- Assert.That(actual, Is.EqualTo(Choice1Of2 "1 1 1": Choice<string,ForthError>))
80
+ actual |> should equal (Choice1Of2 "1 1 1": Choice<string,ForthError>)
89
81
 
90
- [<Test>]
91
- [<Ignore("Remove to run test")>]
82
+ [<Fact(Skip = "Remove to run test")>]
92
83
  let ``Redefining an existing word`` () =
93
84
  let actual =
94
85
  empty
@@ -97,10 +88,9 @@ let ``Redefining an existing word`` () =
97
88
  |> bind (eval "1 foo")
98
89
  |> map formatStack
99
90
 
100
- Assert.That(actual, Is.EqualTo(Choice1Of2 "1 1 1": Choice<string,ForthError>))
91
+ actual |> should equal (Choice1Of2 "1 1 1": Choice<string,ForthError>)
101
92
 
102
- [<Test>]
103
- [<Ignore("Remove to run test")>]
93
+ [<Fact(Skip = "Remove to run test")>]
104
94
  let ``Redefining an existing built-in word`` () =
105
95
  let actual =
106
96
  empty
@@ -108,19 +98,16 @@ let ``Redefining an existing built-in word`` () =
108
98
  |> bind (eval "1 swap")
109
99
  |> map formatStack
110
100
 
111
- Assert.That(actual, Is.EqualTo(Choice1Of2 "1 1": Choice<string,ForthError>))
101
+ actual |> should equal (Choice1Of2 "1 1": Choice<string,ForthError>)
112
102
 
113
- [<Test>]
114
- [<Ignore("Remove to run test")>]
103
+ [<Fact(Skip = "Remove to run test")>]
115
104
  let ``Defining words with odd characters`` () =
116
- Assert.That(run ": € 220371 ; €", Is.EqualTo(Choice1Of2 "220371": Choice<string,ForthError>))
105
+ run ": € 220371 ; €" |> should equal (Choice1Of2 "220371": Choice<string,ForthError>)
117
106
 
118
- [<Test>]
119
- [<Ignore("Remove to run test")>]
107
+ [<Fact(Skip = "Remove to run test")>]
120
108
  let ``Defining a number`` () =
121
- Assert.That(run ": 1 2 ;", Is.EqualTo(Choice2Of2 InvalidWord: Choice<string,ForthError>))
109
+ run ": 1 2 ;" |> should equal (Choice2Of2 InvalidWord: Choice<string,ForthError>)
122
110
 
123
- [<Test>]
124
- [<Ignore("Remove to run test")>]
111
+ [<Fact(Skip = "Remove to run test")>]
125
112
  let ``Calling a non-existing word`` () =
126
- Assert.That(run "1 foo", Is.EqualTo(Choice2Of2 (UnknownWord "foo"): Choice<string,ForthError>))
113
+ run "1 foo" |> should equal (Choice2Of2 (UnknownWord "foo"): Choice<string,ForthError>)
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module Gigasecond
2
+
3
+ let gigasecond beginDate = 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="Gigasecond.fs" />
11
+ <Compile Include="GigasecondTest.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,22 +1,21 @@
1
- module GigasecondTest
1
+ module GigasecondTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
  open Gigasecond
5
6
  open System
6
7
 
7
- [<Test>]
8
+ [<Fact>]
8
9
  let ``First date`` () =
9
10
  let input = DateTime(2011, 4, 25)
10
- Assert.That(gigasecond input, Is.EqualTo(DateTime(2043, 1, 1)))
11
+ gigasecond input |> should equal (DateTime(2043, 1, 1))
11
12
 
12
- [<Test>]
13
- [<Ignore("Remove to run test")>]
13
+ [<Fact(Skip = "Remove to run test")>]
14
14
  let ``Another date`` () =
15
15
  let input = DateTime(1977, 6, 13)
16
- Assert.That(gigasecond input, Is.EqualTo(DateTime(2009, 2, 19)))
16
+ gigasecond input |> should equal (DateTime(2009, 2, 19))
17
17
 
18
- [<Test>]
19
- [<Ignore("Remove to run test")>]
18
+ [<Fact(Skip = "Remove to run test")>]
20
19
  let ``Yet another date`` () =
21
20
  let input = DateTime(1959, 7, 19)
22
- Assert.That(gigasecond input, Is.EqualTo(DateTime(1991, 3, 27)))
21
+ gigasecond input |> should equal (DateTime(1991, 3, 27))
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module GoCounting
2
+
3
+ // TODO: implement this module
@@ -0,0 +1,22 @@
1
+ <Project Sdk="Microsoft.NET.Sdk">
2
+
3
+ <PropertyGroup>
4
+ <TargetFramework>netcoreapp2.0</TargetFramework>
5
+
6
+ <IsPackable>false</IsPackable>
7
+ </PropertyGroup>
8
+
9
+ <ItemGroup>
10
+ <Compile Include="GoCounting.fs" />
11
+ <Compile Include="GoCountingTest.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,8 +1,9 @@
1
- module GoCountingTest
1
+ module GoCountingTest
2
2
 
3
3
  open System
4
4
 
5
- open NUnit.Framework
5
+ open Xunit
6
+ open FsUnit.Xunit
6
7
 
7
8
  open GoCounting
8
9
 
@@ -24,60 +25,52 @@ let board9x9 =
24
25
  " W BBB W ";
25
26
  " B B "]
26
27
 
27
- [<Test>]
28
+ [<Fact>]
28
29
  let ``5x5 territory for black`` () =
29
30
  let expected = Some (Some Black, [(0, 0); (0, 1); (1, 0)])
30
- Assert.That(territoryFor board5x5 (0, 1), Is.EqualTo(expected))
31
+ territoryFor board5x5 (0, 1) |> should equal expected
31
32
 
32
- [<Test>]
33
- [<Ignore("Remove to run test")>]
33
+ [<Fact(Skip = "Remove to run test")>]
34
34
  let ``5x5 territory for white`` () =
35
35
  let expected = Some (Some White, [(2, 3)])
36
- Assert.That(territoryFor board5x5 (2, 3), Is.EqualTo(expected))
36
+ territoryFor board5x5 (2, 3) |> should equal expected
37
37
 
38
- [<Test>]
39
- [<Ignore("Remove to run test")>]
38
+ [<Fact(Skip = "Remove to run test")>]
40
39
  let ``5x5 open territory`` () =
41
- let expected = Some (None, [(0, 3); (0, 4); (1, 4)])
42
- Assert.That(territoryFor board5x5 (1, 4) = expected)
40
+ let expected = Some ((None: Color option), [(0, 3); (0, 4); (1, 4)])
41
+ territoryFor board5x5 (1, 4) |> should equal expected
43
42
 
44
- [<Test>]
45
- [<Ignore("Remove to run test")>]
43
+ [<Fact(Skip = "Remove to run test")>]
46
44
  let ``5x5 non-territory (stone)`` () =
47
- Assert.That(territoryFor board5x5 (1, 1), Is.EqualTo(None))
45
+ territoryFor board5x5 (1, 1) |> should equal None
48
46
 
49
- [<Test>]
50
- [<Ignore("Remove to run test")>]
47
+ [<Fact(Skip = "Remove to run test")>]
51
48
  let ``5x5 non-territory (too low coordinate)`` () =
52
- Assert.That(territoryFor board5x5 (-1, 1), Is.EqualTo(None))
49
+ territoryFor board5x5 (-1, 1) |> should equal None
53
50
 
54
- [<Test>]
55
- [<Ignore("Remove to run test")>]
51
+ [<Fact(Skip = "Remove to run test")>]
56
52
  let ``5x5 non-territory (too high coordinate)`` () =
57
- Assert.That(territoryFor board5x5 (1, 5), Is.EqualTo(None))
53
+ territoryFor board5x5 (1, 5) |> should equal None
58
54
 
59
- [<Test>]
60
- [<Ignore("Remove to run test")>]
55
+ [<Fact(Skip = "Remove to run test")>]
61
56
  let ``Minimal board, no territories`` () =
62
57
  let input = ["B"]
63
58
  let expected = []
64
59
 
65
- Assert.That(territories input, Is.EqualTo(expected))
60
+ territories input |> should be Empty
66
61
 
67
- [<Test>]
68
- [<Ignore("Remove to run test")>]
62
+ [<Fact(Skip = "Remove to run test")>]
69
63
  let ``One territory, covering the whole board`` () =
70
64
  let input = [" "]
71
- let expected = [(None, [(0, 0)])] |> Map.ofList
65
+ let expected = [((None: Color option), [(0, 0)])] |> Map.ofList
72
66
 
73
- Assert.That(territories input, Is.EqualTo(expected))
67
+ territories input |> should equal expected
74
68
 
75
- [<Test>]
76
- [<Ignore("Remove to run test")>]
69
+ [<Fact(Skip = "Remove to run test")>]
77
70
  let ``Two territories, rectangular board`` () =
78
71
  let input = [" BW "; " BW "]
79
72
  let expected = [(Some Black, [(0, 0); (0, 1)]);
80
73
  (Some White, [(3, 0); (3, 1)])]
81
74
  |> Map.ofList
82
75
 
83
- Assert.That(territories input, Is.EqualTo(expected))
76
+ territories input |> should equal expected
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -7,7 +7,7 @@ let add student grade school =
7
7
  | Some existing -> Map.add grade (student :: existing |> List.sort) school
8
8
  | None -> Map.add grade [student] school
9
9
 
10
- let roster school = school |> Map.toSeq
10
+ let roster school = Map.toList school
11
11
 
12
12
  let grade number school =
13
13
  match Map.tryFind number school with
@@ -0,0 +1,9 @@
1
+ module GradeSchool
2
+
3
+ let empty: Map<int, string list> = failwith "You need to implement this function."
4
+
5
+ let add (student: string) (grade: int) (school: Map<int, string list>): Map<int, string list> = failwith "You need to implement this function."
6
+
7
+ let roster (school: Map<int, string list>): Map<int, string list> = failwith "You need to implement this function."
8
+
9
+ let grade (number: int) (school: Map<int, string list>): string 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="GradeSchool.fs" />
11
+ <Compile Include="GradeSchoolTest.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,22 +1,21 @@
1
1
  module GradeSchoolTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
  open GradeSchool
5
6
 
6
- [<Test>]
7
+ [<Fact>]
7
8
  let ``Empty school has an empty roster`` () =
8
9
  let school = empty
9
- Assert.That(roster school, Is.Empty)
10
+ roster school |> should be Empty
10
11
 
11
- [<Test>]
12
- [<Ignore("Remove to run test")>]
12
+ [<Fact(Skip = "Remove to run test")>]
13
13
  let ``Adding a student adds them to the roster for the given grade`` () =
14
14
  let school = empty |> add "Aimee" 2
15
15
  let expected = ["Aimee"]
16
- Assert.That(grade 2 school, Is.EqualTo(expected))
16
+ grade 2 school |> should equal expected
17
17
 
18
- [<Test>]
19
- [<Ignore("Remove to run test")>]
18
+ [<Fact(Skip = "Remove to run test")>]
20
19
  let ``Adding more students to the same grade adds them to the roster`` () =
21
20
  let school =
22
21
  empty
@@ -24,20 +23,18 @@ let ``Adding more students to the same grade adds them to the roster`` () =
24
23
  |> add "James" 2
25
24
  |> add "Paul" 2
26
25
  let expected = ["Blair"; "James"; "Paul"]
27
- Assert.That(grade 2 school, Is.EqualTo(expected))
26
+ grade 2 school |> should equal expected
28
27
 
29
- [<Test>]
30
- [<Ignore("Remove to run test")>]
28
+ [<Fact(Skip = "Remove to run test")>]
31
29
  let ``Adding students to different grades adds them to the roster`` () =
32
30
  let school =
33
31
  empty
34
32
  |> add "Chelsea" 3
35
33
  |> add "Logan" 7
36
- Assert.That(grade 3 school, Is.EqualTo(["Chelsea"]))
37
- Assert.That(grade 7 school, Is.EqualTo(["Logan"]))
34
+ grade 3 school |> should equal ["Chelsea"]
35
+ grade 7 school |> should equal ["Logan"]
38
36
 
39
- [<Test>]
40
- [<Ignore("Remove to run test")>]
37
+ [<Fact(Skip = "Remove to run test")>]
41
38
  let ``Grade returns the students in that grade in alphabetical order`` () =
42
39
  let school =
43
40
  empty
@@ -45,16 +42,14 @@ let ``Grade returns the students in that grade in alphabetical order`` () =
45
42
  |> add "Bradley" 5
46
43
  |> add "Jeff" 1
47
44
  let expected = ["Bradley"; "Franklin"]
48
- Assert.That(grade 5 school, Is.EqualTo(expected))
45
+ grade 5 school |> should equal expected
49
46
 
50
- [<Test>]
51
- [<Ignore("Remove to run test")>]
47
+ [<Fact(Skip = "Remove to run test")>]
52
48
  let ``Grade returns an empty list if there are no students in that grade`` () =
53
49
  let school = empty
54
- Assert.That(grade 1 school, Is.EqualTo([]))
50
+ grade 1 school |> should be Empty
55
51
 
56
- [<Test>]
57
- [<Ignore("Remove to run test")>]
52
+ [<Fact(Skip = "Remove to run test")>]
58
53
  let ``Student names and grades in roster are sorted`` () =
59
54
  let school =
60
55
  empty
@@ -68,4 +63,4 @@ let ``Student names and grades in roster are sorted`` () =
68
63
  (4, ["Christopher"; "Jennifer"]);
69
64
  (6, ["Kareem"])]
70
65
 
71
- Assert.That(roster school, Is.EqualTo(expected))
66
+ roster school |> should equal expected
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,6 @@
1
+ module Grains
2
+
3
+ open System.Numerics
4
+
5
+ let square (n: int): BigInteger = failwith "You need to implement this function."
6
+ let total: BigInteger = 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="Grains.fs" />
11
+ <Compile Include="GrainsTest.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>