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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9b05f3706590fe36c89fca881fdd0a6ac292e51f
4
- data.tar.gz: '069a255fac8e5b0cc6a6261000c9184361c842e1'
3
+ metadata.gz: e7eeeb06b8a86deac0f26302dd74e241e7d596ed
4
+ data.tar.gz: 5d9a37663a0b4e73d9f2a4641a49779f53e7942e
5
5
  SHA512:
6
- metadata.gz: 306f2cea768b5f915deb41fffb581cfd6225eb49f9ff59d470d441f65b458f28610b2fbbe607a25be144ab6281e096dfaf82f637a56420f9277db65b54467b48
7
- data.tar.gz: 3b96e86f6db51f46d403349a37526d96310ee6bf31763d6dfe35787a5550987398e8d8f35437e9d141e96fc9a96747e417ca57fb2cc9bf1ad2b1988db1334f54
6
+ metadata.gz: 46d57019c6934b15386420eba7ad0292f6785276b68537b4b3ceee85f3e0e972d2c98a64c044aba34bf72668972071179d5081018cf59968f2b0646ef4ae4d81
7
+ data.tar.gz: cea6e2ba9138a5117ddd1f834119d8d1df3b0c232f7d4ce303ef7eeaf35390fc31fc339cdcb7355e76259342bba0d35089ec944e9baca9b4ed997c2878dfa143
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.2.1.22"
2
+ VERSION = "2.2.1.23"
3
3
  end
@@ -183,12 +183,14 @@
183
183
  [ "$output" = "Sure." ]
184
184
  }
185
185
 
186
- @test "other whitespace" {
187
- run bash bob.sh "\n\r \t\u000b\u00a0\u2002"
188
-
189
- [ "$status" -eq 0 ]
190
- [ "$output" = "Fine. Be that way!" ]
191
- }
186
+ # This is commented out because it behaves differently on linux and mac
187
+ # see: https://github.com/exercism/bash/pull/28
188
+ #@test "other whitespace" {
189
+ # run bash bob.sh "\n\r \t\u000b\u00a0\u2002"
190
+ #
191
+ # [ "$status" -eq 0 ]
192
+ # [ "$output" = "Fine. Be that way!" ]
193
+ #}
192
194
 
193
195
 
194
196
  @test "non-question ending with whitespace" {
@@ -1,28 +1,52 @@
1
1
  #!/bin/bash
2
2
 
3
+ # Exit on error. Append || true if you expect an error.
4
+ set -o errexit
5
+ # Exit on error inside any functions or subshells.
6
+ set -o errtrace
7
+ # Do not allow use of undefined vars. Use ${VAR:-} to use an undefined VAR
8
+ set -o nounset
9
+ # Catch error even if it's not in after the last pipe.
10
+ set -o pipefail
11
+ # Turn on traces, useful while debugging but commented out by default
12
+ # set -o xtrace
13
+
14
+ #__dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
15
+ #__file="${__dir}/$(basename "${BASH_SOURCE[0]}")"
16
+ #__base="$(basename ${__file} .sh)"
17
+
18
+ # print argument and exit
19
+ function say() {
20
+ local mesg=${1}
21
+ echo "${mesg}"
22
+ exit 0
23
+ }
24
+
25
+ if [[ $# -eq 0 ]]; then
26
+ say "Fine. Be that way!"
27
+ fi
28
+
3
29
  # Get what Bob says.
4
30
  # %b interprets escapted characters (like '\n' for newline)
5
31
  input="$(printf %b "${1}")"
6
32
 
7
33
  # Remove space characters
8
34
  input="${input//[[:space:]]/}"
35
+ #input="${input//$(printf '\u00a0')}" # [[:space:]] doesn't match \u00a0 on Linux
9
36
 
10
37
  # Is there silence?
11
38
  if [[ "${input}" == "" ]]; then
12
- echo "Fine. Be that way!"
13
- exit 0
39
+ say "Fine. Be that way!"
14
40
  fi
15
41
 
16
42
  # Is there shouting (capital letter and no lowercase letters)
17
43
  if [[ "$input" == *[[:upper:]]* ]] && [[ "$input" != *[[:lower:]]* ]]; then
18
- echo "Whoa, chill out!"
19
- exit 0
44
+ say "Whoa, chill out!"
20
45
  fi
21
46
 
22
47
  # Is it a question? (last character is a '?')
23
48
  if [[ "${input: -1}" == "?" ]]; then
24
- echo "Sure."
25
- exit 0
49
+ say "Sure."
26
50
  fi
27
51
 
28
52
  # Is it a regular statement ?
@@ -0,0 +1,4 @@
1
+ class HelloWorld
2
+ hello: (name = 'World') ->
3
+ "Hello, #{name}!"
4
+ module.exports = HelloWorld
@@ -26,8 +26,6 @@ namespace Generators.Exercises
26
26
  {
27
27
  ["score"] = canonicalDataCase.Properties["score"]
28
28
  };
29
- canonicalDataCase.Input.Remove("score");
30
- canonicalDataCase.TestedMethodType = TestedMethodType.Instance;
31
29
  }
32
30
  }
33
31
 
@@ -13,13 +13,11 @@ namespace Generators.Exercises
13
13
  {
14
14
  ["subject"] = canonicalDataCase.Input["subject"]
15
15
  };
16
- canonicalDataCase.Input.Remove("subject");
17
16
  canonicalDataCase.Input["candidates"] = canonicalDataCase.Input["candidates"].ConvertToEnumerable<string>();
18
17
  canonicalDataCase.Expected = canonicalDataCase.Expected.ConvertToEnumerable<string>();
19
18
 
20
19
  canonicalDataCase.UseVariablesForInput = true;
21
20
  canonicalDataCase.UseVariableForExpected = true;
22
- canonicalDataCase.TestedMethodType = TestedMethodType.Instance;
23
21
  }
24
22
  }
25
23
  }
@@ -13,10 +13,8 @@ namespace Generators.Exercises
13
13
  {
14
14
  ["array"] = canonicalDataCase.Input["array"].ConvertToEnumerable<int>()
15
15
  };
16
- canonicalDataCase.Input.Remove("array");
17
16
 
18
17
  canonicalDataCase.UseVariablesForConstructorParameters = true;
19
- canonicalDataCase.TestedMethodType = TestedMethodType.Instance;
20
18
  }
21
19
  }
22
20
  }
@@ -18,8 +18,6 @@ namespace Generators.Exercises
18
18
 
19
19
  foreach (var canonicalDataCase in canonicalData.Cases)
20
20
  {
21
- canonicalDataCase.TestedMethodType = TestedMethodType.Instance;
22
-
23
21
  // Process expected
24
22
  if (IsComplexNumber(canonicalDataCase.Expected))
25
23
  {
@@ -13,8 +13,7 @@ namespace Generators.Exercises
13
13
  {
14
14
  ["rails"] = canonicalDataCase.Properties["rails"]
15
15
  };
16
- canonicalDataCase.Input.Remove("rails");
17
- canonicalDataCase.TestedMethodType = TestedMethodType.Instance;
16
+
18
17
  canonicalDataCase.UseVariablesForInput = true;
19
18
  canonicalDataCase.UseVariableForExpected = true;
20
19
  }
@@ -9,13 +9,10 @@ namespace Generators.Exercises
9
9
  {
10
10
  foreach (var canonicalDataCase in canonicalData.Cases)
11
11
  {
12
- canonicalDataCase.TestedMethodType = TestedMethodType.Instance;
13
-
14
12
  canonicalDataCase.ConstructorInput = new Dictionary<string, object>
15
13
  {
16
14
  ["seconds"] = canonicalDataCase.Properties["seconds"]
17
15
  };
18
- canonicalDataCase.Input.Remove("seconds");
19
16
 
20
17
  canonicalDataCase.Property = $"On_{canonicalDataCase.Input["planet"]}";
21
18
  canonicalDataCase.Input.Remove("planet");
@@ -2,12 +2,15 @@
2
2
  using System.Collections.Generic;
3
3
  using System.ComponentModel.DataAnnotations;
4
4
  using Newtonsoft.Json;
5
+ using System.Linq;
5
6
 
6
7
  namespace Generators.Input
7
8
  {
8
9
  [JsonConverter(typeof(CanonicalDataCaseJsonConverter))]
9
10
  public class CanonicalDataCase
10
11
  {
12
+ private IDictionary<string, object> _constructorInput;
13
+
11
14
  [Required]
12
15
  public string Description { get; set; }
13
16
 
@@ -18,7 +21,20 @@ namespace Generators.Input
18
21
  public IDictionary<string, object> Input { get; set; }
19
22
 
20
23
  [JsonIgnore]
21
- public IDictionary<string, object> ConstructorInput { get; set; }
24
+ public IDictionary<string, object> ConstructorInput
25
+ {
26
+ get
27
+ {
28
+ return _constructorInput;
29
+ }
30
+ set
31
+ {
32
+ RemoveDuplicateInputEntries(value);
33
+ UpdateInstanceType(value);
34
+
35
+ _constructorInput = value;
36
+ }
37
+ }
22
38
 
23
39
  public object Expected { get; set; }
24
40
 
@@ -38,9 +54,28 @@ namespace Generators.Input
38
54
  public bool UseVariableForTested { get; set; }
39
55
 
40
56
  [JsonIgnore]
41
- public TestedMethodType TestedMethodType { get; set; } = TestedMethodType.Static;
57
+ public TestedMethodType TestedMethodType { get; set; }
42
58
 
43
59
  [JsonIgnore]
44
60
  public Type ExceptionThrown { get; set; }
61
+
62
+ private void RemoveDuplicateInputEntries(IDictionary<string, object> constructorInputDictionary)
63
+ {
64
+ foreach (var key in constructorInputDictionary.Keys)
65
+ {
66
+ if (Input.ContainsKey(key))
67
+ {
68
+ Input.Remove(key);
69
+ }
70
+ }
71
+ }
72
+
73
+ private void UpdateInstanceType(IDictionary<string, object> constructorInputDictionary)
74
+ {
75
+ if (constructorInputDictionary.Keys.Any())
76
+ {
77
+ TestedMethodType = TestedMethodType.Instance;
78
+ }
79
+ }
45
80
  }
46
81
  }
@@ -0,0 +1,5 @@
1
+ class HelloWorld {
2
+ void main() {
3
+ print("Hello World"):
4
+ }
5
+ }
@@ -69,7 +69,11 @@ describe('Substitution cipher', () => {
69
69
  .toEqual('qayaeaagaciai');
70
70
  });
71
71
 
72
- xtest('can wrap', () => {
72
+ xtest('can wrap on encode', () => {
73
73
  expect(cipher.encode('zzzzzzzzzz')).toEqual('zabcdefghi');
74
74
  });
75
+
76
+ xtest('can wrap on decode', () => {
77
+ expect(cipher.decode('zabcdefghi')).toEqual('zzzzzzzzzz');
78
+ });
75
79
  });
@@ -0,0 +1,10 @@
1
+ module HelloWorld exposing (..)
2
+
3
+ helloWorld : Maybe String -> String
4
+ helloWorld name =
5
+ case name of
6
+ Just name ->
7
+ "Hello, " ++ name ++ "!"
8
+
9
+ Nothing ->
10
+ "Hello, World!"
@@ -0,0 +1,9 @@
1
+ module hello_world
2
+ contains
3
+ function hello()
4
+ character(12) :: hello
5
+ hello = 'Hello World'
6
+
7
+ end function hello
8
+
9
+ end module hello_world
@@ -7,5 +7,5 @@ tools/
7
7
  .fake/
8
8
  .paket/paket.exe
9
9
  paket-files
10
- TestResult.xml
11
- junit-results.xml
10
+ .idea/
11
+ .vs/
@@ -1,10 +1,23 @@
1
1
  language: csharp
2
-
3
- os:
4
- - linux
5
- - osx
6
-
2
+ dist: trusty
3
+ dotnet: 2.0.0
4
+ mono: none
5
+ env:
6
+ global:
7
+ - DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
8
+ - DOTNET_CLI_TELEMETRY_OPTOUT: 1
9
+ addons:
10
+ apt:
11
+ sources:
12
+ - sourceline: 'deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-trusty-prod trusty main'
13
+ key_url: 'https://packages.microsoft.com/keys/microsoft.asc'
14
+ packages:
15
+ - dotnet-hostfxr-1.0.1
16
+ - dotnet-sharedframework-microsoft.netcore.app-1.0.5
7
17
  script:
8
18
  - ./bin/fetch-configlet
9
19
  - ./bin/configlet lint .
10
20
  - ./build.sh
21
+ cache:
22
+ directories:
23
+ - $HOME/.nuget/packages
@@ -0,0 +1,92 @@
1
+ using System.IO;
2
+ using System.Text.RegularExpressions;
3
+ using System.Threading.Tasks;
4
+
5
+ var target = Argument("target", "Default");
6
+
7
+ var sourceDir = "./exercises";
8
+ var buildDir = "./build";
9
+
10
+ var solutionPath = buildDir + "/Exercises.sln";
11
+
12
+ var parallelOptions = new ParallelOptions { MaxDegreeOfParallelism = System.Environment.ProcessorCount };
13
+
14
+ Task("Clean")
15
+ .Does(() => {
16
+ CleanDirectory(buildDir);
17
+ });
18
+
19
+ // Copy everything to build so we make no changes in the actual files.
20
+ Task("CopyExercises")
21
+ .IsDependentOn("Clean")
22
+ .Does(() => {
23
+ CopyDirectory(sourceDir, buildDir);
24
+ });
25
+
26
+ Task("EnableAllTests")
27
+ .IsDependentOn("CopyExercises")
28
+ .Does(() => {
29
+ var skipRegex = new Regex(@"Skip = ""Remove to run test""", RegexOptions.Compiled);
30
+ var testFiles = GetFiles(buildDir + "/*/*Test.fs");
31
+
32
+ foreach (var testFile in testFiles) {
33
+ var contents = System.IO.File.ReadAllText(testFile.FullPath);
34
+
35
+ if (skipRegex.IsMatch(contents)) {
36
+ var updatedContents = skipRegex.Replace(contents, "");
37
+ System.IO.File.WriteAllText(testFile.FullPath, updatedContents);
38
+ }
39
+ }
40
+ });
41
+
42
+ Task("TestRefactoringProjects")
43
+ .IsDependentOn("EnableAllTests")
44
+ .Does(() => {
45
+ var refactoringProjects =
46
+ GetFiles(buildDir + "/*/TreeBuilding.fsproj")
47
+ + GetFiles(buildDir + "/*/Ledger.fsproj")
48
+ + GetFiles(buildDir + "/*/Markdown.fsproj");
49
+
50
+ Parallel.ForEach(refactoringProjects, parallelOptions, (project) => DotNetCoreTest(project.FullPath));
51
+ });
52
+
53
+ Task("ReplaceStubWithExample")
54
+ .IsDependentOn("TestRefactoringProjects")
55
+ .Does(() => {
56
+ var solution = ParseSolution(solutionPath);
57
+
58
+ foreach (var project in solution.Projects) {
59
+ var projectDir = project.Path.GetDirectory();
60
+ var projectName = project.Path.GetFilenameWithoutExtension();
61
+ var stub = projectDir.GetFilePath(projectName).AppendExtension("fs");
62
+ var example = projectDir.GetFilePath("Example.fs");
63
+
64
+ DeleteFile(stub);
65
+ MoveFile(example, stub);
66
+ }
67
+ });
68
+
69
+ Task("AddPackagesUsedInExampleImplementations")
70
+ .IsDependentOn("ReplaceStubWithExample")
71
+ .Does(() => {
72
+ var fparsecProjects =
73
+ GetFiles(buildDir + "/*/Alphametics.fsproj")
74
+ + GetFiles(buildDir + "/*/SgfParsing.fsproj");
75
+
76
+ foreach (var fparsecProject in fparsecProjects) {
77
+ DotNetCoreTool(fparsecProject, "add", "package FParsec");
78
+ }
79
+ });
80
+
81
+ Task("TestUsingExampleImplementation")
82
+ .IsDependentOn("AddPackagesUsedInExampleImplementations")
83
+ .Does(() => {
84
+ var solution = ParseSolution(solutionPath);
85
+ Parallel.ForEach(solution.Projects, parallelOptions, (project) => DotNetCoreTest(project.Path.FullPath));
86
+ });
87
+
88
+ Task("Default")
89
+ .IsDependentOn("TestUsingExampleImplementation")
90
+ .Does(() => { });
91
+
92
+ RunTarget(target);
@@ -0,0 +1,81 @@
1
+ $CakeVersion = "0.21.1"
2
+ $DotNetVersion = "2.0.0";
3
+ $DotNetInstallerUri = "https://raw.githubusercontent.com/dotnet/cli/master/scripts/obtain/dotnet-install.ps1";
4
+
5
+ # Make sure tools folder exists
6
+ $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
7
+ $ToolPath = Join-Path $PSScriptRoot "tools"
8
+ if (!(Test-Path $ToolPath)) {
9
+ Write-Verbose "Creating tools directory..."
10
+ New-Item -Path $ToolPath -Type directory | out-null
11
+ }
12
+
13
+ ###########################################################################
14
+ # INSTALL .NET CORE CLI
15
+ ###########################################################################
16
+
17
+ Function Remove-PathVariable([string]$VariableToRemove)
18
+ {
19
+ $path = [Environment]::GetEnvironmentVariable("PATH", "User")
20
+ if ($path -ne $null)
21
+ {
22
+ $newItems = $path.Split(';', [StringSplitOptions]::RemoveEmptyEntries) | Where-Object { "$($_)" -inotlike $VariableToRemove }
23
+ [Environment]::SetEnvironmentVariable("PATH", [System.String]::Join(';', $newItems), "User")
24
+ }
25
+
26
+ $path = [Environment]::GetEnvironmentVariable("PATH", "Process")
27
+ if ($path -ne $null)
28
+ {
29
+ $newItems = $path.Split(';', [StringSplitOptions]::RemoveEmptyEntries) | Where-Object { "$($_)" -inotlike $VariableToRemove }
30
+ [Environment]::SetEnvironmentVariable("PATH", [System.String]::Join(';', $newItems), "Process")
31
+ }
32
+ }
33
+
34
+ # Get .NET Core CLI path if installed.
35
+ $FoundDotNetCliVersion = $null;
36
+ if (Get-Command dotnet -ErrorAction SilentlyContinue) {
37
+ $FoundDotNetCliVersion = dotnet --version;
38
+ }
39
+
40
+ if($FoundDotNetCliVersion -ne $DotNetVersion) {
41
+ $InstallPath = Join-Path $PSScriptRoot ".dotnet"
42
+ if (!(Test-Path $InstallPath)) {
43
+ mkdir -Force $InstallPath | Out-Null;
44
+ }
45
+ (New-Object System.Net.WebClient).DownloadFile($DotNetInstallerUri, "$InstallPath\dotnet-install.ps1");
46
+ & $InstallPath\dotnet-install.ps1 -Version $DotNetVersion -InstallDir $InstallPath;
47
+
48
+ Remove-PathVariable "$InstallPath"
49
+ $env:PATH = "$InstallPath;$env:PATH"
50
+ $env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
51
+ $env:DOTNET_CLI_TELEMETRY_OPTOUT=1
52
+ }
53
+
54
+ ###########################################################################
55
+ # INSTALL CAKE
56
+ ###########################################################################
57
+
58
+ Add-Type -AssemblyName System.IO.Compression.FileSystem
59
+ Function Unzip
60
+ {
61
+ param([string]$zipfile, [string]$outpath)
62
+
63
+ [System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
64
+ }
65
+
66
+
67
+ # Make sure Cake has been installed.
68
+ $CakePath = Join-Path $ToolPath "Cake.CoreCLR.$CakeVersion/Cake.dll"
69
+ if (!(Test-Path $CakePath)) {
70
+ Write-Host "Installing Cake..."
71
+ (New-Object System.Net.WebClient).DownloadFile("https://www.nuget.org/api/v2/package/Cake.CoreCLR/$CakeVersion", "$ToolPath\Cake.CoreCLR.zip")
72
+ Unzip "$ToolPath\Cake.CoreCLR.zip" "$ToolPath/Cake.CoreCLR.$CakeVersion"
73
+ Remove-Item "$ToolPath\Cake.CoreCLR.zip"
74
+ }
75
+
76
+ ###########################################################################
77
+ # RUN BUILD SCRIPT
78
+ ###########################################################################
79
+
80
+ & dotnet "$CakePath" $args
81
+ exit $LASTEXITCODE
@@ -1,33 +1,56 @@
1
- #!/bin/bash
2
- if test "$OS" = "Windows_NT"
3
- then
4
- # use .Net
5
-
6
- .paket/paket.bootstrapper.exe
7
- exit_code=$?
8
- if [ $exit_code -ne 0 ]; then
9
- exit $exit_code
10
- fi
11
-
12
- .paket/paket.exe restore
13
- exit_code=$?
14
- if [ $exit_code -ne 0 ]; then
15
- exit $exit_code
16
- fi
17
-
18
- packages/FAKE/tools/FAKE.exe $@ --fsiargs build.fsx
19
- else
20
- # use mono
21
- mono .paket/paket.bootstrapper.exe
22
- exit_code=$?
23
- if [ $exit_code -ne 0 ]; then
24
- exit $exit_code
25
- fi
26
-
27
- mono .paket/paket.exe restore
28
- exit_code=$?
29
- if [ $exit_code -ne 0 ]; then
30
- exit $exit_code
31
- fi
32
- mono packages/FAKE/tools/FAKE.exe $@ --fsiargs -d:MONO build.fsx
33
- fi
1
+ #!/usr/bin/env bash
2
+
3
+ # Define directories.
4
+ SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
5
+ TOOLS_DIR=$SCRIPT_DIR/tools
6
+ CAKE_VERSION=0.21.1
7
+ CAKE_DLL=$TOOLS_DIR/Cake.CoreCLR.$CAKE_VERSION/Cake.dll
8
+ DOTNET_VERSION=2.0.0
9
+
10
+ # Make sure the tools folder exist.
11
+ if [ ! -d "$TOOLS_DIR" ]; then
12
+ mkdir "$TOOLS_DIR"
13
+ fi
14
+
15
+ ###########################################################################
16
+ # INSTALL .NET CORE CLI
17
+ ###########################################################################
18
+
19
+ if [[ ! $(command -v dotnet) ]] || [ ! $(dotnet --version) == "$DOTNET_VERSION" ] ; then
20
+ echo "Installing .NET CLI..."
21
+
22
+ if [ ! -d "$SCRIPT_DIR/.dotnet" ]; then
23
+ mkdir "$SCRIPT_DIR/.dotnet"
24
+ fi
25
+ curl -Lsfo "$SCRIPT_DIR/.dotnet/dotnet-install.sh" https://raw.githubusercontent.com/dotnet/cli/master/scripts/obtain/dotnet-install.sh
26
+ sudo bash "$SCRIPT_DIR/.dotnet/dotnet-install.sh" --version DOTNET_VERSION --install-dir .dotnet --no-path
27
+ export PATH="$SCRIPT_DIR/.dotnet":$PATH
28
+ export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
29
+ export DOTNET_CLI_TELEMETRY_OPTOUT=1
30
+ "$SCRIPT_DIR/.dotnet/dotnet" --info
31
+ fi
32
+
33
+ # ###########################################################################
34
+ # # INSTALL CAKE
35
+ # ###########################################################################
36
+
37
+ if [ ! -f "$CAKE_DLL" ]; then
38
+ curl -Lsfo Cake.CoreCLR.zip "https://www.nuget.org/api/v2/package/Cake.CoreCLR/$CAKE_VERSION" && unzip -q Cake.CoreCLR.zip -d "$TOOLS_DIR/Cake.CoreCLR.$CAKE_VERSION" && rm -f Cake.CoreCLR.zip
39
+ if [ $? -ne 0 ]; then
40
+ echo "An error occured while installing Cake."
41
+ exit 1
42
+ fi
43
+ fi
44
+
45
+ # Make sure that Cake has been installed.
46
+ if [ ! -f "$CAKE_DLL" ]; then
47
+ echo "Could not find Cake.exe at '$CAKE_DLL'."
48
+ exit 1
49
+ fi
50
+
51
+ ###########################################################################
52
+ # RUN BUILD SCRIPT
53
+ ###########################################################################
54
+
55
+ # Start Cake
56
+ exec dotnet "$CAKE_DLL" "$@"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "language": "F#",
3
3
  "active": true,
4
- "blurb": "F# is a strongly-typed, functional language that is part of Microsoft's .NET language stack. Although F# is great for data science problems, it can elegantly handle almost every problem you throw at it.",
4
+ "blurb": "F# is a strongly-typed, functional language that is part of Microsoft's .NET language stack. Although F# is great for data science problems, it can elegantly handle almost every problem you throw at it.",
5
5
  "exercises": [
6
6
  {
7
7
  "uuid": "302312cc-bd15-4ba0-8f2f-cbf411c40186",
@@ -102,25 +102,24 @@
102
102
  ]
103
103
  },
104
104
  {
105
- "uuid": "30c3a38e-1e44-4711-887e-fca301c26c1b",
106
- "slug": "clock",
105
+ "uuid": "0ea0d92f-5510-4ba9-b419-3f5ad029b74f",
106
+ "slug": "beer-song",
107
107
  "core": true,
108
- "unlocked_by": null,
108
+ "unlocked_by": "raindrops",
109
109
  "difficulty": 3,
110
110
  "topics": [
111
- "Time",
112
- "Structural equality"
111
+ "Text formatting",
112
+ "Algorithms"
113
113
  ]
114
114
  },
115
115
  {
116
- "uuid": "0ea0d92f-5510-4ba9-b419-3f5ad029b74f",
117
- "slug": "beer-song",
116
+ "uuid": "528a0023-8687-4524-8318-516d1e432d0d",
117
+ "slug": "queen-attack",
118
118
  "core": true,
119
- "unlocked_by": "raindrops",
119
+ "unlocked_by": null,
120
120
  "difficulty": 3,
121
121
  "topics": [
122
- "Text formatting",
123
- "Algorithms"
122
+ "Tuples"
124
123
  ]
125
124
  },
126
125
  {
@@ -135,13 +134,14 @@
135
134
  ]
136
135
  },
137
136
  {
138
- "uuid": "528a0023-8687-4524-8318-516d1e432d0d",
139
- "slug": "queen-attack",
137
+ "uuid": "30c3a38e-1e44-4711-887e-fca301c26c1b",
138
+ "slug": "clock",
140
139
  "core": true,
141
140
  "unlocked_by": null,
142
141
  "difficulty": 3,
143
142
  "topics": [
144
- "Tuples"
143
+ "Time",
144
+ "Structural equality"
145
145
  ]
146
146
  },
147
147
  {