trackler 2.2.1.22 → 2.2.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/bash/exercises/bob/bob_test.sh +8 -6
  4. data/tracks/bash/exercises/bob/example.sh +30 -6
  5. data/tracks/coffeescript/docs/SNIPPET.txt +4 -0
  6. data/tracks/csharp/generators/Exercises/Allergies.cs +0 -2
  7. data/tracks/csharp/generators/Exercises/Anagram.cs +0 -2
  8. data/tracks/csharp/generators/Exercises/BinarySearch.cs +0 -2
  9. data/tracks/csharp/generators/Exercises/ComplexNumbers.cs +0 -2
  10. data/tracks/csharp/generators/Exercises/RailFenceCipher.cs +1 -2
  11. data/tracks/csharp/generators/Exercises/SpaceAge.cs +0 -3
  12. data/tracks/csharp/generators/Input/CanonicalDataCase.cs +37 -2
  13. data/tracks/dart/docs/SNIPPET.txt +5 -0
  14. data/tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js +5 -1
  15. data/tracks/elm/docs/SNIPPET.txt +10 -0
  16. data/tracks/fortran/docs/SNIPPET.txt +9 -0
  17. data/tracks/fsharp/.gitignore +2 -2
  18. data/tracks/fsharp/.travis.yml +18 -5
  19. data/tracks/fsharp/build.cake +92 -0
  20. data/tracks/fsharp/build.ps1 +81 -0
  21. data/tracks/fsharp/build.sh +56 -33
  22. data/tracks/fsharp/config.json +14 -14
  23. data/tracks/fsharp/docs/INSTALLATION.md +14 -45
  24. data/tracks/fsharp/docs/TESTS.md +12 -25
  25. data/tracks/fsharp/exercises/Exercises.sln +648 -0
  26. data/tracks/fsharp/exercises/accumulate/Accumulate.fs +3 -0
  27. data/tracks/fsharp/exercises/accumulate/Accumulate.fsproj +22 -0
  28. data/tracks/fsharp/exercises/accumulate/AccumulateTest.fs +18 -22
  29. data/tracks/fsharp/exercises/accumulate/HINTS.md +1 -0
  30. data/tracks/fsharp/exercises/accumulate/Program.fs +1 -0
  31. data/tracks/fsharp/exercises/acronym/Acronym.fs +3 -0
  32. data/tracks/fsharp/exercises/acronym/Acronym.fsproj +22 -0
  33. data/tracks/fsharp/exercises/acronym/AcronymTest.fs +18 -24
  34. data/tracks/fsharp/exercises/acronym/Program.fs +1 -0
  35. data/tracks/fsharp/exercises/all-your-base/AllYourBase.fs +3 -0
  36. data/tracks/fsharp/exercises/all-your-base/AllYourBase.fsproj +22 -0
  37. data/tracks/fsharp/exercises/all-your-base/AllYourBaseTest.fs +45 -64
  38. data/tracks/fsharp/exercises/all-your-base/Program.fs +1 -0
  39. data/tracks/fsharp/exercises/allergies/Allergies.fs +9 -0
  40. data/tracks/fsharp/exercises/allergies/Allergies.fsproj +22 -0
  41. data/tracks/fsharp/exercises/allergies/AllergiesTest.fs +47 -51
  42. data/tracks/fsharp/exercises/allergies/Program.fs +1 -0
  43. data/tracks/fsharp/exercises/alphametics/Alphametics.fs +3 -0
  44. data/tracks/fsharp/exercises/alphametics/Alphametics.fsproj +22 -0
  45. data/tracks/fsharp/exercises/alphametics/AlphameticsTest.fs +19 -25
  46. data/tracks/fsharp/exercises/alphametics/Example.fs +13 -13
  47. data/tracks/fsharp/exercises/alphametics/Program.fs +1 -0
  48. data/tracks/fsharp/exercises/anagram/Anagram.fs +3 -0
  49. data/tracks/fsharp/exercises/anagram/Anagram.fsproj +22 -0
  50. data/tracks/fsharp/exercises/anagram/AnagramTest.fs +22 -33
  51. data/tracks/fsharp/exercises/anagram/Program.fs +1 -0
  52. data/tracks/fsharp/exercises/atbash-cipher/AtbashCipher.fs +3 -0
  53. data/tracks/fsharp/exercises/atbash-cipher/AtbashCipher.fsproj +22 -0
  54. data/tracks/fsharp/exercises/atbash-cipher/{AtbashTest.fs → AtbashCipherTest.fs} +18 -24
  55. data/tracks/fsharp/exercises/atbash-cipher/Program.fs +1 -0
  56. data/tracks/fsharp/exercises/bank-account/BankAccount.fs +11 -0
  57. data/tracks/fsharp/exercises/bank-account/BankAccount.fsproj +22 -0
  58. data/tracks/fsharp/exercises/bank-account/BankAccountTest.fs +16 -19
  59. data/tracks/fsharp/exercises/bank-account/Program.fs +1 -0
  60. data/tracks/fsharp/exercises/beer-song/BeerSong.fs +7 -0
  61. data/tracks/fsharp/exercises/beer-song/BeerSong.fsproj +22 -0
  62. data/tracks/fsharp/exercises/beer-song/BeerSongTest.fs +17 -22
  63. data/tracks/fsharp/exercises/beer-song/Program.fs +1 -0
  64. data/tracks/fsharp/exercises/binary-search/BinarySearch.fs +3 -0
  65. data/tracks/fsharp/exercises/binary-search/BinarySearch.fsproj +22 -0
  66. data/tracks/fsharp/exercises/binary-search/BinarySearchTest.fs +21 -28
  67. data/tracks/fsharp/exercises/binary-search/Program.fs +1 -0
  68. data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTree.fs +15 -0
  69. data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTree.fsproj +22 -0
  70. data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTreeTest.fs +31 -38
  71. data/tracks/fsharp/exercises/binary-search-tree/Program.fs +1 -0
  72. data/tracks/fsharp/exercises/bob/Bob.fs +3 -0
  73. data/tracks/fsharp/exercises/bob/Bob.fsproj +22 -0
  74. data/tracks/fsharp/exercises/bob/BobTest.fs +33 -46
  75. data/tracks/fsharp/exercises/bob/Program.fs +1 -0
  76. data/tracks/fsharp/exercises/book-store/BookStore.fs +3 -0
  77. data/tracks/fsharp/exercises/book-store/BookStore.fsproj +22 -0
  78. data/tracks/fsharp/exercises/book-store/BookStoreTest.fs +27 -37
  79. data/tracks/fsharp/exercises/book-store/Program.fs +1 -0
  80. data/tracks/fsharp/exercises/bowling/Bowling.fs +7 -0
  81. data/tracks/fsharp/exercises/bowling/Bowling.fsproj +22 -0
  82. data/tracks/fsharp/exercises/bowling/BowlingTest.fs +75 -97
  83. data/tracks/fsharp/exercises/bowling/Example.fs +1 -1
  84. data/tracks/fsharp/exercises/bowling/Program.fs +1 -0
  85. data/tracks/fsharp/exercises/bracket-push/BracketPush.fs +3 -0
  86. data/tracks/fsharp/exercises/bracket-push/BracketPush.fsproj +22 -0
  87. data/tracks/fsharp/exercises/bracket-push/BracketPushTest.fs +27 -37
  88. data/tracks/fsharp/exercises/bracket-push/Program.fs +1 -0
  89. data/tracks/fsharp/exercises/change/Change.fs +3 -0
  90. data/tracks/fsharp/exercises/change/Change.fsproj +22 -0
  91. data/tracks/fsharp/exercises/change/ChangeTest.fs +19 -25
  92. data/tracks/fsharp/exercises/change/Program.fs +1 -0
  93. data/tracks/fsharp/exercises/circular-buffer/CircularBuffer.fs +11 -0
  94. data/tracks/fsharp/exercises/circular-buffer/CircularBuffer.fsproj +22 -0
  95. data/tracks/fsharp/exercises/circular-buffer/CircularBufferTest.fs +36 -42
  96. data/tracks/fsharp/exercises/circular-buffer/Program.fs +1 -0
  97. data/tracks/fsharp/exercises/clock/Clock.fs +9 -0
  98. data/tracks/fsharp/exercises/clock/Clock.fsproj +22 -0
  99. data/tracks/fsharp/exercises/clock/ClockTest.fs +34 -48
  100. data/tracks/fsharp/exercises/clock/Program.fs +1 -0
  101. data/tracks/fsharp/exercises/connect/Connect.fs +3 -0
  102. data/tracks/fsharp/exercises/connect/Connect.fsproj +22 -0
  103. data/tracks/fsharp/exercises/connect/ConnectTest.fs +19 -25
  104. data/tracks/fsharp/exercises/connect/Program.fs +1 -0
  105. data/tracks/fsharp/exercises/crypto-square/CryptoSquare.fs +44 -0
  106. data/tracks/fsharp/exercises/crypto-square/CryptoSquare.fsproj +22 -0
  107. data/tracks/fsharp/exercises/crypto-square/CryptoSquareTest.fs +28 -39
  108. data/tracks/fsharp/exercises/crypto-square/Program.fs +1 -0
  109. data/tracks/fsharp/exercises/custom-set/CustomSet.fs +29 -0
  110. data/tracks/fsharp/exercises/custom-set/CustomSet.fsproj +22 -0
  111. data/tracks/fsharp/exercises/custom-set/CustomSetTest.fs +77 -119
  112. data/tracks/fsharp/exercises/custom-set/Program.fs +1 -0
  113. data/tracks/fsharp/exercises/diamond/Diamond.fs +3 -0
  114. data/tracks/fsharp/exercises/diamond/Diamond.fsproj +22 -0
  115. data/tracks/fsharp/exercises/diamond/DiamondTest.fs +31 -27
  116. data/tracks/fsharp/exercises/diamond/Program.fs +1 -0
  117. data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquares.fs +7 -0
  118. data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquares.fsproj +22 -0
  119. data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquaresTest.fs +21 -28
  120. data/tracks/fsharp/exercises/difference-of-squares/Program.fs +1 -0
  121. data/tracks/fsharp/exercises/diffie-hellman/DiffieHellman.fs +7 -0
  122. data/tracks/fsharp/exercises/diffie-hellman/DiffieHellman.fsproj +22 -0
  123. data/tracks/fsharp/exercises/diffie-hellman/DiffieHellmanTest.fs +16 -19
  124. data/tracks/fsharp/exercises/diffie-hellman/Program.fs +1 -0
  125. data/tracks/fsharp/exercises/dominoes/Dominoes.fs +3 -0
  126. data/tracks/fsharp/exercises/dominoes/Dominoes.fsproj +22 -0
  127. data/tracks/fsharp/exercises/dominoes/DominoesTest.fs +27 -37
  128. data/tracks/fsharp/exercises/dominoes/Program.fs +1 -0
  129. data/tracks/fsharp/exercises/dot-dsl/DotDsl.fs +15 -0
  130. data/tracks/fsharp/exercises/dot-dsl/DotDsl.fsproj +22 -0
  131. data/tracks/fsharp/exercises/dot-dsl/DotDslTest.fs +27 -31
  132. data/tracks/fsharp/exercises/dot-dsl/Program.fs +1 -0
  133. data/tracks/fsharp/exercises/error-handling/ErrorHandling.fs +11 -0
  134. data/tracks/fsharp/exercises/error-handling/ErrorHandling.fsproj +22 -0
  135. data/tracks/fsharp/exercises/error-handling/ErrorHandlingTest.fs +20 -25
  136. data/tracks/fsharp/exercises/error-handling/Program.fs +1 -0
  137. data/tracks/fsharp/exercises/etl/Etl.fs +3 -0
  138. data/tracks/fsharp/exercises/etl/Etl.fsproj +22 -0
  139. data/tracks/fsharp/exercises/etl/{ETLTest.fs → EtlTest.fs} +11 -13
  140. data/tracks/fsharp/exercises/etl/Program.fs +1 -0
  141. data/tracks/fsharp/exercises/food-chain/FoodChain.fs +5 -0
  142. data/tracks/fsharp/exercises/food-chain/FoodChain.fsproj +22 -0
  143. data/tracks/fsharp/exercises/food-chain/FoodChainTest.fs +13 -16
  144. data/tracks/fsharp/exercises/food-chain/Program.fs +1 -0
  145. data/tracks/fsharp/exercises/forth/Forth.fs +3 -0
  146. data/tracks/fsharp/exercises/forth/Forth.fsproj +22 -0
  147. data/tracks/fsharp/exercises/forth/ForthTest.fs +44 -57
  148. data/tracks/fsharp/exercises/forth/Program.fs +1 -0
  149. data/tracks/fsharp/exercises/gigasecond/Gigasecond.fs +3 -0
  150. data/tracks/fsharp/exercises/gigasecond/Gigasecond.fsproj +22 -0
  151. data/tracks/fsharp/exercises/gigasecond/GigasecondTest.fs +9 -10
  152. data/tracks/fsharp/exercises/gigasecond/Program.fs +1 -0
  153. data/tracks/fsharp/exercises/go-counting/GoCounting.fs +3 -0
  154. data/tracks/fsharp/exercises/go-counting/GoCounting.fsproj +22 -0
  155. data/tracks/fsharp/exercises/go-counting/GoCountingTest.fs +23 -30
  156. data/tracks/fsharp/exercises/go-counting/Program.fs +1 -0
  157. data/tracks/fsharp/exercises/grade-school/Example.fs +1 -1
  158. data/tracks/fsharp/exercises/grade-school/GradeSchool.fs +9 -0
  159. data/tracks/fsharp/exercises/grade-school/GradeSchool.fsproj +22 -0
  160. data/tracks/fsharp/exercises/grade-school/GradeSchoolTest.fs +17 -22
  161. data/tracks/fsharp/exercises/grade-school/Program.fs +1 -0
  162. data/tracks/fsharp/exercises/grains/Grains.fs +6 -0
  163. data/tracks/fsharp/exercises/grains/Grains.fsproj +22 -0
  164. data/tracks/fsharp/exercises/grains/GrainsTest.fs +19 -25
  165. data/tracks/fsharp/exercises/grains/Program.fs +1 -0
  166. data/tracks/fsharp/exercises/grep/Grep.fs +3 -0
  167. data/tracks/fsharp/exercises/grep/Grep.fsproj +22 -0
  168. data/tracks/fsharp/exercises/grep/GrepTest.fs +332 -348
  169. data/tracks/fsharp/exercises/grep/Program.fs +1 -0
  170. data/tracks/fsharp/exercises/hamming/Hamming.fs +3 -0
  171. data/tracks/fsharp/exercises/hamming/Hamming.fsproj +22 -0
  172. data/tracks/fsharp/exercises/hamming/HammingTest.fs +15 -19
  173. data/tracks/fsharp/exercises/hamming/Program.fs +1 -0
  174. data/tracks/fsharp/exercises/hangman/Hangman.fs +3 -0
  175. data/tracks/fsharp/exercises/hangman/Hangman.fsproj +22 -0
  176. data/tracks/fsharp/exercises/hangman/HangmanTest.fs +30 -34
  177. data/tracks/fsharp/exercises/hangman/Program.fs +1 -0
  178. data/tracks/fsharp/exercises/hello-world/HelloWorld.fs +3 -0
  179. data/tracks/fsharp/exercises/hello-world/HelloWorld.fsproj +22 -0
  180. data/tracks/fsharp/exercises/hello-world/HelloWorldTest.fs +5 -4
  181. data/tracks/fsharp/exercises/hello-world/Program.fs +1 -0
  182. data/tracks/fsharp/exercises/house/House.fs +3 -0
  183. data/tracks/fsharp/exercises/house/House.fsproj +22 -0
  184. data/tracks/fsharp/exercises/house/HouseTest.fs +5 -4
  185. data/tracks/fsharp/exercises/house/Program.fs +1 -0
  186. data/tracks/fsharp/exercises/isogram/Isogram.fs +3 -0
  187. data/tracks/fsharp/exercises/isogram/Isogram.fsproj +22 -0
  188. data/tracks/fsharp/exercises/isogram/IsogramTest.fs +21 -28
  189. data/tracks/fsharp/exercises/isogram/Program.fs +1 -0
  190. data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGarden.fs +9 -0
  191. data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGarden.fsproj +22 -0
  192. data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGardenTest.fs +51 -0
  193. data/tracks/fsharp/exercises/kindergarten-garden/Program.fs +1 -0
  194. data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProduct.fs +3 -0
  195. data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProduct.fsproj +22 -0
  196. data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProductTest.fs +27 -22
  197. data/tracks/fsharp/exercises/largest-series-product/Program.fs +1 -0
  198. data/tracks/fsharp/exercises/leap/Leap.fs +3 -0
  199. data/tracks/fsharp/exercises/leap/Leap.fsproj +22 -0
  200. data/tracks/fsharp/exercises/leap/LeapTest.fs +11 -13
  201. data/tracks/fsharp/exercises/leap/Program.fs +1 -0
  202. data/tracks/fsharp/exercises/ledger/Ledger.fsproj +22 -0
  203. data/tracks/fsharp/exercises/ledger/LedgerTest.fs +23 -22
  204. data/tracks/fsharp/exercises/ledger/Program.fs +1 -0
  205. data/tracks/fsharp/exercises/lens-person/LensPerson.fs +1 -22
  206. data/tracks/fsharp/exercises/lens-person/LensPerson.fsproj +23 -0
  207. data/tracks/fsharp/exercises/lens-person/LensPersonTest.fs +11 -13
  208. data/tracks/fsharp/exercises/lens-person/Program.fs +1 -0
  209. data/tracks/fsharp/exercises/linked-list/LinkedList.fs +13 -0
  210. data/tracks/fsharp/exercises/linked-list/LinkedList.fsproj +22 -0
  211. data/tracks/fsharp/exercises/linked-list/LinkedListTest.fs +28 -33
  212. data/tracks/fsharp/exercises/linked-list/Program.fs +1 -0
  213. data/tracks/fsharp/exercises/list-ops/ListOps.fs +17 -0
  214. data/tracks/fsharp/exercises/list-ops/ListOps.fsproj +22 -0
  215. data/tracks/fsharp/exercises/list-ops/ListOpsTest.fs +51 -73
  216. data/tracks/fsharp/exercises/list-ops/Program.fs +1 -0
  217. data/tracks/fsharp/exercises/luhn/Luhn.fs +3 -0
  218. data/tracks/fsharp/exercises/luhn/Luhn.fsproj +22 -0
  219. data/tracks/fsharp/exercises/luhn/LuhnTest.fs +28 -39
  220. data/tracks/fsharp/exercises/luhn/Program.fs +1 -0
  221. data/tracks/fsharp/exercises/markdown/Markdown.fsproj +22 -0
  222. data/tracks/fsharp/exercises/markdown/MarkdownTest.fs +21 -20
  223. data/tracks/fsharp/exercises/markdown/Program.fs +1 -0
  224. data/tracks/fsharp/exercises/matrix/Matrix.fs +7 -0
  225. data/tracks/fsharp/exercises/matrix/Matrix.fsproj +22 -0
  226. data/tracks/fsharp/exercises/matrix/MatrixTest.fs +76 -48
  227. data/tracks/fsharp/exercises/matrix/Program.fs +1 -0
  228. data/tracks/fsharp/exercises/meetup/Meetup.fs +7 -0
  229. data/tracks/fsharp/exercises/meetup/Meetup.fsproj +22 -0
  230. data/tracks/fsharp/exercises/meetup/MeetupTest.fs +67 -60
  231. data/tracks/fsharp/exercises/meetup/Program.fs +1 -0
  232. data/tracks/fsharp/exercises/minesweeper/Minesweeper.fs +3 -0
  233. data/tracks/fsharp/exercises/minesweeper/Minesweeper.fsproj +22 -0
  234. data/tracks/fsharp/exercises/minesweeper/MinesweeperTest.fs +17 -22
  235. data/tracks/fsharp/exercises/minesweeper/Program.fs +1 -0
  236. data/tracks/fsharp/exercises/nth-prime/NthPrime.fs +3 -0
  237. data/tracks/fsharp/exercises/nth-prime/NthPrime.fsproj +22 -0
  238. data/tracks/fsharp/exercises/nth-prime/NthPrimeTest.fs +25 -34
  239. data/tracks/fsharp/exercises/nth-prime/Program.fs +1 -0
  240. data/tracks/fsharp/exercises/nucleotide-count/NucleotideCount.fs +5 -0
  241. data/tracks/fsharp/exercises/nucleotide-count/NucleotideCount.fsproj +22 -0
  242. data/tracks/fsharp/exercises/nucleotide-count/NucleotideCountTest.fs +17 -21
  243. data/tracks/fsharp/exercises/nucleotide-count/Program.fs +1 -0
  244. data/tracks/fsharp/exercises/ocr-numbers/OcrNumbers.fs +3 -0
  245. data/tracks/fsharp/exercises/ocr-numbers/OcrNumbers.fsproj +22 -0
  246. data/tracks/fsharp/exercises/ocr-numbers/OcrNumbersTest.fs +33 -46
  247. data/tracks/fsharp/exercises/ocr-numbers/Program.fs +1 -0
  248. data/tracks/fsharp/exercises/palindrome-products/PalindromeProducts.fs +5 -0
  249. data/tracks/fsharp/exercises/palindrome-products/PalindromeProducts.fsproj +22 -0
  250. data/tracks/fsharp/exercises/palindrome-products/PalindromeProductsTest.fs +54 -0
  251. data/tracks/fsharp/exercises/palindrome-products/Program.fs +1 -0
  252. data/tracks/fsharp/exercises/pangram/Pangram.fs +3 -0
  253. data/tracks/fsharp/exercises/pangram/Pangram.fsproj +22 -0
  254. data/tracks/fsharp/exercises/pangram/PangramTest.fs +23 -31
  255. data/tracks/fsharp/exercises/pangram/Program.fs +1 -0
  256. data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequency.fs +3 -0
  257. data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequency.fsproj +22 -0
  258. data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequencyTest.fs +27 -35
  259. data/tracks/fsharp/exercises/parallel-letter-frequency/Program.fs +1 -0
  260. data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangle.fs +3 -0
  261. data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangle.fsproj +22 -0
  262. data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangleTest.fs +15 -19
  263. data/tracks/fsharp/exercises/pascals-triangle/Program.fs +1 -0
  264. data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbers.fs +5 -0
  265. data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbers.fsproj +22 -0
  266. data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbersTest.fs +18 -14
  267. data/tracks/fsharp/exercises/perfect-numbers/Program.fs +1 -0
  268. data/tracks/fsharp/exercises/phone-number/PhoneNumber.fs +3 -0
  269. data/tracks/fsharp/exercises/phone-number/PhoneNumber.fsproj +22 -0
  270. data/tracks/fsharp/exercises/phone-number/PhoneNumberTest.fs +23 -31
  271. data/tracks/fsharp/exercises/phone-number/Program.fs +1 -0
  272. data/tracks/fsharp/exercises/pig-latin/PigLatin.fs +3 -0
  273. data/tracks/fsharp/exercises/pig-latin/PigLatin.fsproj +22 -0
  274. data/tracks/fsharp/exercises/pig-latin/PigLatinTest.fs +39 -44
  275. data/tracks/fsharp/exercises/pig-latin/Program.fs +1 -0
  276. data/tracks/fsharp/exercises/poker/Poker.fs +3 -0
  277. data/tracks/fsharp/exercises/poker/Poker.fsproj +22 -0
  278. data/tracks/fsharp/exercises/poker/PokerTest.fs +40 -56
  279. data/tracks/fsharp/exercises/poker/Program.fs +1 -0
  280. data/tracks/fsharp/exercises/pov/Pov.fs +3 -0
  281. data/tracks/fsharp/exercises/pov/Pov.fsproj +22 -0
  282. data/tracks/fsharp/exercises/pov/PovTest.fs +23 -31
  283. data/tracks/fsharp/exercises/pov/Program.fs +1 -0
  284. data/tracks/fsharp/exercises/prime-factors/Example.fs +1 -1
  285. data/tracks/fsharp/exercises/prime-factors/PrimeFactors.fs +3 -0
  286. data/tracks/fsharp/exercises/prime-factors/PrimeFactors.fsproj +22 -0
  287. data/tracks/fsharp/exercises/prime-factors/PrimeFactorsTest.fs +22 -30
  288. data/tracks/fsharp/exercises/prime-factors/Program.fs +1 -0
  289. data/tracks/fsharp/exercises/protein-translation/Program.fs +1 -0
  290. data/tracks/fsharp/exercises/protein-translation/ProteinTranslation.fs +3 -0
  291. data/tracks/fsharp/exercises/protein-translation/ProteinTranslation.fsproj +22 -0
  292. data/tracks/fsharp/exercises/protein-translation/ProteinTranslationTest.fs +41 -36
  293. data/tracks/fsharp/exercises/proverb/Program.fs +1 -0
  294. data/tracks/fsharp/exercises/proverb/Proverb.fs +5 -0
  295. data/tracks/fsharp/exercises/proverb/Proverb.fsproj +22 -0
  296. data/tracks/fsharp/exercises/proverb/ProverbTest.fs +11 -13
  297. data/tracks/fsharp/exercises/pythagorean-triplet/Program.fs +1 -0
  298. data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTriplet.fs +7 -0
  299. data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTriplet.fsproj +22 -0
  300. data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTripletTest.fs +19 -20
  301. data/tracks/fsharp/exercises/queen-attack/Program.fs +1 -0
  302. data/tracks/fsharp/exercises/queen-attack/QueenAttack.fs +3 -0
  303. data/tracks/fsharp/exercises/queen-attack/QueenAttack.fsproj +22 -0
  304. data/tracks/fsharp/exercises/queen-attack/QueenAttackTest.fs +19 -25
  305. data/tracks/fsharp/exercises/rail-fence-cipher/Program.fs +1 -0
  306. data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipher.fs +5 -0
  307. data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipher.fsproj +22 -0
  308. data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipherTest.fs +15 -19
  309. data/tracks/fsharp/exercises/raindrops/Program.fs +1 -0
  310. data/tracks/fsharp/exercises/raindrops/Raindrops.fs +3 -0
  311. data/tracks/fsharp/exercises/raindrops/Raindrops.fsproj +22 -0
  312. data/tracks/fsharp/exercises/raindrops/RaindropsTest.fs +30 -24
  313. data/tracks/fsharp/exercises/react/Program.fs +1 -0
  314. data/tracks/fsharp/exercises/react/React.fs +3 -0
  315. data/tracks/fsharp/exercises/react/React.fsproj +22 -0
  316. data/tracks/fsharp/exercises/react/ReactTest.fs +26 -31
  317. data/tracks/fsharp/exercises/rectangles/Program.fs +1 -0
  318. data/tracks/fsharp/exercises/rectangles/Rectangles.fs +3 -0
  319. data/tracks/fsharp/exercises/rectangles/Rectangles.fsproj +22 -0
  320. data/tracks/fsharp/exercises/rectangles/RectanglesTest.fs +23 -31
  321. data/tracks/fsharp/exercises/rna-transcription/Program.fs +1 -0
  322. data/tracks/fsharp/exercises/rna-transcription/RnaTranscription.fs +3 -0
  323. data/tracks/fsharp/exercises/rna-transcription/RnaTranscription.fsproj +22 -0
  324. data/tracks/fsharp/exercises/rna-transcription/RnaTranscriptionTest.fs +26 -0
  325. data/tracks/fsharp/exercises/robot-name/Program.fs +1 -0
  326. data/tracks/fsharp/exercises/robot-name/RobotName.fs +7 -0
  327. data/tracks/fsharp/exercises/robot-name/RobotName.fsproj +22 -0
  328. data/tracks/fsharp/exercises/robot-name/RobotNameTest.fs +12 -13
  329. data/tracks/fsharp/exercises/robot-simulator/Program.fs +1 -0
  330. data/tracks/fsharp/exercises/robot-simulator/RobotSimulator.fs +13 -0
  331. data/tracks/fsharp/exercises/robot-simulator/RobotSimulator.fsproj +22 -0
  332. data/tracks/fsharp/exercises/robot-simulator/RobotSimulatorTest.fs +16 -20
  333. data/tracks/fsharp/exercises/roman-numerals/Program.fs +1 -0
  334. data/tracks/fsharp/exercises/roman-numerals/RomanNumerals.fs +3 -0
  335. data/tracks/fsharp/exercises/roman-numerals/RomanNumerals.fsproj +22 -0
  336. data/tracks/fsharp/exercises/roman-numerals/RomanNumeralsTest.fs +28 -0
  337. data/tracks/fsharp/exercises/run-length-encoding/Program.fs +1 -0
  338. data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncoding.fs +5 -0
  339. data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncoding.fsproj +22 -0
  340. data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncodingTest.fs +17 -22
  341. data/tracks/fsharp/exercises/saddle-points/Program.fs +1 -0
  342. data/tracks/fsharp/exercises/saddle-points/SaddlePoints.fs +3 -0
  343. data/tracks/fsharp/exercises/saddle-points/SaddlePoints.fsproj +22 -0
  344. data/tracks/fsharp/exercises/saddle-points/{SaddlePointTest.fs → SaddlePointsTest.fs} +13 -16
  345. data/tracks/fsharp/exercises/say/Program.fs +1 -0
  346. data/tracks/fsharp/exercises/say/Say.fs +3 -0
  347. data/tracks/fsharp/exercises/say/Say.fsproj +22 -0
  348. data/tracks/fsharp/exercises/say/SayTest.fs +35 -49
  349. data/tracks/fsharp/exercises/scale-generator/Program.fs +1 -0
  350. data/tracks/fsharp/exercises/scale-generator/ScaleGenerator.fs +3 -0
  351. data/tracks/fsharp/exercises/scale-generator/ScaleGenerator.fsproj +22 -0
  352. data/tracks/fsharp/exercises/scale-generator/ScaleGeneratorTest.fs +31 -43
  353. data/tracks/fsharp/exercises/scrabble-score/Program.fs +1 -0
  354. data/tracks/fsharp/exercises/scrabble-score/ScrabbleScore.fs +3 -0
  355. data/tracks/fsharp/exercises/scrabble-score/ScrabbleScore.fsproj +22 -0
  356. data/tracks/fsharp/exercises/scrabble-score/ScrabbleScoreTest.fs +18 -24
  357. data/tracks/fsharp/exercises/secret-handshake/Program.fs +1 -0
  358. data/tracks/fsharp/exercises/secret-handshake/SecretHandshake.fs +3 -0
  359. data/tracks/fsharp/exercises/secret-handshake/SecretHandshake.fsproj +22 -0
  360. data/tracks/fsharp/exercises/secret-handshake/SecretHandshakeTest.fs +17 -22
  361. data/tracks/fsharp/exercises/series/Program.fs +1 -0
  362. data/tracks/fsharp/exercises/series/Series.fs +3 -0
  363. data/tracks/fsharp/exercises/series/Series.fsproj +22 -0
  364. data/tracks/fsharp/exercises/series/SeriesTest.fs +53 -55
  365. data/tracks/fsharp/exercises/sgf-parsing/Program.fs +1 -0
  366. data/tracks/fsharp/exercises/sgf-parsing/SgfParsing.fs +3 -0
  367. data/tracks/fsharp/exercises/sgf-parsing/SgfParsing.fsproj +22 -0
  368. data/tracks/fsharp/exercises/sgf-parsing/SgfParsingTest.fs +27 -37
  369. data/tracks/fsharp/exercises/sieve/Program.fs +1 -0
  370. data/tracks/fsharp/exercises/sieve/Sieve.fs +3 -0
  371. data/tracks/fsharp/exercises/sieve/Sieve.fsproj +22 -0
  372. data/tracks/fsharp/exercises/sieve/SieveTest.fs +19 -21
  373. data/tracks/fsharp/exercises/simple-cipher/Program.fs +1 -0
  374. data/tracks/fsharp/exercises/simple-cipher/SimpleCipher.fs +7 -0
  375. data/tracks/fsharp/exercises/simple-cipher/SimpleCipher.fsproj +22 -0
  376. data/tracks/fsharp/exercises/simple-cipher/SimpleCipherTest.fs +39 -54
  377. data/tracks/fsharp/exercises/simple-linked-list/Program.fs +1 -0
  378. data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedList.fs +36 -0
  379. data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedList.fsproj +22 -0
  380. data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedListTest.fs +36 -40
  381. data/tracks/fsharp/exercises/space-age/Program.fs +1 -0
  382. data/tracks/fsharp/exercises/space-age/SpaceAge.fs +5 -0
  383. data/tracks/fsharp/exercises/space-age/SpaceAge.fsproj +22 -0
  384. data/tracks/fsharp/exercises/space-age/SpaceAgeTest.fs +26 -32
  385. data/tracks/fsharp/exercises/strain/Program.fs +1 -0
  386. data/tracks/fsharp/exercises/strain/Strain.fs +5 -0
  387. data/tracks/fsharp/exercises/strain/Strain.fsproj +22 -0
  388. data/tracks/fsharp/exercises/strain/StrainTest.fs +28 -47
  389. data/tracks/fsharp/exercises/sublist/Program.fs +1 -0
  390. data/tracks/fsharp/exercises/sublist/Sublist.fs +5 -0
  391. data/tracks/fsharp/exercises/sublist/Sublist.fsproj +22 -0
  392. data/tracks/fsharp/exercises/sublist/SublistTest.fs +39 -55
  393. data/tracks/fsharp/exercises/sum-of-multiples/Program.fs +1 -0
  394. data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiples.fs +3 -0
  395. data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiples.fsproj +22 -0
  396. data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiplesTest.fs +15 -19
  397. data/tracks/fsharp/exercises/tournament/Program.fs +1 -0
  398. data/tracks/fsharp/exercises/tournament/Tournament.fs +3 -0
  399. data/tracks/fsharp/exercises/tournament/Tournament.fsproj +22 -0
  400. data/tracks/fsharp/exercises/tournament/TournamentTest.fs +9 -10
  401. data/tracks/fsharp/exercises/transpose/Program.fs +1 -0
  402. data/tracks/fsharp/exercises/transpose/Transpose.fs +3 -0
  403. data/tracks/fsharp/exercises/transpose/Transpose.fsproj +22 -0
  404. data/tracks/fsharp/exercises/transpose/TransposeTest.fs +25 -34
  405. data/tracks/fsharp/exercises/tree-building/Program.fs +1 -0
  406. data/tracks/fsharp/exercises/tree-building/TreeBuilding.fsproj +22 -0
  407. data/tracks/fsharp/exercises/tree-building/TreeBuildingTest.fs +84 -82
  408. data/tracks/fsharp/exercises/triangle/Program.fs +1 -0
  409. data/tracks/fsharp/exercises/triangle/Triangle.fs +8 -0
  410. data/tracks/fsharp/exercises/triangle/Triangle.fsproj +22 -0
  411. data/tracks/fsharp/exercises/triangle/TriangleTest.fs +31 -43
  412. data/tracks/fsharp/exercises/twelve-days/Program.fs +1 -0
  413. data/tracks/fsharp/exercises/twelve-days/TwelveDays.fs +7 -0
  414. data/tracks/fsharp/exercises/twelve-days/TwelveDays.fsproj +22 -0
  415. data/tracks/fsharp/exercises/twelve-days/TwelveDaysTest.fs +31 -43
  416. data/tracks/fsharp/exercises/two-bucket/Program.fs +1 -0
  417. data/tracks/fsharp/exercises/two-bucket/TwoBucket.fs +3 -0
  418. data/tracks/fsharp/exercises/two-bucket/TwoBucket.fsproj +22 -0
  419. data/tracks/fsharp/exercises/two-bucket/TwoBucketTest.fs +11 -13
  420. data/tracks/fsharp/exercises/two-fer/Program.fs +1 -0
  421. data/tracks/fsharp/exercises/two-fer/TwoFer.fs +3 -0
  422. data/tracks/fsharp/exercises/two-fer/TwoFer.fsproj +22 -0
  423. data/tracks/fsharp/exercises/two-fer/TwoFerTest.fs +9 -10
  424. data/tracks/fsharp/exercises/variable-length-quantity/Program.fs +1 -0
  425. data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantity.fs +3 -0
  426. data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantity.fsproj +22 -0
  427. data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantityTest.fs +42 -50
  428. data/tracks/fsharp/exercises/word-count/Program.fs +1 -0
  429. data/tracks/fsharp/exercises/word-count/WordCount.fs +3 -0
  430. data/tracks/fsharp/exercises/word-count/WordCount.fsproj +22 -0
  431. data/tracks/fsharp/exercises/word-count/WordCountTest.fs +27 -37
  432. data/tracks/fsharp/exercises/word-search/Program.fs +1 -0
  433. data/tracks/fsharp/exercises/word-search/WordSearch.fs +3 -0
  434. data/tracks/fsharp/exercises/word-search/WordSearch.fsproj +22 -0
  435. data/tracks/fsharp/exercises/word-search/WordSearchTest.fs +23 -31
  436. data/tracks/fsharp/exercises/wordy/Program.fs +1 -0
  437. data/tracks/fsharp/exercises/wordy/Wordy.fs +3 -0
  438. data/tracks/fsharp/exercises/wordy/Wordy.fsproj +22 -0
  439. data/tracks/fsharp/exercises/wordy/WordyTest.fs +34 -48
  440. data/tracks/fsharp/exercises/zebra-puzzle/Example.fs +1 -1
  441. data/tracks/fsharp/exercises/zebra-puzzle/Program.fs +1 -0
  442. data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzle.fs +3 -0
  443. data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzle.fsproj +22 -0
  444. data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzleTest.fs +9 -9
  445. data/tracks/fsharp/exercises/zipper/Program.fs +1 -0
  446. data/tracks/fsharp/exercises/zipper/Zipper.fs +3 -0
  447. data/tracks/fsharp/exercises/zipper/Zipper.fsproj +22 -0
  448. data/tracks/fsharp/exercises/zipper/ZipperTest.fs +19 -25
  449. data/tracks/javascript/exercises/simple-linked-list/example.js +4 -3
  450. data/tracks/javascript/exercises/simple-linked-list/simple-linked-list.spec.js +3 -0
  451. data/tracks/nim/docs/SNIPPET.txt +2 -0
  452. data/tracks/perl5/docs/SNIPPET.txt +9 -0
  453. data/tracks/php/docs/SNIPPET.txt +6 -0
  454. data/tracks/pony/docs/SNIPPET.txt +2 -0
  455. data/tracks/powershell/docs/SNIPPET.txt +4 -0
  456. data/tracks/prolog/docs/SNIPPET.txt +6 -0
  457. data/tracks/python/exercises/simple-cipher/README.md +1 -1
  458. data/tracks/vimscript/docs/SNIPPET.txt +4 -0
  459. metadata +334 -17
  460. data/tracks/fsharp/.paket/paket.bootstrapper.exe +0 -0
  461. data/tracks/fsharp/build.cmd +0 -14
  462. data/tracks/fsharp/build.fsx +0 -65
  463. data/tracks/fsharp/exercises/app.config +0 -11
  464. data/tracks/fsharp/exercises/exercises.fsproj +0 -225
  465. data/tracks/fsharp/exercises/kindergarten-garden/KinderGartenGardenTest.fs +0 -55
  466. data/tracks/fsharp/exercises/paket.references +0 -4
  467. data/tracks/fsharp/exercises/palindrome-products/PalindromeTest.fs +0 -60
  468. data/tracks/fsharp/exercises/rna-transcription/RNATranscriptionTest.fs +0 -29
  469. data/tracks/fsharp/exercises/roman-numerals/RomanNumeralTest.fs +0 -26
  470. data/tracks/fsharp/paket.dependencies +0 -8
  471. data/tracks/fsharp/paket.lock +0 -11
@@ -0,0 +1,29 @@
1
+ module CustomSet
2
+
3
+ // TODO: define the Set type
4
+
5
+ let empty = failwith "You need to implement this function."
6
+
7
+ let singleton value = { items = [value] }
8
+
9
+ let isEmpty set = set.items.IsEmpty
10
+
11
+ let size set = set.items.Length
12
+
13
+ let fromList list = { items = list |> List.sort |> List.distinct }
14
+
15
+ let toList set = set.items
16
+
17
+ let contains value set = List.contains value set.items
18
+
19
+ let insert value set = value::set.items |> fromList
20
+
21
+ let union left right = left.items @ right.items |> fromList
22
+
23
+ let intersection left right = left.items |> List.filter (fun x -> List.contains x right.items) |> fromList
24
+
25
+ let difference left right = left.items |> List.filter (fun x -> List.contains x right.items |> not) |> fromList
26
+
27
+ let isSubsetOf left right = left.items |> List.forall (fun x -> List.contains x right.items)
28
+
29
+ let isDisjointFrom left right = left.items |> List.exists (fun x -> List.contains x right.items) |> not
@@ -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="CustomSet.fs" />
11
+ <Compile Include="CustomSetTest.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,271 +1,229 @@
1
- module CustomSetTest
1
+ module CustomSetTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
 
5
6
  open CustomSet
6
7
 
7
- [<Test>]
8
+ [<Fact>]
8
9
  let ``Sets with no elements are empty`` () =
9
10
  let actual = empty
10
- Assert.That(isEmpty actual, Is.True)
11
+ isEmpty actual |> should equal true
11
12
 
12
- [<Test>]
13
- [<Ignore("Remove to run test")>]
13
+ [<Fact(Skip = "Remove to run test")>]
14
14
  let ``Sets with elements are not empty`` () =
15
15
  let actual = singleton 1
16
- Assert.That(isEmpty actual, Is.False)
16
+ isEmpty actual |> should equal false
17
17
 
18
- [<Test>]
19
- [<Ignore("Remove to run test")>]
18
+ [<Fact(Skip = "Remove to run test")>]
20
19
  let ``Nothing is contained in an empty set`` () =
21
20
  let actual = empty
22
- Assert.That(contains 1 actual, Is.False)
21
+ contains 1 actual |> should equal false
23
22
 
24
- [<Test>]
25
- [<Ignore("Remove to run test")>]
23
+ [<Fact(Skip = "Remove to run test")>]
26
24
  let ``Detect if the element is in the set`` () =
27
25
  let actual = fromList [1; 2; 3]
28
- Assert.That(contains 1 actual, Is.True)
26
+ contains 1 actual |> should equal true
29
27
 
30
- [<Test>]
31
- [<Ignore("Remove to run test")>]
28
+ [<Fact(Skip = "Remove to run test")>]
32
29
  let ``Detect if the element is not in the set`` () =
33
30
  let actual = fromList [1; 2; 3]
34
- Assert.That(contains 4 actual, Is.False)
31
+ contains 4 actual |> should equal false
35
32
 
36
- [<Test>]
37
- [<Ignore("Remove to run test")>]
33
+ [<Fact(Skip = "Remove to run test")>]
38
34
  let ``Empty set is a subset of another empty set`` () =
39
35
  let left = empty
40
36
  let right = empty
41
- Assert.That(isSubsetOf left right, Is.True)
37
+ isSubsetOf left right |> should equal true
42
38
 
43
- [<Test>]
44
- [<Ignore("Remove to run test")>]
39
+ [<Fact(Skip = "Remove to run test")>]
45
40
  let ``Empty set is a subset of non-empty set`` () =
46
41
  let left = empty
47
42
  let right = singleton 1
48
- Assert.That(isSubsetOf left right, Is.True)
43
+ isSubsetOf left right |> should equal true
49
44
 
50
- [<Test>]
51
- [<Ignore("Remove to run test")>]
45
+ [<Fact(Skip = "Remove to run test")>]
52
46
  let ``Non-empty set is not a subset of empty set`` () =
53
47
  let left = singleton 1
54
48
  let right = empty
55
- Assert.That(isSubsetOf left right, Is.False)
49
+ isSubsetOf left right |> should equal false
56
50
 
57
- [<Test>]
58
- [<Ignore("Remove to run test")>]
51
+ [<Fact(Skip = "Remove to run test")>]
59
52
  let ``Set is a subset of set with exact same elements`` () =
60
53
  let left = fromList [1; 2; 3]
61
54
  let right = fromList [1; 2; 3]
62
- Assert.That(isSubsetOf left right, Is.True)
55
+ isSubsetOf left right |> should equal true
63
56
 
64
- [<Test>]
65
- [<Ignore("Remove to run test")>]
57
+ [<Fact(Skip = "Remove to run test")>]
66
58
  let ``Set is a subset of larger set with same elements`` () =
67
59
  let left = fromList [1; 2; 3]
68
60
  let right = fromList [4; 1; 2; 3]
69
- Assert.That(isSubsetOf left right, Is.True)
61
+ isSubsetOf left right |> should equal true
70
62
 
71
- [<Test>]
72
- [<Ignore("Remove to run test")>]
63
+ [<Fact(Skip = "Remove to run test")>]
73
64
  let ``Set is not a subset of set that does not contain its elements`` () =
74
65
  let left = fromList [1; 2; 3]
75
66
  let right = fromList [4; 1; 3]
76
- Assert.That(isSubsetOf left right, Is.False)
67
+ isSubsetOf left right |> should equal false
77
68
 
78
- [<Test>]
79
- [<Ignore("Remove to run test")>]
69
+ [<Fact(Skip = "Remove to run test")>]
80
70
  let ``The empty set is disjoint with itself`` () =
81
71
  let left = empty
82
72
  let right = empty
83
- Assert.That(isDisjointFrom left right, Is.True)
73
+ isDisjointFrom left right |> should equal true
84
74
 
85
- [<Test>]
86
- [<Ignore("Remove to run test")>]
75
+ [<Fact(Skip = "Remove to run test")>]
87
76
  let ``Empty set is disjoint with non-empty set`` () =
88
77
  let left = empty
89
78
  let right = singleton 1
90
- Assert.That(isDisjointFrom left right, Is.True)
79
+ isDisjointFrom left right |> should equal true
91
80
 
92
- [<Test>]
93
- [<Ignore("Remove to run test")>]
81
+ [<Fact(Skip = "Remove to run test")>]
94
82
  let ``Non-empty set is disjoint with empty set`` () =
95
83
  let left = singleton 1
96
84
  let right = empty
97
- Assert.That(isDisjointFrom left right, Is.True)
85
+ isDisjointFrom left right |> should equal true
98
86
 
99
- [<Test>]
100
- [<Ignore("Remove to run test")>]
87
+ [<Fact(Skip = "Remove to run test")>]
101
88
  let ``Sets are not disjoint if they share an element`` () =
102
89
  let left = fromList [1; 2]
103
90
  let right = fromList [2; 3]
104
- Assert.That(isDisjointFrom left right, Is.False)
91
+ isDisjointFrom left right |> should equal false
105
92
 
106
- [<Test>]
107
- [<Ignore("Remove to run test")>]
93
+ [<Fact(Skip = "Remove to run test")>]
108
94
  let ``Sets are disjoint if they share no elements`` () =
109
95
  let left = fromList [1; 2]
110
96
  let right = fromList [3; 4]
111
- Assert.That(isDisjointFrom left right, Is.True)
97
+ isDisjointFrom left right |> should equal true
112
98
 
113
- [<Test>]
114
- [<Ignore("Remove to run test")>]
99
+ [<Fact(Skip = "Remove to run test")>]
115
100
  let ``Empty sets are equal`` () =
116
101
  let left = empty
117
102
  let right = empty
118
- Assert.That((left = right))
103
+ (left |> should equal right)
119
104
 
120
- [<Test>]
121
- [<Ignore("Remove to run test")>]
105
+ [<Fact(Skip = "Remove to run test")>]
122
106
  let ``Empty set is not equal to non-empty set`` () =
123
107
  let left = empty
124
108
  let right = fromList [1; 2; 3]
125
- Assert.That(left <> right)
109
+ left |> should not' (equal right)
126
110
 
127
- [<Test>]
128
- [<Ignore("Remove to run test")>]
111
+ [<Fact(Skip = "Remove to run test")>]
129
112
  let ``Non-empty set is not equal to empty set`` () =
130
113
  let left = fromList [1; 2; 3]
131
114
  let right = empty
132
- Assert.That(left <> right)
115
+ left |> should not' (equal right)
133
116
 
134
- [<Test>]
135
- [<Ignore("Remove to run test")>]
117
+ [<Fact(Skip = "Remove to run test")>]
136
118
  let ``Sets with the same elements are equal`` () =
137
119
  let left = fromList [1; 2]
138
120
  let right = fromList [2; 1]
139
- Assert.That((left = right))
121
+ (left |> should equal right)
140
122
 
141
- [<Test>]
142
- [<Ignore("Remove to run test")>]
123
+ [<Fact(Skip = "Remove to run test")>]
143
124
  let ``Sets with different elements are not equal`` () =
144
125
  let left = fromList [1; 2; 3]
145
126
  let right = fromList [1; 2; 4]
146
- Assert.That(left <> right)
127
+ left |> should not' (equal right)
147
128
 
148
- [<Test>]
149
- [<Ignore("Remove to run test")>]
129
+ [<Fact(Skip = "Remove to run test")>]
150
130
  let ``Add to empty set`` () =
151
131
  let actual = empty |> insert 3
152
132
  let expected = fromList [3]
153
- Assert.That(actual, Is.EqualTo(expected))
133
+ actual |> should equal expected
154
134
 
155
- [<Test>]
156
- [<Ignore("Remove to run test")>]
135
+ [<Fact(Skip = "Remove to run test")>]
157
136
  let ``Add to non-empty set`` () =
158
137
  let actual = fromList [1; 2; 4] |> insert 3
159
138
  let expected = fromList [1; 2; 3; 4]
160
- Assert.That(actual, Is.EqualTo(expected))
139
+ actual |> should equal expected
161
140
 
162
- [<Test>]
163
- [<Ignore("Remove to run test")>]
141
+ [<Fact(Skip = "Remove to run test")>]
164
142
  let ``Adding an existing element does not change the set`` () =
165
143
  let actual = fromList [1; 2; 3] |> insert 3
166
144
  let expected = fromList [1; 2; 3]
167
- Assert.That(actual, Is.EqualTo(expected))
145
+ actual |> should equal expected
168
146
 
169
- [<Test>]
170
- [<Ignore("Remove to run test")>]
147
+ [<Fact(Skip = "Remove to run test")>]
171
148
  let ``Intersection of two empty sets is an empty set`` () =
172
149
  let left = empty
173
150
  let right = empty
174
- let expected = empty
175
- Assert.That(intersection left right = expected)
151
+ intersection left right |> isEmpty |> should equal true
176
152
 
177
- [<Test>]
178
- [<Ignore("Remove to run test")>]
153
+ [<Fact(Skip = "Remove to run test")>]
179
154
  let ``Intersection of an empty set and non-empty set is an empty set`` () =
180
155
  let left = empty
181
156
  let right = fromList [3; 2; 5]
182
- let expected = empty
183
- Assert.That(intersection left right = expected)
157
+ intersection left right |> isEmpty |> should equal true
184
158
 
185
- [<Test>]
186
- [<Ignore("Remove to run test")>]
159
+ [<Fact(Skip = "Remove to run test")>]
187
160
  let ``Intersection of a non-empty set and an empty set is an empty set`` () =
188
161
  let left = fromList [1; 2; 3; 4]
189
162
  let right = empty
190
- let expected = empty
191
- Assert.That(intersection left right = expected)
163
+ intersection left right |> isEmpty |> should equal true
192
164
 
193
- [<Test>]
194
- [<Ignore("Remove to run test")>]
165
+ [<Fact(Skip = "Remove to run test")>]
195
166
  let ``Intersection of two sets with no shared elements is an empty set`` () =
196
167
  let left = fromList [1; 2; 3]
197
168
  let right = fromList [4; 5; 6]
198
- let expected = empty
199
- Assert.That(intersection left right = expected)
169
+ intersection left right |> isEmpty |> should equal true
200
170
 
201
- [<Test>]
202
- [<Ignore("Remove to run test")>]
171
+ [<Fact(Skip = "Remove to run test")>]
203
172
  let ``Intersection of two sets with shared elements is a set of the shared elements`` () =
204
173
  let left = fromList [1; 2; 3; 4]
205
174
  let right = fromList [3; 2; 5]
206
175
  let expected = fromList [2; 3]
207
- Assert.That(intersection left right = expected)
176
+ intersection left right |> should equal expected
208
177
 
209
- [<Test>]
210
- [<Ignore("Remove to run test")>]
178
+ [<Fact(Skip = "Remove to run test")>]
211
179
  let ``Difference of two empty sets is an empty set`` () =
212
180
  let left = empty
213
181
  let right = empty
214
- let expected = empty
215
- Assert.That(difference left right = expected)
182
+ difference left right |> isEmpty |> should equal true
216
183
 
217
- [<Test>]
218
- [<Ignore("Remove to run test")>]
184
+ [<Fact(Skip = "Remove to run test")>]
219
185
  let ``Difference of an empty set and non-empty set is an empty set`` () =
220
186
  let left = empty
221
187
  let right = fromList [3; 2; 5]
222
- let expected = empty
223
- Assert.That(difference left right = expected)
188
+ difference left right |> isEmpty |> should equal true
224
189
 
225
- [<Test>]
226
- [<Ignore("Remove to run test")>]
190
+ [<Fact(Skip = "Remove to run test")>]
227
191
  let ``Difference of a non-empty set and an empty set is an empty set`` () =
228
192
  let left = fromList [1; 2; 3; 4]
229
193
  let right = empty
230
194
  let expected = fromList [1; 2; 3; 4]
231
- Assert.That(difference left right = expected)
195
+ difference left right |> should equal expected
232
196
 
233
- [<Test>]
234
- [<Ignore("Remove to run test")>]
197
+ [<Fact(Skip = "Remove to run test")>]
235
198
  let ``Difference of two non-empty sets is a set of elements that are only in the first set`` () =
236
199
  let left = fromList [3; 2; 1]
237
200
  let right = fromList [2; 4]
238
201
  let expected = fromList [1; 3]
239
- Assert.That(difference left right = expected)
202
+ difference left right |> should equal expected
240
203
 
241
- [<Test>]
242
- [<Ignore("Remove to run test")>]
204
+ [<Fact(Skip = "Remove to run test")>]
243
205
  let ``Union of two empty sets is an empty set`` () =
244
206
  let left = empty
245
207
  let right = empty
246
- let expected = empty
247
- Assert.That(union left right = expected)
208
+ union left right |> isEmpty |> should equal true
248
209
 
249
- [<Test>]
250
- [<Ignore("Remove to run test")>]
210
+ [<Fact(Skip = "Remove to run test")>]
251
211
  let ``Union of an empty set and non-empty set is the non-empty set`` () =
252
212
  let left = empty
253
213
  let right = fromList [2]
254
214
  let expected = fromList [2]
255
- Assert.That(union left right = expected)
215
+ union left right |> should equal expected
256
216
 
257
- [<Test>]
258
- [<Ignore("Remove to run test")>]
217
+ [<Fact(Skip = "Remove to run test")>]
259
218
  let ``Union of a non-empty set and empty set is the non-empty set`` () =
260
219
  let left = fromList [1; 3]
261
220
  let right = empty
262
221
  let expected = fromList [1; 3]
263
- Assert.That(union left right = expected)
222
+ union left right |> should equal expected
264
223
 
265
- [<Test>]
266
- [<Ignore("Remove to run test")>]
224
+ [<Fact(Skip = "Remove to run test")>]
267
225
  let ``Union of non-empty sets contains all unique elements`` () =
268
226
  let left = fromList [1; 3]
269
227
  let right = fromList [2; 3]
270
228
  let expected = fromList [3; 2; 1]
271
- Assert.That(union left right = expected)
229
+ union left right |> should equal expected
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,3 @@
1
+ module Diamond
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="Diamond.fs" />
11
+ <Compile Include="DiamondTest.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 DiamondTest
1
+ module DiamondTest
2
2
 
3
3
  open Diamond
4
4
  open System
5
- open NUnit.Framework
5
+ open Xunit
6
+ open FsUnit.Xunit
6
7
 
7
8
  type DiamondTest() =
8
9
  let split (x: string) = x.Split([| '\n' |], StringSplitOptions.None)
@@ -12,26 +13,27 @@ type DiamondTest() =
12
13
  let leadingSpaces (x:string) = x.Substring(0, x.IndexOfAny [|'A'..'Z'|])
13
14
 
14
15
  let trailingSpaces (x:string) = x.Substring(x.LastIndexOfAny [|'A'..'Z'|] + 1)
15
-
16
- [<TestCaseSource("Letters")>]
16
+
17
+ [<Theory>]
18
+ [<MemberData("Letters")>]
17
19
  member this.``First row contains 'A'`` (letter:char) =
18
20
  let actual = make letter
19
21
  let rows = actual |> split
20
22
  let firstRowCharacters = rows |> Seq.head |> trim
21
23
 
22
- Assert.That(firstRowCharacters, Is.EqualTo("A"))
24
+ firstRowCharacters |> should equal "A"
23
25
 
24
- [<TestCaseSource("Letters")>]
25
- [<Ignore("Remove to run test")>]
26
+ [<Theory(Skip = "Remove to run test")>]
27
+ [<MemberData("Letters")>]
26
28
  member this.``All rows must have symmetric contour`` (letter:char) =
27
29
  let actual = make letter
28
30
  let rows = actual |> split
29
31
  let symmetric (row:string) = leadingSpaces row = trailingSpaces row
30
-
31
- Assert.That(rows, Is.All.Matches(symmetric))
32
32
 
33
- [<TestCaseSource("Letters")>]
34
- [<Ignore("Remove to run test")>]
33
+ rows |> Array.iter (fun x -> symmetric x |> should equal true)
34
+
35
+ [<Theory(Skip = "Remove to run test")>]
36
+ [<MemberData("Letters")>]
35
37
  member this.``Top of figure has letters in correct order`` (letter:char) =
36
38
  let actual = make letter
37
39
 
@@ -40,14 +42,13 @@ type DiamondTest() =
40
42
  let firstNonSpaceLetters =
41
43
  rows
42
44
  |> Seq.take expected.Length
43
- |> Seq.map trim
44
- |> Seq.map Seq.head
45
+ |> Seq.map (trim >> Seq.head)
45
46
  |> Seq.toList
46
47
 
47
- Assert.That(expected, Is.EqualTo(firstNonSpaceLetters))
48
+ expected |> should equal firstNonSpaceLetters
48
49
 
49
- [<TestCaseSource("Letters")>]
50
- [<Ignore("Remove to run test")>]
50
+ [<Theory(Skip = "Remove to run test")>]
51
+ [<MemberData("Letters")>]
51
52
  member this.``Figure is symmetric around the horizontal axis`` (letter:char) =
52
53
  let actual = make letter
53
54
 
@@ -63,10 +64,10 @@ type DiamondTest() =
63
64
  |> Seq.takeWhile (fun x -> not (x.Contains(string letter)))
64
65
  |> List.ofSeq
65
66
 
66
- Assert.That(top, Is.EqualTo(bottom))
67
+ top |> should equal bottom
67
68
 
68
- [<TestCaseSource("Letters")>]
69
- [<Ignore("Remove to run test")>]
69
+ [<Theory(Skip = "Remove to run test")>]
70
+ [<MemberData("Letters")>]
70
71
  member this.``Diamond has square shape`` (letter:char) =
71
72
  let actual = make letter
72
73
 
@@ -74,10 +75,10 @@ type DiamondTest() =
74
75
  let expected = rows.Length
75
76
  let correctWidth (x:string) = x.Length = expected
76
77
 
77
- Assert.That(rows, Is.All.Matches(correctWidth))
78
+ rows |> Array.iter (fun x -> correctWidth x |> should equal true)
78
79
 
79
- [<TestCaseSource("Letters")>]
80
- [<Ignore("Remove to run test")>]
80
+ [<Theory(Skip = "Remove to run test")>]
81
+ [<MemberData("Letters")>]
81
82
  member this.``All rows except top and bottom have two identical letters`` (letter:char) =
82
83
  let actual = make letter
83
84
 
@@ -91,10 +92,10 @@ type DiamondTest() =
91
92
  let identicalCharacters = row.Replace(" ", "") |> Seq.distinct |> Seq.length = 1
92
93
  twoCharacters && identicalCharacters
93
94
 
94
- Assert.That(rows, Is.All.Matches(twoIdenticalLetters))
95
+ rows |> Array.iter (fun x -> twoIdenticalLetters x |> should equal true)
95
96
 
96
- [<TestCaseSource("Letters")>]
97
- [<Ignore("Remove to run test")>]
97
+ [<Theory(Skip = "Remove to run test")>]
98
+ [<MemberData("Letters")>]
98
99
  member this.``Bottom left corner spaces are triangle`` (letter:char) =
99
100
  let actual = make letter
100
101
 
@@ -116,6 +117,9 @@ type DiamondTest() =
116
117
  |> Seq.take spaceCounts.Length
117
118
  |> Seq.toList
118
119
 
119
- Assert.That(spaceCounts, Is.EqualTo(expected))
120
+ spaceCounts |> should equal expected
120
121
 
121
- static member Letters = [| 'A' .. 'Z' |]
122
+ static member Letters =
123
+ let theoryData = new TheoryData<char>()
124
+ [ 'A' .. 'Z' ] |> List.iter (fun c -> theoryData.Add(c))
125
+ theoryData
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0
@@ -0,0 +1,7 @@
1
+ module DifferenceOfSquares
2
+
3
+ let squareOfSums (number: int): int = failwith "You need to implement this function."
4
+
5
+ let sumOfSquares (number: int): int = failwith "You need to implement this function."
6
+
7
+ let difference (number: int): int = 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="DifferenceOfSquares.fs" />
11
+ <Compile Include="DifferenceOfSquaresTest.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,48 +1,41 @@
1
- module DifferenceOfSquaresTest
1
+ module DifferenceOfSquaresTest
2
2
 
3
- open NUnit.Framework
3
+ open Xunit
4
+ open FsUnit.Xunit
4
5
  open DifferenceOfSquares
5
6
 
6
- [<Test>]
7
+ [<Fact>]
7
8
  let ``Square of sums to 5`` () =
8
- Assert.That(squareOfSums 5, Is.EqualTo(225))
9
+ squareOfSums 5 |> should equal 225
9
10
 
10
- [<Test>]
11
- [<Ignore("Remove to run test")>]
11
+ [<Fact(Skip = "Remove to run test")>]
12
12
  let ``Sum of squares to 5`` () =
13
- Assert.That(sumOfSquares 5, Is.EqualTo(55))
13
+ sumOfSquares 5 |> should equal 55
14
14
 
15
- [<Test>]
16
- [<Ignore("Remove to run test")>]
15
+ [<Fact(Skip = "Remove to run test")>]
17
16
  let ``Difference of sums to 5`` () =
18
- Assert.That(difference 5, Is.EqualTo(170))
17
+ difference 5 |> should equal 170
19
18
 
20
- [<Test>]
21
- [<Ignore("Remove to run test")>]
19
+ [<Fact(Skip = "Remove to run test")>]
22
20
  let ``Square of sums to 10`` () =
23
- Assert.That(squareOfSums 10, Is.EqualTo(3025))
21
+ squareOfSums 10 |> should equal 3025
24
22
 
25
- [<Test>]
26
- [<Ignore("Remove to run test")>]
23
+ [<Fact(Skip = "Remove to run test")>]
27
24
  let ``Sum of squares to 10`` () =
28
- Assert.That(sumOfSquares 10, Is.EqualTo(385))
25
+ sumOfSquares 10 |> should equal 385
29
26
 
30
- [<Test>]
31
- [<Ignore("Remove to run test")>]
27
+ [<Fact(Skip = "Remove to run test")>]
32
28
  let ``Difference of sums to 10`` () =
33
- Assert.That(difference 10, Is.EqualTo(2640))
29
+ difference 10 |> should equal 2640
34
30
 
35
- [<Test>]
36
- [<Ignore("Remove to run test")>]
31
+ [<Fact(Skip = "Remove to run test")>]
37
32
  let ``Square of sums to 100`` () =
38
- Assert.That(squareOfSums 100, Is.EqualTo(25502500))
33
+ squareOfSums 100 |> should equal 25502500
39
34
 
40
- [<Test>]
41
- [<Ignore("Remove to run test")>]
35
+ [<Fact(Skip = "Remove to run test")>]
42
36
  let ``Sum of squares to 100`` () =
43
- Assert.That(sumOfSquares 100, Is.EqualTo(338350))
37
+ sumOfSquares 100 |> should equal 338350
44
38
 
45
- [<Test>]
46
- [<Ignore("Remove to run test")>]
39
+ [<Fact(Skip = "Remove to run test")>]
47
40
  let ``Difference of sums to 100`` () =
48
- Assert.That(difference 100, Is.EqualTo(25164150))
41
+ difference 100 |> should equal 25164150
@@ -0,0 +1 @@
1
+ module Program = let [<EntryPoint>] main _ = 0