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,10 +1,11 @@
1
- module TwoBucketTest
1
+ module TwoBucketTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
 
5
6
  open TwoBucket
6
7
 
7
- [<Test>]
8
+ [<Fact>]
8
9
  let ``First example``() =
9
10
  let bucketOneSize = 3
10
11
  let bucketTwoSize = 5
@@ -12,10 +13,9 @@ let ``First example``() =
12
13
  let startBucket = Bucket.One
13
14
 
14
15
  let actual = moves bucketOneSize bucketTwoSize goal startBucket
15
- Assert.That(actual, Is.EqualTo(Some (4, Bucket.One, 5)))
16
+ actual |> should equal <| Some (4, Bucket.One, 5)
16
17
 
17
- [<Test>]
18
- [<Ignore("Remove to run test")>]
18
+ [<Fact(Skip = "Remove to run test")>]
19
19
  let ``Second example``() =
20
20
  let bucketOneSize = 3
21
21
  let bucketTwoSize = 5
@@ -23,10 +23,9 @@ let ``Second example``() =
23
23
  let startBucket = Bucket.Two
24
24
 
25
25
  let actual = moves bucketOneSize bucketTwoSize goal startBucket
26
- Assert.That(actual, Is.EqualTo(Some (8, Bucket.Two, 3)))
26
+ actual |> should equal <| Some (8, Bucket.Two, 3)
27
27
 
28
- [<Test>]
29
- [<Ignore("Remove to run test")>]
28
+ [<Fact(Skip = "Remove to run test")>]
30
29
  let ``Third example``() =
31
30
  let bucketOneSize = 7
32
31
  let bucketTwoSize = 11
@@ -34,10 +33,9 @@ let ``Third example``() =
34
33
  let startBucket = Bucket.One
35
34
 
36
35
  let actual = moves bucketOneSize bucketTwoSize goal startBucket
37
- Assert.That(actual, Is.EqualTo(Some (14, Bucket.One, 11)))
36
+ actual |> should equal <| Some (14, Bucket.One, 11)
38
37
 
39
- [<Test>]
40
- [<Ignore("Remove to run test")>]
38
+ [<Fact(Skip = "Remove to run test")>]
41
39
  let ``Fourth example``() =
42
40
  let bucketOneSize = 7
43
41
  let bucketTwoSize = 11
@@ -45,4 +43,4 @@ let ``Fourth example``() =
45
43
  let startBucket = Bucket.Two
46
44
 
47
45
  let actual = moves bucketOneSize bucketTwoSize goal startBucket
48
- Assert.That(actual, Is.EqualTo(Some (18, Bucket.Two, 7)))
46
+ actual |> should equal <| Some (18, Bucket.Two, 7)
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module TwoFer
2
+
3
+ let getResponse (input: string option): string = 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="TwoFer.fs" />
11
+ <Compile Include="TwoFerTest.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,19 +1,18 @@
1
- module TwoFerTest
1
+ module TwoFerTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
 
5
6
  open TwoFer
6
7
 
7
- [<Test>]
8
+ [<Fact>]
8
9
  let ``No name given`` () =
9
- Assert.That(getResponse None, Is.EqualTo("One for you, one for me."))
10
+ getResponse None |> should equal "One for you, one for me."
10
11
 
11
- [<Test>]
12
- [<Ignore("Remove to run test")>]
12
+ [<Fact(Skip = "Remove to run test")>]
13
13
  let ``A name given`` () =
14
- Assert.That(getResponse (Some "Alice"), Is.EqualTo("One for Alice, one for me."))
14
+ getResponse (Some "Alice") |> should equal "One for Alice, one for me."
15
15
 
16
- [<Test>]
17
- [<Ignore("Remove to run test")>]
16
+ [<Fact(Skip = "Remove to run test")>]
18
17
  let ``Another name given`` () =
19
- Assert.That(getResponse (Some "Bob"), Is.EqualTo("One for Bob, one for me."))
18
+ getResponse (Some "Bob") |> should equal "One for Bob, one for me."
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module VariableLengthQuantity
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="VariableLengthQuantity.fs" />
11
+ <Compile Include="VariableLengthQuantityTest.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,76 +1,68 @@
1
- module VariableLengthQuantityTest
1
+ module VariableLengthQuantityTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
5
+ open System
4
6
 
5
7
  open VariableLengthQuantity
6
8
 
7
- [<Test>]
9
+ [<Fact>]
8
10
  let ``To single byte`` () =
9
- Assert.That(toBytes [0x00u], Is.EqualTo([0x00uy]))
10
- Assert.That(toBytes [0x40u], Is.EqualTo([0x40uy]))
11
- Assert.That(toBytes [0x7fu], Is.EqualTo([0x7fuy]))
11
+ toBytes [0x00u] |> should equal [0x00uy]
12
+ toBytes [0x40u] |> should equal [0x40uy]
13
+ toBytes [0x7fu] |> should equal [0x7fuy]
12
14
 
13
- [<Test>]
14
- [<Ignore("Remove to run test")>]
15
+ [<Fact(Skip = "Remove to run test")>]
15
16
  let ``To double byte`` () =
16
- Assert.That(toBytes [0x80u], Is.EqualTo([0x81uy; 0x00uy]))
17
- Assert.That(toBytes [0x2000u], Is.EqualTo([0xc0uy; 0x00uy]))
18
- Assert.That(toBytes [0x3fffu], Is.EqualTo([0xffuy; 0x7fuy]))
17
+ toBytes [0x80u] |> should equal [0x81uy; 0x00uy]
18
+ toBytes [0x2000u] |> should equal [0xc0uy; 0x00uy]
19
+ toBytes [0x3fffu] |> should equal [0xffuy; 0x7fuy]
19
20
 
20
- [<Test>]
21
- [<Ignore("Remove to run test")>]
21
+ [<Fact(Skip = "Remove to run test")>]
22
22
  let ``To triple byte`` () =
23
- Assert.That(toBytes [0x4000u], Is.EqualTo([0x81uy; 0x80uy; 0x00uy]))
24
- Assert.That(toBytes [0x100000u], Is.EqualTo([0xc0uy; 0x80uy; 0x00uy]))
25
- Assert.That(toBytes [0x1fffffu], Is.EqualTo([0xffuy; 0xffuy; 0x7fuy]))
23
+ toBytes [0x4000u] |> should equal [0x81uy; 0x80uy; 0x00uy]
24
+ toBytes [0x100000u] |> should equal [0xc0uy; 0x80uy; 0x00uy]
25
+ toBytes [0x1fffffu] |> should equal [0xffuy; 0xffuy; 0x7fuy]
26
26
 
27
- [<Test>]
28
- [<Ignore("Remove to run test")>]
27
+ [<Fact(Skip = "Remove to run test")>]
29
28
  let ``To quadruple byte`` () =
30
- Assert.That(toBytes [0x200000u], Is.EqualTo([0x81uy; 0x80uy; 0x80uy; 0x00uy]))
31
- Assert.That(toBytes [0x08000000u], Is.EqualTo([0xc0uy; 0x80uy; 0x80uy; 0x00uy]))
32
- Assert.That(toBytes [0x0fffffffu], Is.EqualTo([0xffuy; 0xffuy; 0xffuy; 0x7fuy]))
29
+ toBytes [0x200000u] |> should equal [0x81uy; 0x80uy; 0x80uy; 0x00uy]
30
+ toBytes [0x08000000u] |> should equal [0xc0uy; 0x80uy; 0x80uy; 0x00uy]
31
+ toBytes [0x0fffffffu] |> should equal [0xffuy; 0xffuy; 0xffuy; 0x7fuy]
33
32
 
34
- [<Test>]
35
- [<Ignore("Remove to run test")>]
33
+ [<Fact(Skip = "Remove to run test")>]
36
34
  let ``To quintuple byte`` () =
37
- Assert.That(toBytes [0x10000000u], Is.EqualTo([0x81uy; 0x80uy; 0x80uy; 0x80uy; 0x00uy]))
38
- Assert.That(toBytes [0xff000000u], Is.EqualTo([0x8fuy; 0xf8uy; 0x80uy; 0x80uy; 0x00uy]))
39
- Assert.That(toBytes [0xffffffffu], Is.EqualTo([0x8fuy; 0xffuy; 0xffuy; 0xffuy; 0x7fuy]))
35
+ toBytes [0x10000000u] |> should equal [0x81uy; 0x80uy; 0x80uy; 0x80uy; 0x00uy]
36
+ toBytes [0xff000000u] |> should equal [0x8fuy; 0xf8uy; 0x80uy; 0x80uy; 0x00uy]
37
+ toBytes [0xffffffffu] |> should equal [0x8fuy; 0xffuy; 0xffuy; 0xffuy; 0x7fuy]
40
38
 
41
- [<Test>]
42
- [<Ignore("Remove to run test")>]
39
+ [<Fact(Skip = "Remove to run test")>]
43
40
  let ``From bytes`` () =
44
- Assert.That(fromBytes [0x7fuy], Is.EqualTo([0x7fu]))
45
- Assert.That(fromBytes [0xc0uy; 0x00uy], Is.EqualTo([0x2000u]))
46
- Assert.That(fromBytes [0xffuy; 0xffuy; 0x7fuy], Is.EqualTo([0x1fffffu]))
47
- Assert.That(fromBytes [0x81uy; 0x80uy; 0x80uy; 0x00uy], Is.EqualTo([0x200000u]))
48
- Assert.That(fromBytes [0x8fuy; 0xffuy; 0xffuy; 0xffuy; 0x7fuy], Is.EqualTo([0xffffffffu]))
41
+ fromBytes [0x7fuy] |> should equal [0x7fu]
42
+ fromBytes [0xc0uy; 0x00uy] |> should equal [0x2000u]
43
+ fromBytes [0xffuy; 0xffuy; 0x7fuy] |> should equal [0x1fffffu]
44
+ fromBytes [0x81uy; 0x80uy; 0x80uy; 0x00uy] |> should equal [0x200000u]
45
+ fromBytes [0x8fuy; 0xffuy; 0xffuy; 0xffuy; 0x7fuy] |> should equal [0xffffffffu]
49
46
 
50
- [<Test>]
51
- [<Ignore("Remove to run test")>]
47
+ [<Fact(Skip = "Remove to run test")>]
52
48
  let ``To bytes multiple values`` () =
53
- Assert.That(toBytes [0x40u; 0x7fu], Is.EqualTo([0x40uy; 0x7fuy]))
54
- Assert.That(toBytes [0x4000u; 0x123456u], Is.EqualTo([0x81uy; 0x80uy; 0x00uy; 0xc8uy; 0xe8uy; 0x56uy]))
55
- Assert.That(toBytes [0x2000u; 0x123456u; 0x0fffffffu; 0x00u; 0x3fffu; 0x4000u], Is.EqualTo([0xc0uy; 0x00uy; 0xc8uy; 0xe8uy; 0x56uy; 0xffuy; 0xffuy; 0xffuy; 0x7fuy; 0x00uy; 0xffuy; 0x7fuy; 0x81uy; 0x80uy; 0x00uy]))
49
+ toBytes [0x40u; 0x7fu] |> should equal [0x40uy; 0x7fuy]
50
+ toBytes [0x4000u; 0x123456u] |> should equal [0x81uy; 0x80uy; 0x00uy; 0xc8uy; 0xe8uy; 0x56uy]
51
+ toBytes [0x2000u; 0x123456u; 0x0fffffffu; 0x00u; 0x3fffu; 0x4000u] |> should equal [0xc0uy; 0x00uy; 0xc8uy; 0xe8uy; 0x56uy; 0xffuy; 0xffuy; 0xffuy; 0x7fuy; 0x00uy; 0xffuy; 0x7fuy; 0x81uy; 0x80uy; 0x00uy]
56
52
 
57
- [<Test>]
58
- [<Ignore("Remove to run test")>]
53
+ [<Fact(Skip = "Remove to run test")>]
59
54
  let ``From bytes multiple values`` () =
60
- Assert.That(fromBytes [0xc0uy; 0x00uy; 0xc8uy; 0xe8uy; 0x56uy; 0xffuy; 0xffuy; 0xffuy; 0x7fuy; 0x00uy; 0xffuy; 0x7fuy; 0x81uy; 0x80uy; 0x00uy], Is.EqualTo([0x2000u; 0x123456u; 0x0fffffffu; 0x00u; 0x3fffu; 0x4000u]))
55
+ fromBytes [0xc0uy; 0x00uy; 0xc8uy; 0xe8uy; 0x56uy; 0xffuy; 0xffuy; 0xffuy; 0x7fuy; 0x00uy; 0xffuy; 0x7fuy; 0x81uy; 0x80uy; 0x00uy] |> should equal [0x2000u; 0x123456u; 0x0fffffffu; 0x00u; 0x3fffu; 0x4000u]
61
56
 
62
- [<Test>]
63
- [<Ignore("Remove to run test")>]
57
+ [<Fact(Skip = "Remove to run test")>]
64
58
  let ``Incomplete byte sequence`` () =
65
- Assert.That((fun () -> fromBytes [0xffuy] |> ignore), Throws.Exception)
59
+ (fun () -> fromBytes [0xffuy] |> ignore) |> should throw typeof<Exception>
66
60
 
67
- [<Test>]
68
- [<Ignore("Remove to run test")>]
61
+ [<Fact(Skip = "Remove to run test")>]
69
62
  let ``Overflow`` () =
70
- Assert.That((fun () -> fromBytes [0xffuy; 0xffuy; 0xffuy; 0xffuy; 0x7fuy] |> ignore), Throws.Exception)
63
+ (fun () -> fromBytes [0xffuy; 0xffuy; 0xffuy; 0xffuy; 0x7fuy] |> ignore) |> should throw typeof<Exception>
71
64
 
72
- [<Test>]
73
- [<Ignore("Remove to run test")>]
65
+ [<Fact(Skip = "Remove to run test")>]
74
66
  let ``Chained execution is identity`` () =
75
67
  let test = [0xf2u; 0xf6u; 0x96u; 0x9cu; 0x3bu; 0x39u; 0x2eu; 0x30u; 0xb3u; 0x24u];
76
- Assert.That(toBytes test |> fromBytes, Is.EqualTo(test))
68
+ toBytes test |> fromBytes |> should equal test
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module Phrase
2
+
3
+ let wordCount phrase = failwith "You need to implement this function."
@@ -0,0 +1,22 @@
1
+ <Project Sdk="Microsoft.NET.Sdk">
2
+
3
+ <PropertyGroup>
4
+ <TargetFramework>netcoreapp2.0</TargetFramework>
5
+
6
+ <IsPackable>false</IsPackable>
7
+ </PropertyGroup>
8
+
9
+ <ItemGroup>
10
+ <Compile Include="WordCount.fs" />
11
+ <Compile Include="WordCountTest.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,27 +1,26 @@
1
- module WordCountTest
1
+ module WordCountTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
  open Phrase
5
6
 
6
- [<Test>]
7
+ [<Fact>]
7
8
  let ``Count one word`` () =
8
9
  let phrase = "word"
9
10
  let counts = Map.ofSeq [("word", 1)]
10
11
 
11
- Assert.That(wordCount phrase, Is.EqualTo(counts))
12
+ wordCount phrase |> should equal counts
12
13
 
13
- [<Test>]
14
- [<Ignore("Remove to run test")>]
14
+ [<Fact(Skip = "Remove to run test")>]
15
15
  let ``Count one of each`` () =
16
16
  let phrase = "one of each"
17
17
  let counts = Map.ofSeq [("one", 1);
18
18
  ("of", 1);
19
19
  ("each", 1)]
20
20
 
21
- Assert.That(wordCount phrase, Is.EqualTo(counts))
21
+ wordCount phrase |> should equal counts
22
22
 
23
- [<Test>]
24
- [<Ignore("Remove to run test")>]
23
+ [<Fact(Skip = "Remove to run test")>]
25
24
  let ``Count multiple occurrences`` () =
26
25
  let phrase = "one fish two fish red fish blue fish"
27
26
  let counts = Map.ofSeq [("one", 1);
@@ -30,10 +29,9 @@ let ``Count multiple occurrences`` () =
30
29
  ("red", 1);
31
30
  ("blue", 1)]
32
31
 
33
- Assert.That(wordCount phrase, Is.EqualTo(counts))
32
+ wordCount phrase |> should equal counts
34
33
 
35
- [<Test>]
36
- [<Ignore("Remove to run test")>]
34
+ [<Fact(Skip = "Remove to run test")>]
37
35
  let ``Count everything just once`` () =
38
36
  let phrase = "all the kings horses and all the kings men"
39
37
  let counts = Map.ofSeq [("all", 2);
@@ -43,10 +41,9 @@ let ``Count everything just once`` () =
43
41
  ("and", 1);
44
42
  ("men", 1)]
45
43
 
46
- Assert.That(wordCount phrase, Is.EqualTo(counts))
44
+ wordCount phrase |> should equal counts
47
45
 
48
- [<Test>]
49
- [<Ignore("Remove to run test")>]
46
+ [<Fact(Skip = "Remove to run test")>]
50
47
  let ``Ignore punctuation`` () =
51
48
  let phrase = "car : carpet as java : javascript!!&@$%^&"
52
49
  let counts = Map.ofSeq [("car", 1);
@@ -55,38 +52,34 @@ let ``Ignore punctuation`` () =
55
52
  ("java", 1);
56
53
  ("javascript", 1)]
57
54
 
58
- Assert.That(wordCount phrase, Is.EqualTo(counts))
55
+ wordCount phrase |> should equal counts
59
56
 
60
- [<Test>]
61
- [<Ignore("Remove to run test")>]
57
+ [<Fact(Skip = "Remove to run test")>]
62
58
  let ``Handles cramped list`` () =
63
59
  let phrase = "one,two,three"
64
60
  let counts = Map.ofSeq [("one", 1);
65
61
  ("two", 1);
66
62
  ("three", 1)]
67
63
 
68
- Assert.That(wordCount phrase, Is.EqualTo(counts))
64
+ wordCount phrase |> should equal counts
69
65
 
70
- [<Test>]
71
- [<Ignore("Remove to run test")>]
66
+ [<Fact(Skip = "Remove to run test")>]
72
67
  let ``Include numbers`` () =
73
68
  let phrase = "testing, 1, 2 testing"
74
69
  let counts = Map.ofSeq [("testing", 2);
75
70
  ("1", 1);
76
71
  ("2", 1)]
77
72
 
78
- Assert.That(wordCount phrase, Is.EqualTo(counts))
73
+ wordCount phrase |> should equal counts
79
74
 
80
- [<Test>]
81
- [<Ignore("Remove to run test")>]
75
+ [<Fact(Skip = "Remove to run test")>]
82
76
  let ``Normalize case`` () =
83
77
  let phrase = "go Go GO"
84
78
  let counts = Map.ofSeq [("go", 3)]
85
79
 
86
- Assert.That(wordCount phrase, Is.EqualTo(counts))
80
+ wordCount phrase |> should equal counts
87
81
 
88
- [<Test>]
89
- [<Ignore("Remove to run test")>]
82
+ [<Fact(Skip = "Remove to run test")>]
90
83
  let ``With apostrophes`` () =
91
84
  let phrase = "First: don't laugh. Then: don't cry."
92
85
  let counts = Map.ofSeq [("first", 1);
@@ -95,18 +88,16 @@ let ``With apostrophes`` () =
95
88
  ("then", 1);
96
89
  ("cry", 1)]
97
90
 
98
- Assert.That(wordCount phrase, Is.EqualTo(counts))
91
+ wordCount phrase |> should equal counts
99
92
 
100
- [<Test>]
101
- [<Ignore("Remove to run test")>]
93
+ [<Fact(Skip = "Remove to run test")>]
102
94
  let ``With free standing apostrophes`` () =
103
95
  let phrase = "go ' Go '' GO"
104
96
  let counts = Map.ofSeq [("go", 3)]
105
97
 
106
- Assert.That(wordCount phrase, Is.EqualTo(counts))
98
+ wordCount phrase |> should equal counts
107
99
 
108
- [<Test>]
109
- [<Ignore("Remove to run test")>]
100
+ [<Fact(Skip = "Remove to run test")>]
110
101
  let ``With apostrophes as quotes`` () =
111
102
  let phrase = "She said, 'let's meet at twelve o'clock'"
112
103
  let counts = Map.ofSeq [("she", 1);
@@ -117,10 +108,9 @@ let ``With apostrophes as quotes`` () =
117
108
  ("twelve", 1);
118
109
  ("o'clock", 1)]
119
110
 
120
- Assert.That(wordCount phrase, Is.EqualTo(counts))
111
+ wordCount phrase |> should equal counts
121
112
 
122
- [<Test>]
123
- [<Ignore("Remove to run test")>]
113
+ [<Fact(Skip = "Remove to run test")>]
124
114
  let ``With multiple lines`` () =
125
115
  let phrase = "Your time will come. You will face the same Evil, and you will defeat it."
126
116
  let counts = Map.ofSeq [("and", 1);
@@ -136,4 +126,4 @@ let ``With multiple lines`` () =
136
126
  ("you", 2);
137
127
  ("your", 1)]
138
128
 
139
- Assert.That(wordCount phrase, Is.EqualTo(counts))
129
+ wordCount phrase |> should equal counts
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module WordSearch
2
+
3
+ let find puzzle word = 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="WordSearch.fs" />
11
+ <Compile Include="WordSearchTest.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 WordSearchTest
1
+ module WordSearchTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
 
5
6
  open WordSearch
6
7
 
@@ -16,61 +17,52 @@ let puzzle =
16
17
  "jalaycalmp";
17
18
  "clojurermt"]
18
19
 
19
- [<Test>]
20
+ [<Fact>]
20
21
  let ``Should find horizontal words written left-to-right`` () =
21
22
  let actual = find puzzle "clojure"
22
- Assert.That(actual, Is.EqualTo(Some ((1, 10), (7, 10))))
23
+ actual |> should equal <| Some ((1, 10), (7, 10))
23
24
 
24
- [<Test>]
25
- [<Ignore("Remove to run test")>]
25
+ [<Fact(Skip = "Remove to run test")>]
26
26
  let ``Should find horizontal words written right-to-left`` () =
27
27
  let actual = find puzzle "elixir"
28
- Assert.That(actual, Is.EqualTo(Some ((6, 5), (1, 5))))
28
+ actual |> should equal <| Some ((6, 5), (1, 5))
29
29
 
30
- [<Test>]
31
- [<Ignore("Remove to run test")>]
30
+ [<Fact(Skip = "Remove to run test")>]
32
31
  let ``Should find vertical words written top-to-bottom`` () =
33
32
  let actual = find puzzle "ecmascript"
34
- Assert.That(actual, Is.EqualTo(Some ((10, 1), (10, 10))))
33
+ actual |> should equal <| Some ((10, 1), (10, 10))
35
34
 
36
- [<Test>]
37
- [<Ignore("Remove to run test")>]
35
+ [<Fact(Skip = "Remove to run test")>]
38
36
  let ``Should find vertical words written bottom-to-top`` () =
39
37
  let actual = find puzzle "rust"
40
- Assert.That(actual, Is.EqualTo(Some ((9, 5), (9, 2))))
38
+ actual |> should equal <| Some ((9, 5), (9, 2))
41
39
 
42
- [<Test>]
43
- [<Ignore("Remove to run test")>]
40
+ [<Fact(Skip = "Remove to run test")>]
44
41
  let ``Should find diagonal words written top-left-to-bottom-right`` () =
45
42
  let actual = find puzzle "java"
46
- Assert.That(actual, Is.EqualTo(Some ((1, 1), (4, 4))))
43
+ actual |> should equal <| Some ((1, 1), (4, 4))
47
44
 
48
- [<Test>]
49
- [<Ignore("Remove to run test")>]
45
+ [<Fact(Skip = "Remove to run test")>]
50
46
  let ``Should find diagonal upper written bottom-right-to-top-left`` () =
51
47
  let actual = find puzzle "lua"
52
- Assert.That(actual, Is.EqualTo(Some ((8, 9), (6, 7))))
48
+ actual |> should equal <| Some ((8, 9), (6, 7))
53
49
 
54
- [<Test>]
55
- [<Ignore("Remove to run test")>]
50
+ [<Fact(Skip = "Remove to run test")>]
56
51
  let ``Should find diagonal upper written bottom-left-to-top-right`` () =
57
52
  let actual = find puzzle "lisp"
58
- Assert.That(actual, Is.EqualTo(Some ((3, 6), (6, 3))))
53
+ actual |> should equal <| Some ((3, 6), (6, 3))
59
54
 
60
- [<Test>]
61
- [<Ignore("Remove to run test")>]
55
+ [<Fact(Skip = "Remove to run test")>]
62
56
  let ``Should find diagonal upper written top-right-to-bottom-left`` () =
63
57
  let actual = find puzzle "ruby"
64
- Assert.That(actual, Is.EqualTo(Some ((8, 6), (5, 9))))
58
+ actual |> should equal <| Some ((8, 6), (5, 9))
65
59
 
66
- [<Test>]
67
- [<Ignore("Remove to run test")>]
60
+ [<Fact(Skip = "Remove to run test")>]
68
61
  let ``Should not find words that are not in the puzzle`` () =
69
62
  let actual = find puzzle "haskell"
70
- Assert.That(actual, Is.EqualTo(None))
63
+ actual |> should equal None
71
64
 
72
- [<Test>]
73
- [<Ignore("Remove to run test")>]
65
+ [<Fact(Skip = "Remove to run test")>]
74
66
  let ``Should be able to search differently-sized puzzles`` () =
75
67
  let differentSizePuzzle =
76
68
  ["qwertyuiopz";
@@ -78,4 +70,4 @@ let ``Should be able to search differently-sized puzzles`` () =
78
70
  "abcdefghijk"]
79
71
 
80
72
  let actual = find differentSizePuzzle "exercism"
81
- Assert.That(actual, Is.EqualTo(Some ((11, 2), (4, 2))))
73
+ actual |> should equal <| Some ((11, 2), (4, 2))
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module Wordy
2
+
3
+ let solve question = 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="Wordy.fs" />
11
+ <Compile Include="WordyTest.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>