trackler 2.1.0.48 → 2.1.0.49

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 (1053) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +88 -82
  3. data/CONTRIBUTING.md +5 -5
  4. data/fixtures/{common → problem-specifications}/exercises/apple/canonical-data.json +0 -0
  5. data/fixtures/{common → problem-specifications}/exercises/apple/description.md +0 -0
  6. data/fixtures/{common → problem-specifications}/exercises/apple/metadata.yml +0 -0
  7. data/fixtures/{common → problem-specifications}/exercises/banana/description.md +0 -0
  8. data/fixtures/{common → problem-specifications}/exercises/banana/metadata.yml +0 -0
  9. data/fixtures/{common → problem-specifications}/exercises/cherry/description.md +0 -0
  10. data/fixtures/{common → problem-specifications}/exercises/cherry/metadata.yml +0 -0
  11. data/fixtures/{common → problem-specifications}/exercises/dog/description.md +0 -0
  12. data/fixtures/{common → problem-specifications}/exercises/dog/metadata.yml +0 -0
  13. data/fixtures/{common → problem-specifications}/exercises/fish/.deprecated +0 -0
  14. data/fixtures/{common → problem-specifications}/exercises/fish/canonical-data.json +0 -0
  15. data/fixtures/{common → problem-specifications}/exercises/fish/description.md +0 -0
  16. data/fixtures/{common → problem-specifications}/exercises/fish/metadata.yml +0 -0
  17. data/fixtures/{common → problem-specifications}/exercises/hello-world/description.md +0 -0
  18. data/fixtures/{common → problem-specifications}/exercises/hello-world/metadata.yml +0 -0
  19. data/fixtures/{common → problem-specifications}/exercises/imbe/description.md +0 -0
  20. data/fixtures/{common → problem-specifications}/exercises/imbe/metadata.yml +0 -0
  21. data/fixtures/{common → problem-specifications}/exercises/mango/canonical-data.json +0 -0
  22. data/fixtures/{common → problem-specifications}/exercises/mango/description.md +0 -0
  23. data/fixtures/{common → problem-specifications}/exercises/mango/metadata.yml +0 -0
  24. data/fixtures/{common → problem-specifications}/exercises/no-metadata/description.md +0 -0
  25. data/fixtures/{common → problem-specifications}/exercises/one/description.md +0 -0
  26. data/fixtures/{common → problem-specifications}/exercises/one/metadata.yml +0 -0
  27. data/fixtures/{common → problem-specifications}/exercises/three/description.md +0 -0
  28. data/fixtures/{common → problem-specifications}/exercises/three/metadata.yml +0 -0
  29. data/fixtures/{common → problem-specifications}/exercises/two/description.md +0 -0
  30. data/fixtures/{common → problem-specifications}/exercises/two/metadata.yml +0 -0
  31. data/fixtures/tracks/animal/exercises/fish/included-via-symlink.txt +1 -0
  32. data/lib/trackler/guaranteed_file.rb +3 -3
  33. data/lib/trackler/specification.rb +4 -4
  34. data/lib/trackler/specifications.rb +1 -1
  35. data/lib/trackler/version.rb +1 -1
  36. data/{common → problem-specifications}/.gitignore +0 -0
  37. data/{common → problem-specifications}/.travis.yml +0 -0
  38. data/{common → problem-specifications}/CONTRIBUTING.md +11 -51
  39. data/{common → problem-specifications}/LICENSE +0 -0
  40. data/{common → problem-specifications}/README.md +2 -9
  41. data/{common → problem-specifications}/TOPICS.txt +0 -0
  42. data/{common → problem-specifications}/bin/check_required_files_present +0 -0
  43. data/{common → problem-specifications}/bin/transfer_blurb_to_description.rb +2 -2
  44. data/{common → problem-specifications}/canonical-schema.json +0 -0
  45. data/{common → problem-specifications}/exercises/accumulate/description.md +0 -0
  46. data/{common → problem-specifications}/exercises/accumulate/metadata.yml +0 -0
  47. data/{common → problem-specifications}/exercises/acronym/canonical-data.json +0 -0
  48. data/{common → problem-specifications}/exercises/acronym/description.md +0 -0
  49. data/{common → problem-specifications}/exercises/acronym/metadata.yml +0 -0
  50. data/{common → problem-specifications}/exercises/all-your-base/canonical-data.json +0 -0
  51. data/{common → problem-specifications}/exercises/all-your-base/description.md +0 -0
  52. data/{common → problem-specifications}/exercises/all-your-base/metadata.yml +0 -0
  53. data/{common → problem-specifications}/exercises/allergies/canonical-data.json +0 -0
  54. data/{common → problem-specifications}/exercises/allergies/description.md +0 -0
  55. data/{common → problem-specifications}/exercises/allergies/metadata.yml +0 -0
  56. data/{common → problem-specifications}/exercises/alphametics/canonical-data.json +0 -0
  57. data/{common → problem-specifications}/exercises/alphametics/description.md +0 -0
  58. data/{common → problem-specifications}/exercises/alphametics/metadata.yml +0 -0
  59. data/{common → problem-specifications}/exercises/anagram/canonical-data.json +0 -0
  60. data/{common → problem-specifications}/exercises/anagram/description.md +0 -0
  61. data/{common → problem-specifications}/exercises/anagram/metadata.yml +0 -0
  62. data/{common → problem-specifications}/exercises/atbash-cipher/canonical-data.json +0 -0
  63. data/{common → problem-specifications}/exercises/atbash-cipher/description.md +0 -0
  64. data/{common → problem-specifications}/exercises/atbash-cipher/metadata.yml +0 -0
  65. data/{common → problem-specifications}/exercises/bank-account/description.md +0 -0
  66. data/{common → problem-specifications}/exercises/bank-account/metadata.yml +0 -0
  67. data/{common → problem-specifications}/exercises/beer-song/canonical-data.json +0 -0
  68. data/{common → problem-specifications}/exercises/beer-song/description.md +0 -0
  69. data/{common → problem-specifications}/exercises/beer-song/metadata.yml +0 -0
  70. data/{common → problem-specifications}/exercises/binary-search-tree/description.md +0 -0
  71. data/{common → problem-specifications}/exercises/binary-search-tree/metadata.yml +0 -0
  72. data/{common → problem-specifications}/exercises/binary-search/canonical-data.json +2 -2
  73. data/{common → problem-specifications}/exercises/binary-search/description.md +0 -0
  74. data/{common → problem-specifications}/exercises/binary-search/metadata.yml +0 -0
  75. data/{common → problem-specifications}/exercises/binary/.deprecated +1 -1
  76. data/{common → problem-specifications}/exercises/binary/canonical-data.json +0 -0
  77. data/{common → problem-specifications}/exercises/binary/description.md +0 -0
  78. data/{common → problem-specifications}/exercises/binary/metadata.yml +0 -0
  79. data/{common → problem-specifications}/exercises/bob/canonical-data.json +0 -0
  80. data/{common → problem-specifications}/exercises/bob/description.md +0 -0
  81. data/{common → problem-specifications}/exercises/bob/metadata.yml +0 -0
  82. data/{common → problem-specifications}/exercises/book-store/canonical-data.json +0 -0
  83. data/{common → problem-specifications}/exercises/book-store/description.md +0 -0
  84. data/{common → problem-specifications}/exercises/book-store/metadata.yml +0 -0
  85. data/{common → problem-specifications}/exercises/bowling/canonical-data.json +0 -0
  86. data/{common → problem-specifications}/exercises/bowling/description.md +0 -0
  87. data/{common → problem-specifications}/exercises/bowling/metadata.yml +0 -0
  88. data/{common → problem-specifications}/exercises/bracket-push/canonical-data.json +0 -0
  89. data/{common → problem-specifications}/exercises/bracket-push/description.md +0 -0
  90. data/{common → problem-specifications}/exercises/bracket-push/metadata.yml +0 -0
  91. data/{common → problem-specifications}/exercises/change/canonical-data.json +0 -0
  92. data/{common → problem-specifications}/exercises/change/description.md +0 -0
  93. data/{common → problem-specifications}/exercises/change/metadata.yml +0 -0
  94. data/{common → problem-specifications}/exercises/circular-buffer/canonical-data.json +0 -0
  95. data/{common → problem-specifications}/exercises/circular-buffer/description.md +0 -0
  96. data/{common → problem-specifications}/exercises/circular-buffer/metadata.yml +0 -0
  97. data/{common → problem-specifications}/exercises/clock/canonical-data.json +0 -0
  98. data/{common → problem-specifications}/exercises/clock/description.md +0 -0
  99. data/{common → problem-specifications}/exercises/clock/metadata.yml +0 -0
  100. data/{common → problem-specifications}/exercises/collatz-conjecture/canonical-data.json +2 -2
  101. data/{common → problem-specifications}/exercises/collatz-conjecture/description.md +0 -0
  102. data/{common → problem-specifications}/exercises/collatz-conjecture/metadata.yml +0 -0
  103. data/problem-specifications/exercises/complex-numbers/canonical-data.json +270 -0
  104. data/problem-specifications/exercises/complex-numbers/description.md +3 -0
  105. data/problem-specifications/exercises/complex-numbers/metadata.yml +4 -0
  106. data/{common → problem-specifications}/exercises/connect/canonical-data.json +0 -0
  107. data/{common → problem-specifications}/exercises/connect/description.md +0 -0
  108. data/{common → problem-specifications}/exercises/connect/metadata.yml +0 -0
  109. data/{common → problem-specifications}/exercises/counter/.deprecated +1 -1
  110. data/{common → problem-specifications}/exercises/counter/description.md +1 -1
  111. data/{common → problem-specifications}/exercises/counter/metadata.yml +0 -0
  112. data/{common → problem-specifications}/exercises/crypto-square/canonical-data.json +0 -0
  113. data/{common → problem-specifications}/exercises/crypto-square/description.md +0 -0
  114. data/{common → problem-specifications}/exercises/crypto-square/metadata.yml +0 -0
  115. data/{common → problem-specifications}/exercises/custom-set/canonical-data.json +0 -0
  116. data/{common → problem-specifications}/exercises/custom-set/description.md +0 -0
  117. data/{common → problem-specifications}/exercises/custom-set/metadata.yml +0 -0
  118. data/{common → problem-specifications}/exercises/diamond/canonical-data.json +0 -0
  119. data/{common → problem-specifications}/exercises/diamond/description.md +0 -0
  120. data/{common → problem-specifications}/exercises/diamond/metadata.yml +0 -0
  121. data/{common → problem-specifications}/exercises/difference-of-squares/canonical-data.json +0 -0
  122. data/{common → problem-specifications}/exercises/difference-of-squares/description.md +0 -0
  123. data/{common → problem-specifications}/exercises/difference-of-squares/metadata.yml +0 -0
  124. data/{common → problem-specifications}/exercises/diffie-hellman/description.md +0 -0
  125. data/{common → problem-specifications}/exercises/diffie-hellman/metadata.yml +0 -0
  126. data/{common → problem-specifications}/exercises/dominoes/canonical-data.json +0 -0
  127. data/{common → problem-specifications}/exercises/dominoes/description.md +0 -0
  128. data/{common → problem-specifications}/exercises/dominoes/metadata.yml +0 -0
  129. data/{common → problem-specifications}/exercises/dot-dsl/description.md +0 -0
  130. data/{common → problem-specifications}/exercises/dot-dsl/metadata.yml +0 -0
  131. data/{common → problem-specifications}/exercises/error-handling/description.md +0 -0
  132. data/{common → problem-specifications}/exercises/error-handling/metadata.yml +0 -0
  133. data/{common → problem-specifications}/exercises/etl/canonical-data.json +0 -0
  134. data/{common → problem-specifications}/exercises/etl/description.md +0 -0
  135. data/{common → problem-specifications}/exercises/etl/metadata.yml +0 -0
  136. data/{common → problem-specifications}/exercises/flatten-array/canonical-data.json +0 -0
  137. data/{common → problem-specifications}/exercises/flatten-array/description.md +0 -0
  138. data/{common → problem-specifications}/exercises/flatten-array/metadata.yml +0 -0
  139. data/{common → problem-specifications}/exercises/food-chain/canonical-data.json +0 -0
  140. data/{common → problem-specifications}/exercises/food-chain/description.md +0 -0
  141. data/{common → problem-specifications}/exercises/food-chain/metadata.yml +0 -0
  142. data/{common → problem-specifications}/exercises/forth/canonical-data.json +10 -1
  143. data/{common → problem-specifications}/exercises/forth/description.md +0 -0
  144. data/{common → problem-specifications}/exercises/forth/metadata.yml +0 -0
  145. data/{common → problem-specifications}/exercises/gigasecond/canonical-data.json +0 -0
  146. data/{common → problem-specifications}/exercises/gigasecond/description.md +0 -0
  147. data/{common → problem-specifications}/exercises/gigasecond/metadata.yml +0 -0
  148. data/{common → problem-specifications}/exercises/go-counting/description.md +0 -0
  149. data/{common → problem-specifications}/exercises/go-counting/metadata.yml +0 -0
  150. data/{common → problem-specifications}/exercises/grade-school/description.md +0 -0
  151. data/{common → problem-specifications}/exercises/grade-school/metadata.yml +0 -0
  152. data/{common → problem-specifications}/exercises/grains/canonical-data.json +0 -0
  153. data/{common → problem-specifications}/exercises/grains/description.md +0 -0
  154. data/{common → problem-specifications}/exercises/grains/metadata.yml +0 -0
  155. data/{common → problem-specifications}/exercises/grep/canonical-data.json +0 -0
  156. data/{common → problem-specifications}/exercises/grep/description.md +0 -0
  157. data/{common → problem-specifications}/exercises/grep/metadata.yml +0 -0
  158. data/{common → problem-specifications}/exercises/hamming/canonical-data.json +8 -8
  159. data/{common → problem-specifications}/exercises/hamming/description.md +0 -0
  160. data/{common → problem-specifications}/exercises/hamming/metadata.yml +0 -0
  161. data/{common → problem-specifications}/exercises/hangman/description.md +0 -0
  162. data/{common → problem-specifications}/exercises/hangman/metadata.yml +0 -0
  163. data/{common → problem-specifications}/exercises/hello-world/canonical-data.json +0 -0
  164. data/{common → problem-specifications}/exercises/hello-world/description.md +0 -0
  165. data/{common → problem-specifications}/exercises/hello-world/metadata.yml +0 -0
  166. data/{common/exercises/octal → problem-specifications/exercises/hexadecimal}/.deprecated +1 -1
  167. data/{common → problem-specifications}/exercises/hexadecimal/description.md +0 -0
  168. data/{common → problem-specifications}/exercises/hexadecimal/metadata.yml +0 -0
  169. data/{common → problem-specifications}/exercises/house/description.md +0 -0
  170. data/{common → problem-specifications}/exercises/house/metadata.yml +0 -0
  171. data/{common → problem-specifications}/exercises/isogram/canonical-data.json +0 -0
  172. data/{common → problem-specifications}/exercises/isogram/description.md +0 -0
  173. data/{common → problem-specifications}/exercises/isogram/metadata.yml +0 -0
  174. data/{common → problem-specifications}/exercises/kindergarten-garden/canonical-data.json +0 -0
  175. data/{common → problem-specifications}/exercises/kindergarten-garden/description.md +0 -0
  176. data/{common → problem-specifications}/exercises/kindergarten-garden/metadata.yml +0 -0
  177. data/{common → problem-specifications}/exercises/largest-series-product/canonical-data.json +0 -0
  178. data/{common → problem-specifications}/exercises/largest-series-product/description.md +0 -0
  179. data/{common → problem-specifications}/exercises/largest-series-product/metadata.yml +0 -0
  180. data/{common → problem-specifications}/exercises/leap/canonical-data.json +0 -0
  181. data/{common → problem-specifications}/exercises/leap/description.md +0 -0
  182. data/{common → problem-specifications}/exercises/leap/metadata.yml +0 -0
  183. data/{common → problem-specifications}/exercises/ledger/description.md +0 -0
  184. data/{common → problem-specifications}/exercises/ledger/metadata.yml +0 -0
  185. data/{common → problem-specifications}/exercises/lens-person/description.md +0 -0
  186. data/{common → problem-specifications}/exercises/lens-person/metadata.yml +0 -0
  187. data/{common → problem-specifications}/exercises/linked-list/description.md +0 -0
  188. data/{common → problem-specifications}/exercises/linked-list/metadata.yml +0 -0
  189. data/{common → problem-specifications}/exercises/list-ops/canonical-data.json +0 -0
  190. data/{common → problem-specifications}/exercises/list-ops/description.md +0 -0
  191. data/{common → problem-specifications}/exercises/list-ops/metadata.yml +0 -0
  192. data/{common → problem-specifications}/exercises/luhn/canonical-data.json +0 -0
  193. data/{common → problem-specifications}/exercises/luhn/description.md +0 -0
  194. data/{common → problem-specifications}/exercises/luhn/metadata.yml +0 -0
  195. data/{common → problem-specifications}/exercises/markdown/canonical-data.json +0 -0
  196. data/{common → problem-specifications}/exercises/markdown/description.md +0 -0
  197. data/{common → problem-specifications}/exercises/markdown/metadata.yml +0 -0
  198. data/{common → problem-specifications}/exercises/matrix/description.md +0 -0
  199. data/{common → problem-specifications}/exercises/matrix/metadata.yml +0 -0
  200. data/{common → problem-specifications}/exercises/meetup/canonical-data.json +0 -0
  201. data/{common → problem-specifications}/exercises/meetup/description.md +0 -0
  202. data/{common → problem-specifications}/exercises/meetup/metadata.yml +0 -0
  203. data/{common → problem-specifications}/exercises/minesweeper/canonical-data.json +0 -0
  204. data/{common → problem-specifications}/exercises/minesweeper/description.md +0 -0
  205. data/{common → problem-specifications}/exercises/minesweeper/metadata.yml +0 -0
  206. data/{common → problem-specifications}/exercises/nth-prime/canonical-data.json +0 -0
  207. data/{common → problem-specifications}/exercises/nth-prime/description.md +0 -0
  208. data/{common → problem-specifications}/exercises/nth-prime/metadata.yml +0 -0
  209. data/{common → problem-specifications}/exercises/nucleotide-codons/.deprecated +1 -1
  210. data/{common → problem-specifications}/exercises/nucleotide-codons/description.md +0 -0
  211. data/{common → problem-specifications}/exercises/nucleotide-codons/metadata.yml +0 -0
  212. data/{common → problem-specifications}/exercises/nucleotide-count/canonical-data.json +0 -0
  213. data/{common → problem-specifications}/exercises/nucleotide-count/description.md +0 -0
  214. data/{common → problem-specifications}/exercises/nucleotide-count/metadata.yml +0 -0
  215. data/{common → problem-specifications}/exercises/ocr-numbers/canonical-data.json +0 -0
  216. data/{common → problem-specifications}/exercises/ocr-numbers/description.md +0 -0
  217. data/{common → problem-specifications}/exercises/ocr-numbers/metadata.yml +0 -0
  218. data/{common/exercises/hexadecimal → problem-specifications/exercises/octal}/.deprecated +1 -1
  219. data/{common → problem-specifications}/exercises/octal/description.md +0 -0
  220. data/{common → problem-specifications}/exercises/octal/metadata.yml +0 -0
  221. data/{common → problem-specifications}/exercises/paasio/description.md +0 -0
  222. data/{common → problem-specifications}/exercises/paasio/metadata.yml +0 -0
  223. data/{common → problem-specifications}/exercises/palindrome-products/description.md +0 -0
  224. data/{common → problem-specifications}/exercises/palindrome-products/metadata.yml +0 -0
  225. data/{common → problem-specifications}/exercises/pangram/canonical-data.json +2 -2
  226. data/{common → problem-specifications}/exercises/pangram/description.md +2 -2
  227. data/{common → problem-specifications}/exercises/pangram/metadata.yml +0 -0
  228. data/{common → problem-specifications}/exercises/parallel-letter-frequency/description.md +0 -0
  229. data/{common → problem-specifications}/exercises/parallel-letter-frequency/metadata.yml +0 -0
  230. data/{common → problem-specifications}/exercises/pascals-triangle/canonical-data.json +0 -0
  231. data/{common → problem-specifications}/exercises/pascals-triangle/description.md +0 -0
  232. data/{common → problem-specifications}/exercises/pascals-triangle/metadata.yml +0 -0
  233. data/{common → problem-specifications}/exercises/perfect-numbers/canonical-data.json +0 -0
  234. data/{common → problem-specifications}/exercises/perfect-numbers/description.md +0 -0
  235. data/{common → problem-specifications}/exercises/perfect-numbers/metadata.yml +0 -0
  236. data/{common → problem-specifications}/exercises/phone-number/canonical-data.json +0 -0
  237. data/{common → problem-specifications}/exercises/phone-number/description.md +12 -10
  238. data/{common → problem-specifications}/exercises/phone-number/metadata.yml +0 -0
  239. data/{common → problem-specifications}/exercises/pig-latin/canonical-data.json +0 -0
  240. data/{common → problem-specifications}/exercises/pig-latin/description.md +0 -0
  241. data/{common → problem-specifications}/exercises/pig-latin/metadata.yml +0 -0
  242. data/{common → problem-specifications}/exercises/point-mutations/.deprecated +1 -1
  243. data/{common → problem-specifications}/exercises/point-mutations/description.md +0 -0
  244. data/{common → problem-specifications}/exercises/point-mutations/metadata.yml +0 -0
  245. data/{common → problem-specifications}/exercises/poker/canonical-data.json +0 -0
  246. data/{common → problem-specifications}/exercises/poker/description.md +0 -0
  247. data/{common → problem-specifications}/exercises/poker/metadata.yml +0 -0
  248. data/{common → problem-specifications}/exercises/pov/canonical-data.json +0 -0
  249. data/{common → problem-specifications}/exercises/pov/description.md +0 -0
  250. data/{common → problem-specifications}/exercises/pov/metadata.yml +0 -0
  251. data/{common → problem-specifications}/exercises/prime-factors/canonical-data.json +0 -0
  252. data/{common → problem-specifications}/exercises/prime-factors/description.md +0 -0
  253. data/{common → problem-specifications}/exercises/prime-factors/metadata.yml +0 -0
  254. data/{common → problem-specifications}/exercises/protein-translation/description.md +0 -0
  255. data/{common → problem-specifications}/exercises/protein-translation/metadata.yml +0 -0
  256. data/{common → problem-specifications}/exercises/proverb/description.md +0 -0
  257. data/{common → problem-specifications}/exercises/proverb/metadata.yml +0 -0
  258. data/{common → problem-specifications}/exercises/pythagorean-triplet/description.md +0 -0
  259. data/{common → problem-specifications}/exercises/pythagorean-triplet/metadata.yml +0 -0
  260. data/{common → problem-specifications}/exercises/queen-attack/canonical-data.json +0 -0
  261. data/{common → problem-specifications}/exercises/queen-attack/description.md +0 -0
  262. data/{common → problem-specifications}/exercises/queen-attack/metadata.yml +0 -0
  263. data/{common → problem-specifications}/exercises/rail-fence-cipher/canonical-data.json +0 -0
  264. data/{common → problem-specifications}/exercises/rail-fence-cipher/description.md +0 -0
  265. data/{common → problem-specifications}/exercises/rail-fence-cipher/metadata.yml +0 -0
  266. data/{common → problem-specifications}/exercises/raindrops/canonical-data.json +0 -0
  267. data/{common → problem-specifications}/exercises/raindrops/description.md +0 -0
  268. data/{common → problem-specifications}/exercises/raindrops/metadata.yml +0 -0
  269. data/{common → problem-specifications}/exercises/react/canonical-data.json +0 -0
  270. data/{common → problem-specifications}/exercises/react/description.md +0 -0
  271. data/{common → problem-specifications}/exercises/react/metadata.yml +0 -0
  272. data/{common → problem-specifications}/exercises/rectangles/canonical-data.json +0 -0
  273. data/{common → problem-specifications}/exercises/rectangles/description.md +0 -0
  274. data/{common → problem-specifications}/exercises/rectangles/metadata.yml +0 -0
  275. data/{common → problem-specifications}/exercises/rna-transcription/canonical-data.json +0 -0
  276. data/{common → problem-specifications}/exercises/rna-transcription/description.md +0 -0
  277. data/{common → problem-specifications}/exercises/rna-transcription/metadata.yml +0 -0
  278. data/{common → problem-specifications}/exercises/robot-name/description.md +0 -0
  279. data/{common → problem-specifications}/exercises/robot-name/metadata.yml +0 -0
  280. data/{common → problem-specifications}/exercises/robot-simulator/canonical-data.json +0 -0
  281. data/{common → problem-specifications}/exercises/robot-simulator/description.md +0 -0
  282. data/{common → problem-specifications}/exercises/robot-simulator/metadata.yml +0 -0
  283. data/{common → problem-specifications}/exercises/roman-numerals/canonical-data.json +0 -0
  284. data/{common → problem-specifications}/exercises/roman-numerals/description.md +0 -0
  285. data/{common → problem-specifications}/exercises/roman-numerals/metadata.yml +0 -0
  286. data/{common → problem-specifications}/exercises/rotational-cipher/canonical-data.json +0 -0
  287. data/{common → problem-specifications}/exercises/rotational-cipher/description.md +0 -0
  288. data/{common → problem-specifications}/exercises/rotational-cipher/metadata.yml +0 -0
  289. data/{common → problem-specifications}/exercises/run-length-encoding/canonical-data.json +0 -0
  290. data/{common → problem-specifications}/exercises/run-length-encoding/description.md +0 -0
  291. data/{common → problem-specifications}/exercises/run-length-encoding/metadata.yml +0 -0
  292. data/{common → problem-specifications}/exercises/saddle-points/canonical-data.json +0 -0
  293. data/{common → problem-specifications}/exercises/saddle-points/description.md +0 -0
  294. data/{common → problem-specifications}/exercises/saddle-points/metadata.yml +0 -0
  295. data/{common → problem-specifications}/exercises/say/canonical-data.json +0 -0
  296. data/{common → problem-specifications}/exercises/say/description.md +0 -0
  297. data/{common → problem-specifications}/exercises/say/metadata.yml +0 -0
  298. data/{common → problem-specifications}/exercises/scale-generator/description.md +0 -0
  299. data/{common → problem-specifications}/exercises/scale-generator/metadata.yml +0 -0
  300. data/{common → problem-specifications}/exercises/scrabble-score/canonical-data.json +0 -0
  301. data/{common → problem-specifications}/exercises/scrabble-score/description.md +0 -0
  302. data/{common → problem-specifications}/exercises/scrabble-score/metadata.yml +0 -0
  303. data/{common → problem-specifications}/exercises/secret-handshake/canonical-data.json +2 -2
  304. data/{common → problem-specifications}/exercises/secret-handshake/description.md +0 -0
  305. data/{common → problem-specifications}/exercises/secret-handshake/metadata.yml +0 -0
  306. data/{common → problem-specifications}/exercises/series/description.md +0 -0
  307. data/{common → problem-specifications}/exercises/series/metadata.yml +0 -0
  308. data/{common → problem-specifications}/exercises/sgf-parsing/description.md +0 -0
  309. data/{common → problem-specifications}/exercises/sgf-parsing/metadata.yml +0 -0
  310. data/{common → problem-specifications}/exercises/sieve/canonical-data.json +0 -0
  311. data/{common → problem-specifications}/exercises/sieve/description.md +0 -0
  312. data/{common → problem-specifications}/exercises/sieve/metadata.yml +0 -0
  313. data/{common → problem-specifications}/exercises/simple-cipher/description.md +0 -0
  314. data/{common → problem-specifications}/exercises/simple-cipher/metadata.yml +0 -0
  315. data/{common → problem-specifications}/exercises/simple-linked-list/description.md +0 -0
  316. data/{common → problem-specifications}/exercises/simple-linked-list/metadata.yml +0 -0
  317. data/{common → problem-specifications}/exercises/space-age/canonical-data.json +0 -0
  318. data/{common → problem-specifications}/exercises/space-age/description.md +0 -0
  319. data/{common → problem-specifications}/exercises/space-age/metadata.yml +0 -0
  320. data/problem-specifications/exercises/spiral-matrix/canonical-data.json +52 -0
  321. data/problem-specifications/exercises/spiral-matrix/description.md +22 -0
  322. data/problem-specifications/exercises/spiral-matrix/metadata.yml +4 -0
  323. data/{common → problem-specifications}/exercises/strain/description.md +0 -0
  324. data/{common → problem-specifications}/exercises/strain/metadata.yml +0 -0
  325. data/{common → problem-specifications}/exercises/sublist/canonical-data.json +0 -0
  326. data/{common → problem-specifications}/exercises/sublist/description.md +0 -0
  327. data/{common → problem-specifications}/exercises/sublist/metadata.yml +0 -0
  328. data/{common → problem-specifications}/exercises/sum-of-multiples/canonical-data.json +0 -0
  329. data/{common → problem-specifications}/exercises/sum-of-multiples/description.md +0 -0
  330. data/{common → problem-specifications}/exercises/sum-of-multiples/metadata.yml +0 -0
  331. data/{common → problem-specifications}/exercises/tournament/canonical-data.json +0 -0
  332. data/{common → problem-specifications}/exercises/tournament/description.md +0 -0
  333. data/{common → problem-specifications}/exercises/tournament/metadata.yml +0 -0
  334. data/{common → problem-specifications}/exercises/transpose/canonical-data.json +0 -0
  335. data/{common → problem-specifications}/exercises/transpose/description.md +0 -0
  336. data/{common → problem-specifications}/exercises/transpose/metadata.yml +0 -0
  337. data/{common → problem-specifications}/exercises/tree-building/description.md +0 -0
  338. data/{common → problem-specifications}/exercises/tree-building/metadata.yml +0 -0
  339. data/{common → problem-specifications}/exercises/triangle/canonical-data.json +1 -1
  340. data/{common → problem-specifications}/exercises/triangle/description.md +0 -0
  341. data/{common → problem-specifications}/exercises/triangle/metadata.yml +0 -0
  342. data/{common → problem-specifications}/exercises/trinary/.deprecated +1 -1
  343. data/{common → problem-specifications}/exercises/trinary/canonical-data.json +0 -0
  344. data/{common → problem-specifications}/exercises/trinary/description.md +0 -0
  345. data/{common → problem-specifications}/exercises/trinary/metadata.yml +0 -0
  346. data/{common → problem-specifications}/exercises/twelve-days/description.md +0 -0
  347. data/{common → problem-specifications}/exercises/twelve-days/metadata.yml +0 -0
  348. data/{common → problem-specifications}/exercises/two-bucket/canonical-data.json +0 -0
  349. data/{common → problem-specifications}/exercises/two-bucket/description.md +0 -0
  350. data/{common → problem-specifications}/exercises/two-bucket/metadata.yml +0 -0
  351. data/{common → problem-specifications}/exercises/two-fer/canonical-data.json +0 -0
  352. data/{common → problem-specifications}/exercises/two-fer/description.md +0 -0
  353. data/{common → problem-specifications}/exercises/two-fer/metadata.yml +0 -0
  354. data/{common → problem-specifications}/exercises/variable-length-quantity/canonical-data.json +0 -0
  355. data/{common → problem-specifications}/exercises/variable-length-quantity/description.md +0 -0
  356. data/{common → problem-specifications}/exercises/variable-length-quantity/metadata.yml +0 -0
  357. data/{common → problem-specifications}/exercises/word-count/canonical-data.json +0 -0
  358. data/{common → problem-specifications}/exercises/word-count/description.md +0 -0
  359. data/{common → problem-specifications}/exercises/word-count/metadata.yml +0 -0
  360. data/{common → problem-specifications}/exercises/word-search/canonical-data.json +0 -0
  361. data/{common → problem-specifications}/exercises/word-search/description.md +0 -0
  362. data/{common → problem-specifications}/exercises/word-search/metadata.yml +0 -0
  363. data/{common → problem-specifications}/exercises/wordy/canonical-data.json +0 -0
  364. data/{common → problem-specifications}/exercises/wordy/description.md +0 -0
  365. data/{common → problem-specifications}/exercises/wordy/metadata.yml +0 -0
  366. data/{common → problem-specifications}/exercises/zebra-puzzle/description.md +0 -0
  367. data/{common → problem-specifications}/exercises/zebra-puzzle/metadata.yml +0 -0
  368. data/{common → problem-specifications}/exercises/zipper/description.md +0 -0
  369. data/{common → problem-specifications}/exercises/zipper/metadata.yml +0 -0
  370. data/{common → problem-specifications}/package.json +2 -2
  371. data/{common → problem-specifications}/yarn.lock +0 -0
  372. data/trackler.gemspec +1 -1
  373. data/tracks/bash/config.json +7 -0
  374. data/tracks/bash/exercises/pangram/example.sh +7 -0
  375. data/tracks/bash/exercises/pangram/pangram_tests.sh +47 -0
  376. data/tracks/c/config.json +19 -0
  377. data/tracks/c/exercises/acronym/makefile +15 -0
  378. data/tracks/c/exercises/acronym/src/example.c +44 -0
  379. data/tracks/c/exercises/acronym/src/example.h +6 -0
  380. data/tracks/c/exercises/acronym/test/test_acronym.c +68 -0
  381. data/tracks/c/exercises/acronym/test/vendor/unity.c +1300 -0
  382. data/tracks/c/exercises/acronym/test/vendor/unity.h +274 -0
  383. data/tracks/c/exercises/acronym/test/vendor/unity_internals.h +701 -0
  384. data/tracks/c/exercises/isogram/makefile +15 -0
  385. data/tracks/c/exercises/isogram/src/example.c +26 -0
  386. data/tracks/c/exercises/isogram/src/example.h +8 -0
  387. data/tracks/c/exercises/isogram/test/test_isogram.c +66 -0
  388. data/tracks/c/exercises/isogram/test/vendor/unity.c +1300 -0
  389. data/tracks/c/exercises/isogram/test/vendor/unity.h +274 -0
  390. data/tracks/c/exercises/isogram/test/vendor/unity_internals.h +701 -0
  391. data/tracks/{dartlang → chapel}/.gitignore +0 -0
  392. data/tracks/{dartlang → chapel}/.travis.yml +0 -0
  393. data/tracks/{dartlang → chapel}/LICENSE +0 -0
  394. data/tracks/chapel/README.md +11 -0
  395. data/tracks/{dartlang → chapel}/bin/fetch-configlet +0 -0
  396. data/tracks/{dartlang → chapel}/config.json +3 -3
  397. data/tracks/{dartlang → chapel}/docs/ABOUT.md +0 -0
  398. data/tracks/{dartlang → chapel}/docs/EXERCISE_README_INSERT.md +0 -0
  399. data/tracks/{dartlang → chapel}/docs/INSTALLATION.md +0 -0
  400. data/tracks/{dartlang → chapel}/docs/LEARNING.md +0 -0
  401. data/tracks/{dartlang → chapel}/docs/RESOURCES.md +0 -0
  402. data/tracks/{dartlang → chapel}/docs/TESTS.md +0 -0
  403. data/tracks/{dartlang/img → chapel/exercises}/.keep +0 -0
  404. data/tracks/chapel/img/.keep +0 -0
  405. data/tracks/clojurescript/README.md +1 -1
  406. data/tracks/clojurescript/config.json +1 -1
  407. data/tracks/coffeescript/config.json +1 -1
  408. data/tracks/coldfusion/config.json +1 -1
  409. data/tracks/coq/README.md +1 -1
  410. data/tracks/coq/config.json +1 -1
  411. data/tracks/coq/docs/EXERCISE_README_INSERT.md +1 -1
  412. data/tracks/cpp/CMakeLists.txt +1 -0
  413. data/tracks/cpp/config.json +8 -0
  414. data/tracks/cpp/exercises/allergies/CMakeLists.txt +52 -0
  415. data/tracks/cpp/exercises/allergies/allergies_test.cpp +148 -0
  416. data/tracks/cpp/exercises/allergies/example.cpp +30 -0
  417. data/tracks/cpp/exercises/allergies/example.h +36 -0
  418. data/tracks/csharp/build.ps1 +2 -2
  419. data/tracks/csharp/build.sh +2 -2
  420. data/tracks/csharp/exercises/all-your-base/AllYourBase.cs +1 -1
  421. data/tracks/csharp/exercises/all-your-base/AllYourBaseTest.cs +103 -102
  422. data/tracks/csharp/exercises/all-your-base/Example.cs +1 -1
  423. data/tracks/csharp/exercises/beer-song/BeerSongTest.cs +322 -322
  424. data/tracks/csharp/exercises/bob/BobTest.cs +2 -0
  425. data/tracks/csharp/exercises/book-store/BookStore.cs +1 -1
  426. data/tracks/csharp/exercises/book-store/BookStoreTest.cs +42 -28
  427. data/tracks/csharp/exercises/book-store/Example.cs +5 -5
  428. data/tracks/csharp/exercises/food-chain/FoodChainTest.cs +96 -96
  429. data/tracks/csharp/exercises/nth-prime/NthPrimeTest.cs +1 -2
  430. data/tracks/csharp/exercises/perfect-numbers/PerfectNumbersTest.cs +2 -3
  431. data/tracks/csharp/exercises/transpose/Example.cs +14 -14
  432. data/tracks/csharp/exercises/transpose/TransposeTest.cs +34 -44
  433. data/tracks/csharp/exercises/wordy/WordyTest.cs +2 -3
  434. data/tracks/csharp/generators/Exercise.cs +23 -0
  435. data/tracks/csharp/generators/ExerciseCollection.cs +33 -0
  436. data/tracks/csharp/generators/Exercises/Acronym.cs +6 -0
  437. data/tracks/csharp/generators/Exercises/AllYourBase.cs +22 -0
  438. data/tracks/csharp/generators/Exercises/AtbashCipher.cs +6 -0
  439. data/tracks/csharp/generators/Exercises/BeerSong.cs +11 -0
  440. data/tracks/csharp/generators/Exercises/Bob.cs +2 -16
  441. data/tracks/csharp/generators/Exercises/BookStore.cs +16 -0
  442. data/tracks/csharp/generators/Exercises/FoodChain.cs +16 -0
  443. data/tracks/csharp/generators/Exercises/HelloWorld.cs +6 -0
  444. data/tracks/csharp/generators/Exercises/Isogram.cs +6 -0
  445. data/tracks/csharp/generators/Exercises/Leap.cs +11 -0
  446. data/tracks/csharp/generators/Exercises/Luhn.cs +11 -0
  447. data/tracks/csharp/generators/Exercises/NthPrime.cs +13 -0
  448. data/tracks/csharp/generators/Exercises/PerfectNumbers.cs +21 -0
  449. data/tracks/csharp/generators/Exercises/PigLatin.cs +6 -0
  450. data/tracks/csharp/generators/Exercises/Raindrops.cs +6 -0
  451. data/tracks/csharp/generators/Exercises/RomanNumerals.cs +15 -0
  452. data/tracks/csharp/generators/Exercises/RotationalCipher.cs +6 -0
  453. data/tracks/csharp/generators/Exercises/Transpose.cs +19 -0
  454. data/tracks/csharp/generators/Exercises/Wordy.cs +13 -0
  455. data/tracks/csharp/generators/Generators.csproj +8 -2
  456. data/tracks/csharp/generators/{Data → Input}/CanonicalData.cs +1 -3
  457. data/tracks/csharp/generators/Input/CanonicalDataCase.cs +37 -0
  458. data/tracks/csharp/generators/Input/CanonicalDataCaseJsonConverter.cs +43 -0
  459. data/tracks/csharp/generators/{Data → Input}/CanonicalDataCasesJsonConverter.cs +6 -11
  460. data/tracks/csharp/generators/{Data → Input}/CanonicalDataParser.cs +1 -1
  461. data/tracks/csharp/generators/Output/BooleanTestMethodGenerator.cs +13 -0
  462. data/tracks/csharp/generators/Output/EqualityTestMethodGenerator.cs +10 -0
  463. data/tracks/csharp/generators/Output/ExceptionTestMethodGenerator.cs +12 -0
  464. data/tracks/csharp/generators/Output/NameExtensions.cs +35 -0
  465. data/tracks/csharp/generators/Output/TestClass.cs +12 -0
  466. data/tracks/csharp/generators/Output/TestClass.liquid +20 -0
  467. data/tracks/csharp/generators/Output/TestClassFile.cs +22 -0
  468. data/tracks/csharp/generators/Output/TestClassGenerator.cs +30 -0
  469. data/tracks/csharp/generators/Output/TestClassRenderer.cs +26 -0
  470. data/tracks/csharp/generators/Output/TestMethod.cs +10 -0
  471. data/tracks/csharp/generators/Output/TestMethodGenerator.cs +95 -0
  472. data/tracks/csharp/generators/Output/UnescapedValue.cs +11 -0
  473. data/tracks/csharp/generators/Output/ValueFormatter.cs +100 -0
  474. data/tracks/csharp/generators/Program.cs +10 -42
  475. data/tracks/csharp/generators/Properties/launchSettings.json +7 -0
  476. data/tracks/csharp/generators/{Methods/TestedMethodType.cs → TestedMethodType.cs} +1 -1
  477. data/tracks/{dlang → d}/.gitignore +0 -0
  478. data/tracks/{dlang → d}/.travis.yml +0 -0
  479. data/tracks/{dlang → d}/LICENSE +0 -0
  480. data/tracks/{dlang → d}/README.md +1 -1
  481. data/tracks/{dlang → d}/bin/fetch-configlet +0 -0
  482. data/tracks/{dlang → d}/bin/test-all-exercises +0 -0
  483. data/tracks/{dlang → d}/bin/test-exercise +0 -0
  484. data/tracks/{dlang → d}/config.json +2 -2
  485. data/tracks/{dlang → d}/docs/ABOUT.md +0 -0
  486. data/tracks/{dlang → d}/docs/EXERCISE_README_INSERT.md +0 -0
  487. data/tracks/{dlang → d}/docs/INSTALLATION.md +0 -0
  488. data/tracks/{dlang → d}/docs/LEARNING.md +0 -0
  489. data/tracks/{dlang → d}/docs/RESOURCES.md +0 -0
  490. data/tracks/{dlang → d}/docs/TESTS.md +0 -0
  491. data/tracks/{dlang → d}/exercises/bob/dub.sdl +0 -0
  492. data/tracks/{dlang → d}/exercises/bob/example/bob.d +0 -0
  493. data/tracks/{dlang → d}/exercises/bob/source/bob.d +0 -0
  494. data/tracks/{dlang → d}/exercises/circular-buffer/dub.sdl +0 -0
  495. data/tracks/{dlang → d}/exercises/circular-buffer/example/circular_buffer.d +1 -1
  496. data/tracks/{dlang → d}/exercises/circular-buffer/source/circular_buffer.d +2 -2
  497. data/tracks/{dlang → d}/exercises/crypto-square/dub.sdl +0 -0
  498. data/tracks/{dlang → d}/exercises/crypto-square/example/crypto_square.d +0 -0
  499. data/tracks/{dlang → d}/exercises/crypto-square/source/crypto_square.d +0 -0
  500. data/tracks/{dlang → d}/exercises/difference-of-squares/dub.sdl +0 -0
  501. data/tracks/{dlang → d}/exercises/difference-of-squares/example/difference_of_squares.d +0 -0
  502. data/tracks/{dlang → d}/exercises/difference-of-squares/source/difference_of_squares.d +0 -0
  503. data/tracks/{dlang → d}/exercises/etl/dub.sdl +0 -0
  504. data/tracks/{dlang → d}/exercises/etl/example/etl.d +2 -1
  505. data/tracks/{dlang → d}/exercises/etl/source/etl.d +0 -0
  506. data/tracks/{dlang → d}/exercises/gigasecond/dub.sdl +0 -0
  507. data/tracks/{dlang → d}/exercises/gigasecond/example/gigasecond.d +0 -0
  508. data/tracks/{dlang → d}/exercises/gigasecond/source/gigasecond.d +0 -0
  509. data/tracks/{dlang → d}/exercises/hamming/dub.sdl +0 -0
  510. data/tracks/{dlang → d}/exercises/hamming/example/hamming.d +2 -1
  511. data/tracks/{dlang → d}/exercises/hamming/source/hamming.d +2 -0
  512. data/tracks/{dlang → d}/exercises/hello-world/dub.sdl +0 -0
  513. data/tracks/{dlang → d}/exercises/hello-world/example/hello_world.d +0 -0
  514. data/tracks/{dlang → d}/exercises/hello-world/source/hello_world.d +0 -0
  515. data/tracks/{dlang → d}/exercises/leap/dub.sdl +0 -0
  516. data/tracks/{dlang → d}/exercises/leap/example/leap.d +0 -0
  517. data/tracks/{dlang → d}/exercises/leap/source/leap.d +0 -0
  518. data/tracks/{dlang → d}/exercises/nucleotide-count/dub.sdl +0 -0
  519. data/tracks/{dlang → d}/exercises/nucleotide-count/example/nucleotide_count.d +2 -1
  520. data/tracks/{dlang → d}/exercises/nucleotide-count/source/nucleotide_count.d +2 -0
  521. data/tracks/{dlang → d}/exercises/pangram/dub.sdl +0 -0
  522. data/tracks/{dlang → d}/exercises/pangram/example/pangram.d +0 -0
  523. data/tracks/{dlang → d}/exercises/pangram/source/pangram.d +0 -0
  524. data/tracks/{dlang → d}/exercises/raindrops/dub.sdl +0 -0
  525. data/tracks/{dlang → d}/exercises/raindrops/example/raindrops.d +0 -0
  526. data/tracks/{dlang → d}/exercises/raindrops/source/raindrops.d +0 -0
  527. data/tracks/{dlang → d}/exercises/react/dub.sdl +0 -0
  528. data/tracks/{dlang → d}/exercises/react/example/react.d +0 -0
  529. data/tracks/{dlang → d}/exercises/react/source/react.d +0 -0
  530. data/tracks/{dlang → d}/exercises/rna-transcription/dub.sdl +0 -0
  531. data/tracks/{dlang → d}/exercises/rna-transcription/example/rna_transcription.d +4 -1
  532. data/tracks/{dlang → d}/exercises/rna-transcription/source/rna_transcription.d +1 -1
  533. data/tracks/{dlang → d}/exercises/robot-name/dub.sdl +0 -0
  534. data/tracks/{dlang → d}/exercises/robot-name/example/robot_name.d +0 -0
  535. data/tracks/{dlang → d}/exercises/robot-name/source/robot_name.d +0 -0
  536. data/tracks/{dlang → d}/exercises/roman-numerals/dub.sdl +0 -0
  537. data/tracks/{dlang → d}/exercises/roman-numerals/example/roman_numerals.d +0 -0
  538. data/tracks/{dlang → d}/exercises/roman-numerals/source/roman_numerals.d +0 -0
  539. data/tracks/{dlang → d}/exercises/series/dub.sdl +0 -0
  540. data/tracks/{dlang → d}/exercises/series/example/series.d +1 -1
  541. data/tracks/{dlang → d}/exercises/series/source/series.d +1 -1
  542. data/tracks/{dlang → d}/exercises/triangle/dub.sdl +0 -0
  543. data/tracks/{dlang → d}/exercises/triangle/example/triangle.d +1 -2
  544. data/tracks/{dlang → d}/exercises/triangle/source/triangle.d +1 -3
  545. data/tracks/{dlang → d}/img/icon.png +0 -0
  546. data/tracks/{dartlang → dart}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  547. data/tracks/dart/.gitignore +24 -0
  548. data/tracks/dart/.travis.yml +27 -0
  549. data/tracks/dart/LICENSE +21 -0
  550. data/tracks/{dartlang → dart}/README.md +1 -1
  551. data/tracks/dart/analysis_options.yaml +7 -0
  552. data/tracks/dart/bin/fetch-configlet +32 -0
  553. data/tracks/dart/config.json +79 -0
  554. data/tracks/dart/docs/ABOUT.md +0 -0
  555. data/tracks/dart/docs/EXERCISE_README_INSERT.md +0 -0
  556. data/tracks/dart/docs/INSTALLATION.md +0 -0
  557. data/tracks/dart/docs/LEARNING.md +0 -0
  558. data/tracks/dart/docs/RESOURCES.md +0 -0
  559. data/tracks/dart/docs/TESTS.md +0 -0
  560. data/tracks/dart/exercises/bob/lib/bob.dart +3 -0
  561. data/tracks/dart/exercises/bob/lib/example.dart +17 -0
  562. data/tracks/dart/exercises/bob/pubspec.lock +281 -0
  563. data/tracks/dart/exercises/bob/pubspec.yaml +3 -0
  564. data/tracks/dart/exercises/bob/test/bob_test.dart +118 -0
  565. data/tracks/dart/exercises/difference-of-squares/lib/difference_of_squares.dart +3 -0
  566. data/tracks/dart/exercises/difference-of-squares/lib/example.dart +13 -0
  567. data/tracks/dart/exercises/difference-of-squares/pubspec.lock +281 -0
  568. data/tracks/dart/exercises/difference-of-squares/pubspec.yaml +3 -0
  569. data/tracks/dart/exercises/difference-of-squares/test/difference_of_squares_test.dart +50 -0
  570. data/tracks/dart/exercises/gigasecond/lib/example.dart +7 -0
  571. data/tracks/dart/exercises/gigasecond/lib/gigasecond.dart +3 -0
  572. data/tracks/dart/exercises/gigasecond/pubspec.lock +281 -0
  573. data/tracks/dart/exercises/gigasecond/pubspec.yaml +3 -0
  574. data/tracks/dart/exercises/gigasecond/test/gigasecond_test.dart +39 -0
  575. data/tracks/dart/exercises/hamming/lib/example.dart +17 -0
  576. data/tracks/dart/exercises/hamming/lib/hamming.dart +3 -0
  577. data/tracks/dart/exercises/hamming/pubspec.lock +281 -0
  578. data/tracks/dart/exercises/hamming/pubspec.yaml +3 -0
  579. data/tracks/dart/exercises/hamming/test/hamming_test.dart +54 -0
  580. data/tracks/dart/exercises/hello-world/lib/example.dart +3 -0
  581. data/tracks/dart/exercises/hello-world/lib/hello_world.dart +5 -0
  582. data/tracks/dart/exercises/hello-world/pubspec.lock +281 -0
  583. data/tracks/dart/exercises/hello-world/pubspec.yaml +3 -0
  584. data/tracks/dart/exercises/hello-world/test/hello_world_test.dart +24 -0
  585. data/tracks/dart/exercises/leap/lib/example.dart +13 -0
  586. data/tracks/dart/exercises/leap/lib/leap.dart +3 -0
  587. data/tracks/dart/exercises/leap/pubspec.lock +281 -0
  588. data/tracks/dart/exercises/leap/pubspec.yaml +3 -0
  589. data/tracks/dart/exercises/leap/test/leap_test.dart +30 -0
  590. data/tracks/dart/exercises/rna-transcription/lib/example.dart +18 -0
  591. data/tracks/dart/exercises/rna-transcription/lib/rna_transcription.dart +3 -0
  592. data/tracks/dart/exercises/rna-transcription/pubspec.lock +281 -0
  593. data/tracks/dart/exercises/rna-transcription/pubspec.yaml +3 -0
  594. data/tracks/dart/exercises/rna-transcription/test/rna_transcription_test.dart +48 -0
  595. data/tracks/dart/img/.keep +0 -0
  596. data/tracks/dart/img/icon.png +0 -0
  597. data/tracks/dart/img/icon.svg +37 -0
  598. data/tracks/dart/pubspec.lock +287 -0
  599. data/tracks/dart/pubspec.yaml +8 -0
  600. data/tracks/dart/test/exercises_test.dart +90 -0
  601. data/tracks/dart/tool/create-exercise +124 -0
  602. data/tracks/delphi/README.md +1 -1
  603. data/tracks/delphi/exercises/bank-account/uBankAccountTests.pas +12 -10
  604. data/tracks/delphi/exercises/hamming/uHammingExample.pas +5 -5
  605. data/tracks/delphi/exercises/hamming/uHammingTests.pas +46 -48
  606. data/tracks/ecmascript/.babelrc +3 -0
  607. data/tracks/ecmascript/config.json +25 -1
  608. data/tracks/ecmascript/exercises/accumulate/package.json +59 -11
  609. data/tracks/ecmascript/exercises/acronym/package.json +59 -11
  610. data/tracks/ecmascript/exercises/all-your-base/package.json +59 -11
  611. data/tracks/ecmascript/exercises/allergies/package.json +59 -11
  612. data/tracks/ecmascript/exercises/alphametics/alphametics.spec.js +95 -0
  613. data/tracks/ecmascript/exercises/alphametics/example.js +99 -0
  614. data/tracks/ecmascript/exercises/alphametics/package.json +122 -0
  615. data/tracks/ecmascript/exercises/anagram/package.json +59 -11
  616. data/tracks/ecmascript/exercises/atbash-cipher/package.json +59 -11
  617. data/tracks/ecmascript/exercises/beer-song/package.json +59 -11
  618. data/tracks/ecmascript/exercises/binary-search-tree/package.json +59 -11
  619. data/tracks/ecmascript/exercises/binary-search/package.json +59 -11
  620. data/tracks/ecmascript/exercises/binary/package.json +59 -11
  621. data/tracks/ecmascript/exercises/bob/package.json +59 -11
  622. data/tracks/ecmascript/exercises/bracket-push/package.json +59 -11
  623. data/tracks/ecmascript/exercises/circular-buffer/package.json +59 -11
  624. data/tracks/ecmascript/exercises/clock/package.json +59 -11
  625. data/tracks/ecmascript/exercises/connect/package.json +59 -11
  626. data/tracks/ecmascript/exercises/crypto-square/package.json +59 -11
  627. data/tracks/ecmascript/exercises/custom-set/package.json +59 -11
  628. data/tracks/ecmascript/exercises/diamond/package.json +59 -11
  629. data/tracks/ecmascript/exercises/difference-of-squares/package.json +59 -11
  630. data/tracks/ecmascript/exercises/etl/package.json +59 -11
  631. data/tracks/ecmascript/exercises/flatten-array/example.js +11 -0
  632. data/tracks/ecmascript/exercises/flatten-array/flatten-array.spec.js +41 -0
  633. data/tracks/ecmascript/exercises/flatten-array/package.json +74 -0
  634. data/tracks/ecmascript/exercises/food-chain/package.json +59 -11
  635. data/tracks/ecmascript/exercises/gigasecond/package.json +59 -11
  636. data/tracks/ecmascript/exercises/grade-school/package.json +59 -11
  637. data/tracks/ecmascript/exercises/grains/package.json +59 -11
  638. data/tracks/ecmascript/exercises/hamming/package.json +59 -11
  639. data/tracks/ecmascript/exercises/hello-world/package.json +59 -11
  640. data/tracks/ecmascript/exercises/hexadecimal/package.json +59 -11
  641. data/tracks/ecmascript/exercises/isogram/package.json +59 -11
  642. data/tracks/ecmascript/exercises/kindergarten-garden/package.json +59 -11
  643. data/tracks/ecmascript/exercises/largest-series-product/package.json +59 -11
  644. data/tracks/ecmascript/exercises/leap/package.json +59 -11
  645. data/tracks/ecmascript/exercises/linked-list/package.json +59 -11
  646. data/tracks/ecmascript/exercises/list-ops/example.js +77 -0
  647. data/tracks/ecmascript/exercises/list-ops/list-ops.spec.js +133 -0
  648. data/tracks/ecmascript/exercises/list-ops/package.json +74 -0
  649. data/tracks/ecmascript/exercises/luhn/package.json +59 -11
  650. data/tracks/ecmascript/exercises/matrix/package.json +59 -11
  651. data/tracks/ecmascript/exercises/meetup/package.json +59 -11
  652. data/tracks/ecmascript/exercises/nth-prime/package.json +59 -11
  653. data/tracks/ecmascript/exercises/ocr-numbers/package.json +59 -11
  654. data/tracks/ecmascript/exercises/octal/package.json +59 -11
  655. data/tracks/ecmascript/exercises/package.json +6 -8
  656. data/tracks/ecmascript/exercises/palindrome-products/package.json +59 -11
  657. data/tracks/ecmascript/exercises/pangram/package.json +59 -11
  658. data/tracks/ecmascript/exercises/pascals-triangle/package.json +59 -11
  659. data/tracks/ecmascript/exercises/perfect-numbers/package.json +59 -11
  660. data/tracks/ecmascript/exercises/phone-number/package.json +59 -11
  661. data/tracks/ecmascript/exercises/pig-latin/package.json +59 -11
  662. data/tracks/ecmascript/exercises/prime-factors/package.json +59 -11
  663. data/tracks/ecmascript/exercises/pythagorean-triplet/package.json +59 -11
  664. data/tracks/ecmascript/exercises/queen-attack/package.json +59 -11
  665. data/tracks/ecmascript/exercises/raindrops/package.json +59 -11
  666. data/tracks/ecmascript/exercises/rna-transcription/package.json +59 -11
  667. data/tracks/ecmascript/exercises/robot-name/package.json +59 -11
  668. data/tracks/ecmascript/exercises/robot-simulator/package.json +59 -11
  669. data/tracks/ecmascript/exercises/roman-numerals/package.json +59 -11
  670. data/tracks/ecmascript/exercises/saddle-points/package.json +59 -11
  671. data/tracks/ecmascript/exercises/say/package.json +59 -11
  672. data/tracks/ecmascript/exercises/scrabble-score/package.json +59 -11
  673. data/tracks/ecmascript/exercises/secret-handshake/package.json +59 -11
  674. data/tracks/ecmascript/exercises/series/package.json +59 -11
  675. data/tracks/ecmascript/exercises/sieve/package.json +59 -11
  676. data/tracks/ecmascript/exercises/simple-cipher/package.json +59 -11
  677. data/tracks/ecmascript/exercises/space-age/package.json +59 -11
  678. data/tracks/ecmascript/exercises/strain/package.json +59 -11
  679. data/tracks/ecmascript/exercises/sum-of-multiples/package.json +59 -11
  680. data/tracks/ecmascript/exercises/triangle/package.json +59 -11
  681. data/tracks/ecmascript/exercises/trinary/package.json +59 -11
  682. data/tracks/ecmascript/exercises/two-bucket/package.json +59 -11
  683. data/tracks/ecmascript/exercises/word-count/package.json +59 -11
  684. data/tracks/ecmascript/exercises/wordy/package.json +59 -11
  685. data/tracks/ecmascript/package-lock.json +2835 -0
  686. data/tracks/ecmascript/package.json +59 -11
  687. data/tracks/elixir/config.json +7 -0
  688. data/tracks/elixir/exercises/collatz-conjecture/collatz_conjecture.exs +12 -0
  689. data/tracks/elixir/exercises/collatz-conjecture/collatz_conjecture_test.exs +54 -0
  690. data/tracks/elixir/exercises/collatz-conjecture/example.exs +20 -0
  691. data/tracks/erlang/.github/stale.yml +2 -0
  692. data/tracks/erlang/exercises/rna-transcription/test/rna_transcription_tests.erl +3 -3
  693. data/tracks/factor/docs/INSTALLATION.md +27 -18
  694. data/tracks/factor/docs/TESTS.md +10 -6
  695. data/tracks/fortran/README.md +1 -1
  696. data/tracks/fortran/config.json +1 -1
  697. data/tracks/go/exercises/clock/.meta/gen.go +58 -65
  698. data/tracks/go/exercises/clock/cases_test.go +0 -4
  699. data/tracks/go/gen/gen.go +4 -0
  700. data/tracks/go/gen/property.go +70 -0
  701. data/tracks/groovy/README.md +1 -1
  702. data/tracks/groovy/config.json +2 -4
  703. data/tracks/groovy/exercises/roman-numerals/Example.groovy +10 -10
  704. data/tracks/groovy/exercises/roman-numerals/Roman.groovy +33 -0
  705. data/tracks/groovy/exercises/roman-numerals/RomanSpec.groovy +35 -0
  706. data/tracks/haskell/bin/test-example +7 -3
  707. data/tracks/haskell/bin/test-stub +5 -1
  708. data/tracks/haskell/config.json +6 -0
  709. data/tracks/haskell/exercises/pangram/package.yaml +1 -1
  710. data/tracks/haskell/exercises/pangram/test/Tests.hs +1 -1
  711. data/tracks/haskell/exercises/simple-linked-list/test/Tests.hs +4 -4
  712. data/tracks/haskell/exercises/spiral-matrix/examples/success-standard/package.yaml +16 -0
  713. data/tracks/haskell/exercises/spiral-matrix/examples/success-standard/src/Spiral.hs +17 -0
  714. data/tracks/haskell/exercises/spiral-matrix/package.yaml +20 -0
  715. data/tracks/haskell/exercises/spiral-matrix/src/Spiral.hs +4 -0
  716. data/tracks/haskell/exercises/spiral-matrix/stack.yaml +1 -0
  717. data/tracks/haskell/exercises/spiral-matrix/test/Tests.hs +40 -0
  718. data/tracks/haxe/README.md +1 -1
  719. data/tracks/haxe/config.json +1 -1
  720. data/tracks/java/CONTRIBUTING.md +8 -0
  721. data/tracks/java/POLICIES.md +2 -2
  722. data/tracks/java/README.md +9 -9
  723. data/tracks/java/config.json +40 -5
  724. data/tracks/java/docs/ABOUT.md +1 -1
  725. data/tracks/java/docs/MAINTAINING.md +1 -1
  726. data/tracks/java/exercises/bank-account/HINTS.md +11 -0
  727. data/tracks/java/exercises/bank-account/build.gradle +18 -0
  728. data/tracks/java/exercises/bank-account/src/example/java/BankAccount.java +53 -0
  729. data/tracks/java/exercises/bank-account/src/example/java/BankAccountActionInvalidException.java +6 -0
  730. data/tracks/java/exercises/bank-account/src/main/java/BankAccountActionInvalidException.java +6 -0
  731. data/tracks/java/exercises/bank-account/src/test/java/BankAccountTest.java +201 -0
  732. data/tracks/java/exercises/clock/{HINT.md → HINTS.md} +0 -0
  733. data/tracks/java/exercises/food-chain/build.gradle +17 -0
  734. data/tracks/java/exercises/food-chain/src/example/java/FoodChain.java +77 -0
  735. data/tracks/java/exercises/food-chain/src/main/java/.keep +0 -0
  736. data/tracks/java/exercises/food-chain/src/test/java/FoodChainTest.java +204 -0
  737. data/tracks/java/exercises/hamming/src/test/java/HammingTest.java +68 -26
  738. data/tracks/java/exercises/hello-world/HINTS.md +4 -0
  739. data/tracks/java/exercises/hello-world/TUTORIAL.md +111 -395
  740. data/tracks/java/exercises/hello-world/src/example/java/Greeter.java +7 -0
  741. data/tracks/java/exercises/hello-world/src/main/java/{HelloWorld.java → Greeter.java} +4 -2
  742. data/tracks/java/exercises/hello-world/src/test/java/GreeterTest.java +12 -0
  743. data/tracks/java/exercises/isogram/{HINT.md → HINTS.md} +0 -0
  744. data/tracks/java/exercises/kindergarten-garden/src/test/java/KindergartenGardenTest.java +4 -4
  745. data/tracks/java/exercises/minesweeper/src/example/java/MinesweeperBoard.java +5 -41
  746. data/tracks/java/exercises/minesweeper/src/test/java/MinesweeperBoardTest.java +39 -90
  747. data/tracks/java/exercises/palindrome-products/src/test/java/PalindromeCalculatorTest.java +3 -1
  748. data/tracks/java/exercises/pangram/src/test/java/PangramCheckerTest.java +8 -18
  749. data/tracks/java/exercises/perfect-numbers/src/test/java/NaturalNumberTest.java +0 -1
  750. data/tracks/java/exercises/poker/build.gradle +18 -0
  751. data/tracks/java/exercises/poker/src/example/java/Card.java +25 -0
  752. data/tracks/java/exercises/poker/src/example/java/Hand.java +104 -0
  753. data/tracks/java/exercises/poker/src/example/java/Poker.java +27 -0
  754. data/tracks/java/exercises/poker/src/main/java/Poker.java +2 -0
  755. data/tracks/java/exercises/poker/src/test/java/PokerTest.java +164 -0
  756. data/tracks/java/exercises/settings.gradle +5 -0
  757. data/tracks/java/exercises/simple-cipher/{HINT.md → HINTS.md} +0 -0
  758. data/tracks/java/exercises/transpose/build.gradle +17 -0
  759. data/tracks/java/exercises/transpose/src/example/java/Transpose.java +41 -0
  760. data/tracks/java/exercises/transpose/src/main/java/.keep +0 -0
  761. data/tracks/java/exercises/transpose/src/test/java/TransposeTest.java +264 -0
  762. data/tracks/java/exercises/two-fer/HINTS.md +38 -0
  763. data/tracks/java/exercises/two-fer/build.gradle +17 -0
  764. data/tracks/java/exercises/two-fer/src/example/java/Twofer.java +5 -0
  765. data/tracks/java/exercises/two-fer/src/main/java/Twofer.java +5 -0
  766. data/tracks/java/exercises/two-fer/src/test/java/TwoferTest.java +41 -0
  767. data/tracks/javascript/config.json +9 -0
  768. data/tracks/javascript/exercises/hello-world/HINTS.md +10 -27
  769. data/tracks/javascript/exercises/hello-world/hello-world.js +1 -1
  770. data/tracks/javascript/exercises/hello-world/hello-world.spec.js +2 -10
  771. data/tracks/javascript/exercises/phone-number/example.js +2 -2
  772. data/tracks/javascript/exercises/phone-number/phone-number.spec.js +51 -46
  773. data/tracks/javascript/exercises/simple-linked-list/example.js +119 -0
  774. data/tracks/javascript/exercises/simple-linked-list/simple-linked-list.spec.js +160 -0
  775. data/tracks/julia/config.json +11 -0
  776. data/tracks/julia/exercises/complex-numbers/HINTS.md +11 -0
  777. data/tracks/julia/exercises/complex-numbers/complex-numbers.jl +0 -0
  778. data/tracks/julia/exercises/complex-numbers/example.jl +41 -0
  779. data/tracks/julia/exercises/complex-numbers/runtests.jl +74 -0
  780. data/tracks/kotlin/README.md +8 -8
  781. data/tracks/kotlin/bin/journey-test.sh +1 -1
  782. data/tracks/kotlin/exercises/allergies/src/example/kotlin/Allergen.kt +1 -0
  783. data/tracks/kotlin/exercises/hamming/src/test/kotlin/HammingTest.kt +64 -14
  784. data/tracks/kotlin/exercises/hello-world/TUTORIAL.md +1 -2
  785. data/tracks/kotlin/exercises/pangram/src/test/kotlin/PangramTest.kt +5 -9
  786. data/tracks/kotlin/exercises/phone-number/src/example/kotlin/PhoneNumber.kt +1 -1
  787. data/tracks/kotlin/exercises/phone-number/src/test/kotlin/PhoneNumberTest.kt +21 -13
  788. data/tracks/kotlin/exercises/rna-transcription/src/test/kotlin/RnaTranscriptionTest.kt +15 -18
  789. data/tracks/kotlin/gradle/wrapper/gradle-wrapper.jar +0 -0
  790. data/tracks/kotlin/gradle/wrapper/gradle-wrapper.properties +2 -2
  791. data/tracks/nasm/config.json +1 -1
  792. data/tracks/nim/README.md +2 -2
  793. data/tracks/nim/config.json +1 -1
  794. data/tracks/ocaml/exercises/all-your-base/test.ml +8 -8
  795. data/tracks/ocaml/exercises/bowling/test.ml +14 -15
  796. data/tracks/ocaml/exercises/hamming/test.ml +3 -3
  797. data/tracks/ocaml/tools/test-generator/templates/ocaml/bowling/test.ml +1 -1
  798. data/tracks/perl5/.travis.yml +1 -1
  799. data/tracks/perl5/README.md +1 -1
  800. data/tracks/perl5/bin/README.md +35 -0
  801. data/tracks/perl5/bin/cpanfile +4 -0
  802. data/tracks/perl5/bin/exercise-gen.pl +60 -0
  803. data/tracks/perl5/config.json +7 -0
  804. data/tracks/perl5/docs/INSTALLATION.md +23 -3
  805. data/tracks/perl5/exercises/bob/Bob.pm +4 -17
  806. data/tracks/perl5/exercises/bob/Example.pm +10 -11
  807. data/tracks/perl5/exercises/bob/bob.t +198 -51
  808. data/tracks/perl5/exercises/bob/example.yaml +41 -0
  809. data/tracks/perl5/exercises/hello-world/Example.pm +10 -0
  810. data/tracks/perl5/exercises/hello-world/HelloWorld.pm +10 -0
  811. data/tracks/perl5/exercises/hello-world/example.yaml +33 -0
  812. data/tracks/perl5/exercises/hello-world/hello-world.t +64 -0
  813. data/tracks/perl5/exercises/leap/Example.pm +9 -8
  814. data/tracks/perl5/exercises/leap/Leap.pm +11 -0
  815. data/tracks/perl5/exercises/leap/example.yaml +41 -0
  816. data/tracks/perl5/exercises/leap/leap.t +74 -17
  817. data/tracks/perl5/templates/module.mustache +8 -0
  818. data/tracks/perl5/templates/test.mustache +58 -0
  819. data/tracks/perl6/.travis.yml +1 -1
  820. data/tracks/perl6/README.md +1 -1
  821. data/tracks/perl6/bin/README.md +3 -3
  822. data/tracks/perl6/bin/exercise-gen.pl6 +2 -2
  823. data/tracks/perl6/exercises/all-your-base/all-your-base.t +6 -4
  824. data/tracks/perl6/exercises/allergies/allergies.t +6 -4
  825. data/tracks/perl6/exercises/anagram/anagram.t +6 -4
  826. data/tracks/perl6/exercises/atbash-cipher/atbash-cipher.t +6 -4
  827. data/tracks/perl6/exercises/bob/bob.t +6 -4
  828. data/tracks/perl6/exercises/clock/clock.t +6 -4
  829. data/tracks/perl6/exercises/flatten-array/flatten-array.t +6 -4
  830. data/tracks/perl6/exercises/grains/grains.t +6 -4
  831. data/tracks/perl6/exercises/hello-world/hello-world.t +6 -4
  832. data/tracks/perl6/exercises/leap/leap.t +6 -4
  833. data/tracks/perl6/exercises/luhn/luhn.t +6 -4
  834. data/tracks/perl6/exercises/phone-number/phone-number.t +6 -4
  835. data/tracks/perl6/exercises/raindrops/raindrops.t +6 -4
  836. data/tracks/perl6/exercises/rna-transcription/rna-transcription.t +15 -13
  837. data/tracks/perl6/exercises/scrabble-score/scrabble-score.t +6 -4
  838. data/tracks/perl6/exercises/space-age/space-age.t +6 -4
  839. data/tracks/perl6/exercises/word-count/word-count.t +6 -4
  840. data/tracks/perl6/exercises/wordy/wordy.t +6 -4
  841. data/tracks/perl6/templates/test.mustache +8 -7
  842. data/tracks/plsql/config.json +1 -1
  843. data/tracks/prolog/README.md +6 -6
  844. data/tracks/prolog/config.json +1 -1
  845. data/tracks/r/bin/run_tests.R +18 -10
  846. data/tracks/r/exercises/anagram/test_anagram.R +1 -1
  847. data/tracks/r/exercises/bob/test_bob.R +1 -1
  848. data/tracks/r/exercises/difference-of-squares/test_difference-of-squares.R +1 -1
  849. data/tracks/r/exercises/grains/test_grains.R +1 -1
  850. data/tracks/r/exercises/hamming/test_hamming.R +1 -1
  851. data/tracks/r/exercises/hello-world/test_hello-world.R +1 -1
  852. data/tracks/r/exercises/isogram/test_isogram.R +1 -1
  853. data/tracks/r/exercises/largest-series-product/test_largest-series-product.R +1 -1
  854. data/tracks/r/exercises/leap/test_leap.R +1 -1
  855. data/tracks/r/exercises/luhn/test_luhn.R +1 -1
  856. data/tracks/r/exercises/pascals-triangle/test_pascals-triangle.R +1 -1
  857. data/tracks/r/exercises/perfect-numbers/example.R +17 -1
  858. data/tracks/r/exercises/perfect-numbers/test_perfect-numbers.R +50 -33
  859. data/tracks/r/exercises/phone-number/test_phone-number.R +1 -1
  860. data/tracks/r/exercises/prime-factors/test_prime-factors.R +1 -1
  861. data/tracks/r/exercises/raindrops/test_raindrops.R +1 -1
  862. data/tracks/r/exercises/rna-transcription/test_rna-transcription.R +9 -9
  863. data/tracks/r/exercises/rotational-cipher/test_rotational-cipher.R +1 -1
  864. data/tracks/r/exercises/scrabble-score/test_scrabble-score.R +1 -1
  865. data/tracks/r/exercises/secret-handshake/test_secret-handshake.R +1 -1
  866. data/tracks/r/exercises/sieve/test_sieve.R +1 -1
  867. data/tracks/r/exercises/space-age/test_space-age.R +1 -1
  868. data/tracks/r/exercises/sum-of-multiples/test_sum-of-multiples.R +1 -1
  869. data/tracks/r/exercises/tournament/test_tournament.R +1 -1
  870. data/tracks/r/exercises/word-count/test_word-count.R +1 -1
  871. data/tracks/ruby/README.md +9 -9
  872. data/tracks/ruby/config.json +12 -0
  873. data/tracks/ruby/exercises/collatz-conjecture/.meta/.version +1 -0
  874. data/tracks/ruby/exercises/collatz-conjecture/.meta/generator/collatz_conjecture_case.rb +31 -0
  875. data/tracks/ruby/exercises/collatz-conjecture/.meta/solutions/collatz_conjecture.rb +22 -0
  876. data/tracks/ruby/exercises/collatz-conjecture/collatz_conjecture_test.rb +58 -0
  877. data/tracks/ruby/lib/generator/command_line.rb +6 -7
  878. data/tracks/ruby/lib/generator/command_line/generator_optparser.rb +2 -2
  879. data/tracks/ruby/lib/generator/files/metadata_files.rb +3 -3
  880. data/tracks/ruby/lib/generator/files/track_files.rb +22 -3
  881. data/tracks/ruby/lib/generator/implementation.rb +7 -5
  882. data/tracks/ruby/lib/generator/repository.rb +12 -0
  883. data/tracks/ruby/lib/generator/template_values.rb +1 -1
  884. data/tracks/ruby/lib/helper.rb +1 -1
  885. data/tracks/ruby/test/generator/command_line/generator_optparser_test.rb +2 -2
  886. data/tracks/ruby/test/generator/command_line_test.rb +2 -2
  887. data/tracks/ruby/test/generator/files/metadata_files_test.rb +2 -2
  888. data/tracks/ruby/test/generator/files/track_files_test.rb +9 -4
  889. data/tracks/ruby/test/generator/implementation_test.rb +11 -4
  890. data/tracks/ruby/test/generator/repository_test.rb +10 -0
  891. data/tracks/ruby/test/generator/template_values_test.rb +2 -4
  892. data/tracks/rust/exercises/bob/Cargo.toml +1 -1
  893. data/tracks/rust/exercises/bob/example.rs +4 -3
  894. data/tracks/rust/exercises/bob/tests/bob.rs +110 -9
  895. data/tracks/scala/config.json +0 -1
  896. data/tracks/scala/exercises/anagram/example.scala +7 -7
  897. data/tracks/scala/exercises/anagram/src/test/scala/AnagramTest.scala +73 -46
  898. data/tracks/scala/exercises/etl/example.scala +1 -1
  899. data/tracks/scala/exercises/etl/src/test/scala/EtlTest.scala +20 -34
  900. data/tracks/scala/exercises/grains/src/test/scala/GrainsTest.scala +21 -14
  901. data/tracks/scala/exercises/secret-handshake/example.scala +3 -3
  902. data/tracks/scala/exercises/secret-handshake/src/test/scala/SecretHandshakeTest.scala +28 -29
  903. data/tracks/scala/exercises/sieve/example.scala +1 -1
  904. data/tracks/scala/exercises/sieve/src/test/scala/SieveTest.scala +25 -23
  905. data/tracks/scala/exercises/triangle/example.scala +6 -22
  906. data/tracks/scala/exercises/triangle/src/test/scala/TriangleTest.scala +66 -19
  907. data/tracks/scala/testgen/src/main/scala/AnagramTestGenerator.scala +15 -0
  908. data/tracks/scala/testgen/src/main/scala/EtlTestGenerator.scala +52 -0
  909. data/tracks/scala/testgen/src/main/scala/GrainsTestGenerator.scala +50 -0
  910. data/tracks/scala/testgen/src/main/scala/SecretHandshakeTestGenerator.scala +15 -0
  911. data/tracks/scala/testgen/src/main/scala/SieveTestGenerator.scala +15 -0
  912. data/tracks/scala/testgen/src/main/scala/TriangleTestGenerator.scala +37 -0
  913. data/tracks/scala/testgen/src/main/scala/testgen/TestSuiteBuilder.scala +3 -0
  914. data/tracks/scheme/README.org +2 -2
  915. data/tracks/scheme/config.json +1 -1
  916. data/tracks/smalltalk/.gitignore +4 -0
  917. data/tracks/smalltalk/.travis.yml +5 -0
  918. data/tracks/smalltalk/LICENSE +21 -0
  919. data/tracks/smalltalk/README.md +11 -0
  920. data/tracks/smalltalk/bin/fetch-configlet +32 -0
  921. data/tracks/smalltalk/config.json +16 -0
  922. data/tracks/smalltalk/docs/ABOUT.md +0 -0
  923. data/tracks/smalltalk/docs/EXERCISE_README_INSERT.md +0 -0
  924. data/tracks/smalltalk/docs/INSTALLATION.md +0 -0
  925. data/tracks/smalltalk/docs/LEARNING.md +0 -0
  926. data/tracks/smalltalk/docs/RESOURCES.md +0 -0
  927. data/tracks/smalltalk/docs/TESTS.md +0 -0
  928. data/tracks/smalltalk/exercises/.keep +0 -0
  929. data/tracks/smalltalk/img/.keep +0 -0
  930. data/tracks/sml/config.json +1 -8
  931. data/tracks/tcl/README.md +1 -1
  932. data/tracks/tcl/config.json +1 -1
  933. data/tracks/teco/config.json +1 -1
  934. data/tracks/typescript/Makefile +1 -1
  935. data/tracks/typescript/appveyor.yml +18 -0
  936. data/tracks/typescript/common/package.json +7 -7
  937. data/tracks/typescript/common/tsconfig.json +1 -0
  938. data/tracks/typescript/common/yarn.lock +718 -1152
  939. data/tracks/typescript/config.json +45 -42
  940. data/tracks/typescript/exercises/anagram/package.json +7 -7
  941. data/tracks/typescript/exercises/anagram/tsconfig.json +1 -0
  942. data/tracks/typescript/exercises/anagram/yarn.lock +718 -1152
  943. data/tracks/typescript/exercises/beer-song/package.json +7 -7
  944. data/tracks/typescript/exercises/beer-song/tsconfig.json +1 -0
  945. data/tracks/typescript/exercises/beer-song/yarn.lock +718 -1152
  946. data/tracks/typescript/exercises/bob/package.json +7 -7
  947. data/tracks/typescript/exercises/bob/tsconfig.json +1 -0
  948. data/tracks/typescript/exercises/bob/yarn.lock +718 -1152
  949. data/tracks/typescript/exercises/difference-of-squares/package.json +7 -7
  950. data/tracks/typescript/exercises/difference-of-squares/tsconfig.json +1 -0
  951. data/tracks/typescript/exercises/difference-of-squares/yarn.lock +718 -1152
  952. data/tracks/typescript/exercises/etl/package.json +7 -7
  953. data/tracks/typescript/exercises/etl/tsconfig.json +1 -0
  954. data/tracks/typescript/exercises/etl/yarn.lock +718 -1152
  955. data/tracks/typescript/exercises/food-chain/package.json +7 -7
  956. data/tracks/typescript/exercises/food-chain/tsconfig.json +1 -0
  957. data/tracks/typescript/exercises/food-chain/yarn.lock +718 -1152
  958. data/tracks/typescript/exercises/gigasecond/package.json +7 -7
  959. data/tracks/typescript/exercises/gigasecond/tsconfig.json +1 -0
  960. data/tracks/typescript/exercises/gigasecond/yarn.lock +718 -1152
  961. data/tracks/typescript/exercises/grade-school/package.json +7 -7
  962. data/tracks/typescript/exercises/grade-school/tsconfig.json +1 -0
  963. data/tracks/typescript/exercises/grade-school/yarn.lock +718 -1152
  964. data/tracks/typescript/exercises/hamming/package.json +7 -7
  965. data/tracks/typescript/exercises/hamming/tsconfig.json +1 -0
  966. data/tracks/typescript/exercises/hamming/yarn.lock +718 -1152
  967. data/tracks/typescript/exercises/hello-world/package.json +7 -7
  968. data/tracks/typescript/exercises/hello-world/tsconfig.json +1 -0
  969. data/tracks/typescript/exercises/hello-world/yarn.lock +718 -1152
  970. data/tracks/typescript/exercises/leap/package.json +7 -7
  971. data/tracks/typescript/exercises/leap/tsconfig.json +1 -0
  972. data/tracks/typescript/exercises/leap/yarn.lock +718 -1152
  973. data/tracks/typescript/exercises/pangram/package.json +7 -7
  974. data/tracks/typescript/exercises/pangram/tsconfig.json +1 -0
  975. data/tracks/typescript/exercises/pangram/yarn.lock +718 -1152
  976. data/tracks/typescript/exercises/phone-number/package.json +7 -7
  977. data/tracks/typescript/exercises/phone-number/tsconfig.json +1 -0
  978. data/tracks/typescript/exercises/phone-number/yarn.lock +718 -1152
  979. data/tracks/typescript/exercises/raindrops/package.json +7 -7
  980. data/tracks/typescript/exercises/raindrops/tsconfig.json +1 -0
  981. data/tracks/typescript/exercises/raindrops/yarn.lock +718 -1152
  982. data/tracks/typescript/exercises/rna-transcription/package.json +7 -7
  983. data/tracks/typescript/exercises/rna-transcription/tsconfig.json +1 -0
  984. data/tracks/typescript/exercises/rna-transcription/yarn.lock +718 -1152
  985. data/tracks/typescript/exercises/robot-name/package.json +7 -7
  986. data/tracks/typescript/exercises/robot-name/robot-name.test.ts +0 -5
  987. data/tracks/typescript/exercises/robot-name/tsconfig.json +1 -0
  988. data/tracks/typescript/exercises/robot-name/yarn.lock +718 -1152
  989. data/tracks/typescript/exercises/say/package.json +7 -7
  990. data/tracks/typescript/exercises/say/tsconfig.json +1 -0
  991. data/tracks/typescript/exercises/say/yarn.lock +718 -1152
  992. data/tracks/typescript/exercises/scrabble-score/package.json +7 -7
  993. data/tracks/typescript/exercises/scrabble-score/scrabble-score.example.ts +1 -1
  994. data/tracks/typescript/exercises/scrabble-score/tsconfig.json +1 -0
  995. data/tracks/typescript/exercises/scrabble-score/yarn.lock +718 -1152
  996. data/tracks/typescript/exercises/space-age/package.json +7 -7
  997. data/tracks/typescript/exercises/space-age/tsconfig.json +1 -0
  998. data/tracks/typescript/exercises/space-age/yarn.lock +718 -1152
  999. data/tracks/typescript/exercises/word-count/package.json +7 -7
  1000. data/tracks/typescript/exercises/word-count/tsconfig.json +1 -0
  1001. data/tracks/typescript/exercises/word-count/yarn.lock +718 -1152
  1002. data/tracks/typescript/exercises/wordy/package.json +7 -7
  1003. data/tracks/typescript/exercises/wordy/tsconfig.json +1 -0
  1004. data/tracks/typescript/exercises/wordy/yarn.lock +718 -1152
  1005. data/tracks/vimscript/exercises/rna-transcription/example.vim +1 -1
  1006. data/tracks/vimscript/exercises/rna-transcription/rna_transcription.vader +40 -16
  1007. data/tracks/vimscript/exercises/rna-transcription/rna_transcription.vim +2 -4
  1008. metadata +670 -497
  1009. data/fixtures/tracks/animal/exercises/fish/included-via-symlink.txt +0 -1
  1010. data/tracks/csharp/generators/Classes/TestClass.cs +0 -15
  1011. data/tracks/csharp/generators/Classes/TestClassNameTransformer.cs +0 -9
  1012. data/tracks/csharp/generators/Classes/TestClassRenderer.cs +0 -40
  1013. data/tracks/csharp/generators/Classes/TestedClassNameTransformer.cs +0 -9
  1014. data/tracks/csharp/generators/Data/CanonicalDataCase.cs +0 -24
  1015. data/tracks/csharp/generators/Data/CanonicalDataCaseJsonConverter.cs +0 -32
  1016. data/tracks/csharp/generators/Data/CanonicalDataValue.cs +0 -24
  1017. data/tracks/csharp/generators/Data/ExerciseCollection.cs +0 -23
  1018. data/tracks/csharp/generators/Exercises/AcronymExercise.cs +0 -20
  1019. data/tracks/csharp/generators/Exercises/AtbashCipherExercise.cs +0 -20
  1020. data/tracks/csharp/generators/Exercises/BeerSongExercise.cs +0 -33
  1021. data/tracks/csharp/generators/Exercises/BooleanExercise.cs +0 -14
  1022. data/tracks/csharp/generators/Exercises/EqualityExercise.cs +0 -19
  1023. data/tracks/csharp/generators/Exercises/Exercise.cs +0 -81
  1024. data/tracks/csharp/generators/Exercises/FoodChainExercise.cs +0 -27
  1025. data/tracks/csharp/generators/Exercises/HelloWorldExercise.cs +0 -9
  1026. data/tracks/csharp/generators/Exercises/IsogramExercise.cs +0 -9
  1027. data/tracks/csharp/generators/Exercises/LeapExercise.cs +0 -9
  1028. data/tracks/csharp/generators/Exercises/LuhnExercise.cs +0 -9
  1029. data/tracks/csharp/generators/Exercises/NthPrimeExercise.cs +0 -22
  1030. data/tracks/csharp/generators/Exercises/PerfectNumbersExercise.cs +0 -29
  1031. data/tracks/csharp/generators/Exercises/PigLatinExercise.cs +0 -9
  1032. data/tracks/csharp/generators/Exercises/RaindropsExercise.cs +0 -20
  1033. data/tracks/csharp/generators/Exercises/RomanNumeralsExercise.cs +0 -30
  1034. data/tracks/csharp/generators/Exercises/RotationalCipherExercise.cs +0 -23
  1035. data/tracks/csharp/generators/Exercises/WordyExercise.cs +0 -20
  1036. data/tracks/csharp/generators/Helpers/StringExtensions.cs +0 -8
  1037. data/tracks/csharp/generators/Helpers/To.cs +0 -13
  1038. data/tracks/csharp/generators/Methods/BooleanTestMethodGenerator.cs +0 -32
  1039. data/tracks/csharp/generators/Methods/EqualityTestMethodGenerator.cs +0 -49
  1040. data/tracks/csharp/generators/Methods/ExceptionTestMethodGenerator.cs +0 -30
  1041. data/tracks/csharp/generators/Methods/TestMethod.cs +0 -12
  1042. data/tracks/csharp/generators/Methods/TestMethodData.cs +0 -12
  1043. data/tracks/csharp/generators/Methods/TestMethodGenerator.cs +0 -80
  1044. data/tracks/csharp/generators/Methods/TestMethodNameTransformer.cs +0 -23
  1045. data/tracks/csharp/generators/Methods/TestMethodOptions.cs +0 -15
  1046. data/tracks/csharp/generators/Methods/TestMethodRenderer.cs +0 -26
  1047. data/tracks/csharp/generators/Methods/TestedMethodNameTransformer.cs +0 -9
  1048. data/tracks/groovy/exercises/roman-numerals/RomanTest.groovy +0 -96
  1049. data/tracks/java/exercises/hello-world/GETTING_STARTED.md +0 -54
  1050. data/tracks/java/exercises/hello-world/HINT.md +0 -7
  1051. data/tracks/java/exercises/hello-world/src/example/java/HelloWorld.java +0 -9
  1052. data/tracks/java/exercises/hello-world/src/test/java/HelloWorldTest.java +0 -32
  1053. data/tracks/kotlin/exercises/allergies/src/example/kotlin/Allergen.kt +0 -10
@@ -1,4 +1,5 @@
1
- using System;
1
+ // This file was auto-generated based on version 1.1.0 of the canonical data.
2
+
2
3
  using Xunit;
3
4
 
4
5
  public class AllYourBaseTest
@@ -6,197 +7,197 @@ public class AllYourBaseTest
6
7
  [Fact]
7
8
  public void Single_bit_one_to_decimal()
8
9
  {
9
- const int inputBase = 2;
10
- var inputDigits = new [] { 1 };
11
- const int outputBase = 10;
12
- var outputDigits = new [] { 1 };
13
- Assert.Equal(outputDigits, Base.Rebase(inputBase, inputDigits, outputBase));
10
+ var inputBase = 2;
11
+ var inputDigits = new[] { 1 };
12
+ var outputBase = 10;
13
+ var expected = new[] { 1 };
14
+ Assert.Equal(expected, AllYourBase.Rebase(inputBase, inputDigits, outputBase));
14
15
  }
15
16
 
16
17
  [Fact(Skip = "Remove to run test")]
17
18
  public void Binary_to_single_decimal()
18
19
  {
19
- const int inputBase = 2;
20
- var inputDigits = new [] { 1, 0, 1 };
21
- const int outputBase = 10;
22
- var outputDigits = new [] { 5 };
23
- Assert.Equal(outputDigits, Base.Rebase(inputBase, inputDigits, outputBase));
20
+ var inputBase = 2;
21
+ var inputDigits = new[] { 1, 0, 1 };
22
+ var outputBase = 10;
23
+ var expected = new[] { 5 };
24
+ Assert.Equal(expected, AllYourBase.Rebase(inputBase, inputDigits, outputBase));
24
25
  }
25
26
 
26
27
  [Fact(Skip = "Remove to run test")]
27
28
  public void Single_decimal_to_binary()
28
- {
29
- const int inputBase = 10;
30
- var inputDigits = new [] { 5 };
31
- const int outputBase = 2;
32
- var outputDigits = new [] { 1, 0, 1 };
33
- Assert.Equal(outputDigits, Base.Rebase(inputBase, inputDigits, outputBase));
29
+ {
30
+ var inputBase = 10;
31
+ var inputDigits = new[] { 5 };
32
+ var outputBase = 2;
33
+ var expected = new[] { 1, 0, 1 };
34
+ Assert.Equal(expected, AllYourBase.Rebase(inputBase, inputDigits, outputBase));
34
35
  }
35
36
 
36
37
  [Fact(Skip = "Remove to run test")]
37
38
  public void Binary_to_multiple_decimal()
38
39
  {
39
- const int inputBase = 2;
40
- var inputDigits = new [] { 1, 0, 1, 0, 1, 0 };
41
- const int outputBase = 10;
42
- var outputDigits = new [] { 4, 2 };
43
- Assert.Equal(outputDigits, Base.Rebase(inputBase, inputDigits, outputBase));
40
+ var inputBase = 2;
41
+ var inputDigits = new[] { 1, 0, 1, 0, 1, 0 };
42
+ var outputBase = 10;
43
+ var expected = new[] { 4, 2 };
44
+ Assert.Equal(expected, AllYourBase.Rebase(inputBase, inputDigits, outputBase));
44
45
  }
45
46
 
46
47
  [Fact(Skip = "Remove to run test")]
47
48
  public void Decimal_to_binary()
48
49
  {
49
- const int inputBase = 10;
50
- var inputDigits = new [] { 4, 2 };
51
- const int outputBase = 2;
52
- var outputDigits = new [] { 1, 0, 1, 0, 1, 0 };
53
- Assert.Equal(outputDigits, Base.Rebase(inputBase, inputDigits, outputBase));
50
+ var inputBase = 10;
51
+ var inputDigits = new[] { 4, 2 };
52
+ var outputBase = 2;
53
+ var expected = new[] { 1, 0, 1, 0, 1, 0 };
54
+ Assert.Equal(expected, AllYourBase.Rebase(inputBase, inputDigits, outputBase));
54
55
  }
55
56
 
56
57
  [Fact(Skip = "Remove to run test")]
57
58
  public void Trinary_to_hexadecimal()
58
59
  {
59
- const int inputBase = 3;
60
- var inputDigits = new [] { 1, 1, 2, 0 };
61
- const int outputBase = 16;
62
- var outputDigits = new [] { 2, 10 };
63
- Assert.Equal(outputDigits, Base.Rebase(inputBase, inputDigits, outputBase));
60
+ var inputBase = 3;
61
+ var inputDigits = new[] { 1, 1, 2, 0 };
62
+ var outputBase = 16;
63
+ var expected = new[] { 2, 10 };
64
+ Assert.Equal(expected, AllYourBase.Rebase(inputBase, inputDigits, outputBase));
64
65
  }
65
66
 
66
67
  [Fact(Skip = "Remove to run test")]
67
68
  public void Hexadecimal_to_trinary()
68
69
  {
69
- const int inputBase = 16;
70
- var inputDigits = new [] { 2, 10 };
71
- const int outputBase = 3;
72
- var outputDigits = new [] { 1, 1, 2, 0 };
73
- Assert.Equal(outputDigits, Base.Rebase(inputBase, inputDigits, outputBase));
70
+ var inputBase = 16;
71
+ var inputDigits = new[] { 2, 10 };
72
+ var outputBase = 3;
73
+ var expected = new[] { 1, 1, 2, 0 };
74
+ Assert.Equal(expected, AllYourBase.Rebase(inputBase, inputDigits, outputBase));
74
75
  }
75
76
 
76
77
  [Fact(Skip = "Remove to run test")]
77
- public void Using_15_bit_integer()
78
+ public void Number_15_bit_integer()
78
79
  {
79
- const int inputBase = 97;
80
- var inputDigits = new [] { 3, 46, 60 };
81
- const int outputBase = 73;
82
- var outputDigits = new [] { 6, 10, 45 };
83
- Assert.Equal(outputDigits, Base.Rebase(inputBase, inputDigits, outputBase));
80
+ var inputBase = 97;
81
+ var inputDigits = new[] { 3, 46, 60 };
82
+ var outputBase = 73;
83
+ var expected = new[] { 6, 10, 45 };
84
+ Assert.Equal(expected, AllYourBase.Rebase(inputBase, inputDigits, outputBase));
84
85
  }
85
86
 
86
87
  [Fact(Skip = "Remove to run test")]
87
- public void Empty_array()
88
+ public void Empty_list()
88
89
  {
89
- const int inputBase = 2;
90
+ var inputBase = 2;
90
91
  var inputDigits = new int[0];
91
- const int outputBase = 10;
92
- Assert.Throws<ArgumentException>(() => Base.Rebase(inputBase, inputDigits, outputBase));
92
+ var outputBase = 10;
93
+ Assert.Throws<System.ArgumentException>(() => AllYourBase.Rebase(inputBase, inputDigits, outputBase));
93
94
  }
94
95
 
95
96
  [Fact(Skip = "Remove to run test")]
96
97
  public void Single_zero()
97
98
  {
98
- const int inputBase = 10;
99
- var inputDigits = new [] { 0 };
100
- const int outputBase = 2;
101
- Assert.Throws<ArgumentException>(() => Base.Rebase(inputBase, inputDigits, outputBase));
99
+ var inputBase = 10;
100
+ var inputDigits = new[] { 0 };
101
+ var outputBase = 2;
102
+ Assert.Throws<System.ArgumentException>(() => AllYourBase.Rebase(inputBase, inputDigits, outputBase));
102
103
  }
103
104
 
104
105
  [Fact(Skip = "Remove to run test")]
105
106
  public void Multiple_zeros()
106
107
  {
107
- const int inputBase = 10;
108
- var inputDigits = new [] { 0, 0, 0 };
109
- const int outputBase = 2;
110
- Assert.Throws<ArgumentException>(() => Base.Rebase(inputBase, inputDigits, outputBase));
108
+ var inputBase = 10;
109
+ var inputDigits = new[] { 0, 0, 0 };
110
+ var outputBase = 2;
111
+ Assert.Throws<System.ArgumentException>(() => AllYourBase.Rebase(inputBase, inputDigits, outputBase));
111
112
  }
112
113
 
113
114
  [Fact(Skip = "Remove to run test")]
114
115
  public void Leading_zeros()
115
116
  {
116
- const int inputBase = 7;
117
- var inputDigits = new [] { 0, 6, 0 };
118
- const int outputBase = 10;
119
- Assert.Throws<ArgumentException>(() => Base.Rebase(inputBase, inputDigits, outputBase));
117
+ var inputBase = 7;
118
+ var inputDigits = new[] { 0, 6, 0 };
119
+ var outputBase = 10;
120
+ Assert.Throws<System.ArgumentException>(() => AllYourBase.Rebase(inputBase, inputDigits, outputBase));
120
121
  }
121
122
 
122
123
  [Fact(Skip = "Remove to run test")]
123
- public void Negative_digit()
124
+ public void First_base_is_one()
124
125
  {
125
- const int inputBase = 2;
126
- var inputDigits = new [] { 1, -1, 1, 0, 1, 0 };
127
- const int outputBase = 10;
128
- Assert.Throws<ArgumentException>(() => Base.Rebase(inputBase, inputDigits, outputBase));
126
+ var inputBase = 1;
127
+ var inputDigits = new int[0];
128
+ var outputBase = 10;
129
+ Assert.Throws<System.ArgumentException>(() => AllYourBase.Rebase(inputBase, inputDigits, outputBase));
129
130
  }
130
131
 
131
132
  [Fact(Skip = "Remove to run test")]
132
- public void Invalid_positive_digit()
133
+ public void First_base_is_zero()
133
134
  {
134
- const int inputBase = 2;
135
- var inputDigits = new [] { 1, 2, 1, 0, 1, 0 };
136
- const int outputBase = 10;
137
- Assert.Throws<ArgumentException>(() => Base.Rebase(inputBase, inputDigits, outputBase));
135
+ var inputBase = 0;
136
+ var inputDigits = new int[0];
137
+ var outputBase = 10;
138
+ Assert.Throws<System.ArgumentException>(() => AllYourBase.Rebase(inputBase, inputDigits, outputBase));
138
139
  }
139
140
 
140
141
  [Fact(Skip = "Remove to run test")]
141
- public void First_base_is_one()
142
+ public void First_base_is_negative()
142
143
  {
143
- const int inputBase = 1;
144
- var inputDigits = new[] { 1, 0, 1, 0, 1, 0 };
145
- const int outputBase = 10;
146
- Assert.Throws<ArgumentException>(() => Base.Rebase(inputBase, inputDigits, outputBase));
144
+ var inputBase = -2;
145
+ var inputDigits = new[] { 1 };
146
+ var outputBase = 10;
147
+ Assert.Throws<System.ArgumentException>(() => AllYourBase.Rebase(inputBase, inputDigits, outputBase));
147
148
  }
148
149
 
149
150
  [Fact(Skip = "Remove to run test")]
150
- public void Second_base_is_one()
151
+ public void Negative_digit()
151
152
  {
152
- const int inputBase = 2;
153
- var inputDigits = new [] { 1, 0, 1, 0, 1, 0 };
154
- const int outputBase = 1;
155
- Assert.Throws<ArgumentException>(() => Base.Rebase(inputBase, inputDigits, outputBase));
153
+ var inputBase = 2;
154
+ var inputDigits = new[] { 1, -1, 1, 0, 1, 0 };
155
+ var outputBase = 10;
156
+ Assert.Throws<System.ArgumentException>(() => AllYourBase.Rebase(inputBase, inputDigits, outputBase));
156
157
  }
157
158
 
158
159
  [Fact(Skip = "Remove to run test")]
159
- public void First_base_is_zero()
160
+ public void Invalid_positive_digit()
160
161
  {
161
- const int inputBase = 0;
162
- var inputDigits = new int[0];
163
- const int outputBase = 10;
164
- Assert.Throws<ArgumentException>(() => Base.Rebase(inputBase, inputDigits, outputBase));
162
+ var inputBase = 2;
163
+ var inputDigits = new[] { 1, 2, 1, 0, 1, 0 };
164
+ var outputBase = 10;
165
+ Assert.Throws<System.ArgumentException>(() => AllYourBase.Rebase(inputBase, inputDigits, outputBase));
165
166
  }
166
167
 
167
168
  [Fact(Skip = "Remove to run test")]
168
- public void Second_base_is_zero()
169
+ public void Second_base_is_one()
169
170
  {
170
- const int inputBase = 10;
171
- var inputDigits = new [] { 7 };
172
- const int outputBase = 0;
173
- Assert.Throws<ArgumentException>(() => Base.Rebase(inputBase, inputDigits, outputBase));
171
+ var inputBase = 2;
172
+ var inputDigits = new[] { 1, 0, 1, 0, 1, 0 };
173
+ var outputBase = 1;
174
+ Assert.Throws<System.ArgumentException>(() => AllYourBase.Rebase(inputBase, inputDigits, outputBase));
174
175
  }
175
176
 
176
177
  [Fact(Skip = "Remove to run test")]
177
- public void First_base_is_negative()
178
+ public void Second_base_is_zero()
178
179
  {
179
- const int inputBase = -2;
180
- var inputDigits = new [] { 1 };
181
- const int outputBase = 10;
182
- Assert.Throws<ArgumentException>(() => Base.Rebase(inputBase, inputDigits, outputBase));
180
+ var inputBase = 10;
181
+ var inputDigits = new[] { 7 };
182
+ var outputBase = 0;
183
+ Assert.Throws<System.ArgumentException>(() => AllYourBase.Rebase(inputBase, inputDigits, outputBase));
183
184
  }
184
185
 
185
186
  [Fact(Skip = "Remove to run test")]
186
187
  public void Second_base_is_negative()
187
188
  {
188
- const int inputBase = 2;
189
- var inputDigits = new [] { 1 };
190
- const int outputBase = -7;
191
- Assert.Throws<ArgumentException>(() => Base.Rebase(inputBase, inputDigits, outputBase));
189
+ var inputBase = 2;
190
+ var inputDigits = new[] { 1 };
191
+ var outputBase = -7;
192
+ Assert.Throws<System.ArgumentException>(() => AllYourBase.Rebase(inputBase, inputDigits, outputBase));
192
193
  }
193
194
 
194
195
  [Fact(Skip = "Remove to run test")]
195
196
  public void Both_bases_are_negative()
196
197
  {
197
- const int inputBase = -2;
198
- var inputDigits = new [] { 1 };
199
- const int outputBase = -7;
200
- Assert.Throws<ArgumentException>(() => Base.Rebase(inputBase, inputDigits, outputBase));
198
+ var inputBase = -2;
199
+ var inputDigits = new[] { 1 };
200
+ var outputBase = -7;
201
+ Assert.Throws<System.ArgumentException>(() => AllYourBase.Rebase(inputBase, inputDigits, outputBase));
201
202
  }
202
203
  }
@@ -2,7 +2,7 @@
2
2
  using System.Collections.Generic;
3
3
  using System.Linq;
4
4
 
5
- public static class Base
5
+ public static class AllYourBase
6
6
  {
7
7
  public static int[] Rebase(int inputBase, int[] inputDigits, int outputBase)
8
8
  {
@@ -8,8 +8,8 @@ public class BeerSongTest
8
8
  public void First_generic_verse()
9
9
  {
10
10
  var expected =
11
- "99 bottles of beer on the wall, 99 bottles of beer.\n"+
12
- "Take one down and pass it around, 98 bottles of beer on the wall.\n"+
11
+ "99 bottles of beer on the wall, 99 bottles of beer.\n" +
12
+ "Take one down and pass it around, 98 bottles of beer on the wall.\n" +
13
13
  "";
14
14
  Assert.Equal(expected, BeerSong.Verse(99));
15
15
  }
@@ -18,8 +18,8 @@ public void First_generic_verse()
18
18
  public void Last_generic_verse()
19
19
  {
20
20
  var expected =
21
- "3 bottles of beer on the wall, 3 bottles of beer.\n"+
22
- "Take one down and pass it around, 2 bottles of beer on the wall.\n"+
21
+ "3 bottles of beer on the wall, 3 bottles of beer.\n" +
22
+ "Take one down and pass it around, 2 bottles of beer on the wall.\n" +
23
23
  "";
24
24
  Assert.Equal(expected, BeerSong.Verse(3));
25
25
  }
@@ -28,8 +28,8 @@ public void Last_generic_verse()
28
28
  public void Verse_2()
29
29
  {
30
30
  var expected =
31
- "2 bottles of beer on the wall, 2 bottles of beer.\n"+
32
- "Take one down and pass it around, 1 bottle of beer on the wall.\n"+
31
+ "2 bottles of beer on the wall, 2 bottles of beer.\n" +
32
+ "Take one down and pass it around, 1 bottle of beer on the wall.\n" +
33
33
  "";
34
34
  Assert.Equal(expected, BeerSong.Verse(2));
35
35
  }
@@ -38,8 +38,8 @@ public void Verse_2()
38
38
  public void Verse_1()
39
39
  {
40
40
  var expected =
41
- "1 bottle of beer on the wall, 1 bottle of beer.\n"+
42
- "Take it down and pass it around, no more bottles of beer on the wall.\n"+
41
+ "1 bottle of beer on the wall, 1 bottle of beer.\n" +
42
+ "Take it down and pass it around, no more bottles of beer on the wall.\n" +
43
43
  "";
44
44
  Assert.Equal(expected, BeerSong.Verse(1));
45
45
  }
@@ -48,8 +48,8 @@ public void Verse_1()
48
48
  public void Verse_0()
49
49
  {
50
50
  var expected =
51
- "No more bottles of beer on the wall, no more bottles of beer.\n"+
52
- "Go to the store and buy some more, 99 bottles of beer on the wall.\n"+
51
+ "No more bottles of beer on the wall, no more bottles of beer.\n" +
52
+ "Go to the store and buy some more, 99 bottles of beer on the wall.\n" +
53
53
  "";
54
54
  Assert.Equal(expected, BeerSong.Verse(0));
55
55
  }
@@ -58,11 +58,11 @@ public void Verse_0()
58
58
  public void First_two_verses()
59
59
  {
60
60
  var expected =
61
- "99 bottles of beer on the wall, 99 bottles of beer.\n"+
62
- "Take one down and pass it around, 98 bottles of beer on the wall.\n"+
63
- "\n"+
64
- "98 bottles of beer on the wall, 98 bottles of beer.\n"+
65
- "Take one down and pass it around, 97 bottles of beer on the wall.\n"+
61
+ "99 bottles of beer on the wall, 99 bottles of beer.\n" +
62
+ "Take one down and pass it around, 98 bottles of beer on the wall.\n" +
63
+ "\n" +
64
+ "98 bottles of beer on the wall, 98 bottles of beer.\n" +
65
+ "Take one down and pass it around, 97 bottles of beer on the wall.\n" +
66
66
  "";
67
67
  Assert.Equal(expected, BeerSong.Verses(99, 98));
68
68
  }
@@ -71,14 +71,14 @@ public void First_two_verses()
71
71
  public void Last_three_verses()
72
72
  {
73
73
  var expected =
74
- "2 bottles of beer on the wall, 2 bottles of beer.\n"+
75
- "Take one down and pass it around, 1 bottle of beer on the wall.\n"+
76
- "\n"+
77
- "1 bottle of beer on the wall, 1 bottle of beer.\n"+
78
- "Take it down and pass it around, no more bottles of beer on the wall.\n"+
79
- "\n"+
80
- "No more bottles of beer on the wall, no more bottles of beer.\n"+
81
- "Go to the store and buy some more, 99 bottles of beer on the wall.\n"+
74
+ "2 bottles of beer on the wall, 2 bottles of beer.\n" +
75
+ "Take one down and pass it around, 1 bottle of beer on the wall.\n" +
76
+ "\n" +
77
+ "1 bottle of beer on the wall, 1 bottle of beer.\n" +
78
+ "Take it down and pass it around, no more bottles of beer on the wall.\n" +
79
+ "\n" +
80
+ "No more bottles of beer on the wall, no more bottles of beer.\n" +
81
+ "Go to the store and buy some more, 99 bottles of beer on the wall.\n" +
82
82
  "";
83
83
  Assert.Equal(expected, BeerSong.Verses(2, 0));
84
84
  }
@@ -87,305 +87,305 @@ public void Last_three_verses()
87
87
  public void All_verses()
88
88
  {
89
89
  var expected =
90
- "99 bottles of beer on the wall, 99 bottles of beer.\n"+
91
- "Take one down and pass it around, 98 bottles of beer on the wall.\n"+
92
- "\n"+
93
- "98 bottles of beer on the wall, 98 bottles of beer.\n"+
94
- "Take one down and pass it around, 97 bottles of beer on the wall.\n"+
95
- "\n"+
96
- "97 bottles of beer on the wall, 97 bottles of beer.\n"+
97
- "Take one down and pass it around, 96 bottles of beer on the wall.\n"+
98
- "\n"+
99
- "96 bottles of beer on the wall, 96 bottles of beer.\n"+
100
- "Take one down and pass it around, 95 bottles of beer on the wall.\n"+
101
- "\n"+
102
- "95 bottles of beer on the wall, 95 bottles of beer.\n"+
103
- "Take one down and pass it around, 94 bottles of beer on the wall.\n"+
104
- "\n"+
105
- "94 bottles of beer on the wall, 94 bottles of beer.\n"+
106
- "Take one down and pass it around, 93 bottles of beer on the wall.\n"+
107
- "\n"+
108
- "93 bottles of beer on the wall, 93 bottles of beer.\n"+
109
- "Take one down and pass it around, 92 bottles of beer on the wall.\n"+
110
- "\n"+
111
- "92 bottles of beer on the wall, 92 bottles of beer.\n"+
112
- "Take one down and pass it around, 91 bottles of beer on the wall.\n"+
113
- "\n"+
114
- "91 bottles of beer on the wall, 91 bottles of beer.\n"+
115
- "Take one down and pass it around, 90 bottles of beer on the wall.\n"+
116
- "\n"+
117
- "90 bottles of beer on the wall, 90 bottles of beer.\n"+
118
- "Take one down and pass it around, 89 bottles of beer on the wall.\n"+
119
- "\n"+
120
- "89 bottles of beer on the wall, 89 bottles of beer.\n"+
121
- "Take one down and pass it around, 88 bottles of beer on the wall.\n"+
122
- "\n"+
123
- "88 bottles of beer on the wall, 88 bottles of beer.\n"+
124
- "Take one down and pass it around, 87 bottles of beer on the wall.\n"+
125
- "\n"+
126
- "87 bottles of beer on the wall, 87 bottles of beer.\n"+
127
- "Take one down and pass it around, 86 bottles of beer on the wall.\n"+
128
- "\n"+
129
- "86 bottles of beer on the wall, 86 bottles of beer.\n"+
130
- "Take one down and pass it around, 85 bottles of beer on the wall.\n"+
131
- "\n"+
132
- "85 bottles of beer on the wall, 85 bottles of beer.\n"+
133
- "Take one down and pass it around, 84 bottles of beer on the wall.\n"+
134
- "\n"+
135
- "84 bottles of beer on the wall, 84 bottles of beer.\n"+
136
- "Take one down and pass it around, 83 bottles of beer on the wall.\n"+
137
- "\n"+
138
- "83 bottles of beer on the wall, 83 bottles of beer.\n"+
139
- "Take one down and pass it around, 82 bottles of beer on the wall.\n"+
140
- "\n"+
141
- "82 bottles of beer on the wall, 82 bottles of beer.\n"+
142
- "Take one down and pass it around, 81 bottles of beer on the wall.\n"+
143
- "\n"+
144
- "81 bottles of beer on the wall, 81 bottles of beer.\n"+
145
- "Take one down and pass it around, 80 bottles of beer on the wall.\n"+
146
- "\n"+
147
- "80 bottles of beer on the wall, 80 bottles of beer.\n"+
148
- "Take one down and pass it around, 79 bottles of beer on the wall.\n"+
149
- "\n"+
150
- "79 bottles of beer on the wall, 79 bottles of beer.\n"+
151
- "Take one down and pass it around, 78 bottles of beer on the wall.\n"+
152
- "\n"+
153
- "78 bottles of beer on the wall, 78 bottles of beer.\n"+
154
- "Take one down and pass it around, 77 bottles of beer on the wall.\n"+
155
- "\n"+
156
- "77 bottles of beer on the wall, 77 bottles of beer.\n"+
157
- "Take one down and pass it around, 76 bottles of beer on the wall.\n"+
158
- "\n"+
159
- "76 bottles of beer on the wall, 76 bottles of beer.\n"+
160
- "Take one down and pass it around, 75 bottles of beer on the wall.\n"+
161
- "\n"+
162
- "75 bottles of beer on the wall, 75 bottles of beer.\n"+
163
- "Take one down and pass it around, 74 bottles of beer on the wall.\n"+
164
- "\n"+
165
- "74 bottles of beer on the wall, 74 bottles of beer.\n"+
166
- "Take one down and pass it around, 73 bottles of beer on the wall.\n"+
167
- "\n"+
168
- "73 bottles of beer on the wall, 73 bottles of beer.\n"+
169
- "Take one down and pass it around, 72 bottles of beer on the wall.\n"+
170
- "\n"+
171
- "72 bottles of beer on the wall, 72 bottles of beer.\n"+
172
- "Take one down and pass it around, 71 bottles of beer on the wall.\n"+
173
- "\n"+
174
- "71 bottles of beer on the wall, 71 bottles of beer.\n"+
175
- "Take one down and pass it around, 70 bottles of beer on the wall.\n"+
176
- "\n"+
177
- "70 bottles of beer on the wall, 70 bottles of beer.\n"+
178
- "Take one down and pass it around, 69 bottles of beer on the wall.\n"+
179
- "\n"+
180
- "69 bottles of beer on the wall, 69 bottles of beer.\n"+
181
- "Take one down and pass it around, 68 bottles of beer on the wall.\n"+
182
- "\n"+
183
- "68 bottles of beer on the wall, 68 bottles of beer.\n"+
184
- "Take one down and pass it around, 67 bottles of beer on the wall.\n"+
185
- "\n"+
186
- "67 bottles of beer on the wall, 67 bottles of beer.\n"+
187
- "Take one down and pass it around, 66 bottles of beer on the wall.\n"+
188
- "\n"+
189
- "66 bottles of beer on the wall, 66 bottles of beer.\n"+
190
- "Take one down and pass it around, 65 bottles of beer on the wall.\n"+
191
- "\n"+
192
- "65 bottles of beer on the wall, 65 bottles of beer.\n"+
193
- "Take one down and pass it around, 64 bottles of beer on the wall.\n"+
194
- "\n"+
195
- "64 bottles of beer on the wall, 64 bottles of beer.\n"+
196
- "Take one down and pass it around, 63 bottles of beer on the wall.\n"+
197
- "\n"+
198
- "63 bottles of beer on the wall, 63 bottles of beer.\n"+
199
- "Take one down and pass it around, 62 bottles of beer on the wall.\n"+
200
- "\n"+
201
- "62 bottles of beer on the wall, 62 bottles of beer.\n"+
202
- "Take one down and pass it around, 61 bottles of beer on the wall.\n"+
203
- "\n"+
204
- "61 bottles of beer on the wall, 61 bottles of beer.\n"+
205
- "Take one down and pass it around, 60 bottles of beer on the wall.\n"+
206
- "\n"+
207
- "60 bottles of beer on the wall, 60 bottles of beer.\n"+
208
- "Take one down and pass it around, 59 bottles of beer on the wall.\n"+
209
- "\n"+
210
- "59 bottles of beer on the wall, 59 bottles of beer.\n"+
211
- "Take one down and pass it around, 58 bottles of beer on the wall.\n"+
212
- "\n"+
213
- "58 bottles of beer on the wall, 58 bottles of beer.\n"+
214
- "Take one down and pass it around, 57 bottles of beer on the wall.\n"+
215
- "\n"+
216
- "57 bottles of beer on the wall, 57 bottles of beer.\n"+
217
- "Take one down and pass it around, 56 bottles of beer on the wall.\n"+
218
- "\n"+
219
- "56 bottles of beer on the wall, 56 bottles of beer.\n"+
220
- "Take one down and pass it around, 55 bottles of beer on the wall.\n"+
221
- "\n"+
222
- "55 bottles of beer on the wall, 55 bottles of beer.\n"+
223
- "Take one down and pass it around, 54 bottles of beer on the wall.\n"+
224
- "\n"+
225
- "54 bottles of beer on the wall, 54 bottles of beer.\n"+
226
- "Take one down and pass it around, 53 bottles of beer on the wall.\n"+
227
- "\n"+
228
- "53 bottles of beer on the wall, 53 bottles of beer.\n"+
229
- "Take one down and pass it around, 52 bottles of beer on the wall.\n"+
230
- "\n"+
231
- "52 bottles of beer on the wall, 52 bottles of beer.\n"+
232
- "Take one down and pass it around, 51 bottles of beer on the wall.\n"+
233
- "\n"+
234
- "51 bottles of beer on the wall, 51 bottles of beer.\n"+
235
- "Take one down and pass it around, 50 bottles of beer on the wall.\n"+
236
- "\n"+
237
- "50 bottles of beer on the wall, 50 bottles of beer.\n"+
238
- "Take one down and pass it around, 49 bottles of beer on the wall.\n"+
239
- "\n"+
240
- "49 bottles of beer on the wall, 49 bottles of beer.\n"+
241
- "Take one down and pass it around, 48 bottles of beer on the wall.\n"+
242
- "\n"+
243
- "48 bottles of beer on the wall, 48 bottles of beer.\n"+
244
- "Take one down and pass it around, 47 bottles of beer on the wall.\n"+
245
- "\n"+
246
- "47 bottles of beer on the wall, 47 bottles of beer.\n"+
247
- "Take one down and pass it around, 46 bottles of beer on the wall.\n"+
248
- "\n"+
249
- "46 bottles of beer on the wall, 46 bottles of beer.\n"+
250
- "Take one down and pass it around, 45 bottles of beer on the wall.\n"+
251
- "\n"+
252
- "45 bottles of beer on the wall, 45 bottles of beer.\n"+
253
- "Take one down and pass it around, 44 bottles of beer on the wall.\n"+
254
- "\n"+
255
- "44 bottles of beer on the wall, 44 bottles of beer.\n"+
256
- "Take one down and pass it around, 43 bottles of beer on the wall.\n"+
257
- "\n"+
258
- "43 bottles of beer on the wall, 43 bottles of beer.\n"+
259
- "Take one down and pass it around, 42 bottles of beer on the wall.\n"+
260
- "\n"+
261
- "42 bottles of beer on the wall, 42 bottles of beer.\n"+
262
- "Take one down and pass it around, 41 bottles of beer on the wall.\n"+
263
- "\n"+
264
- "41 bottles of beer on the wall, 41 bottles of beer.\n"+
265
- "Take one down and pass it around, 40 bottles of beer on the wall.\n"+
266
- "\n"+
267
- "40 bottles of beer on the wall, 40 bottles of beer.\n"+
268
- "Take one down and pass it around, 39 bottles of beer on the wall.\n"+
269
- "\n"+
270
- "39 bottles of beer on the wall, 39 bottles of beer.\n"+
271
- "Take one down and pass it around, 38 bottles of beer on the wall.\n"+
272
- "\n"+
273
- "38 bottles of beer on the wall, 38 bottles of beer.\n"+
274
- "Take one down and pass it around, 37 bottles of beer on the wall.\n"+
275
- "\n"+
276
- "37 bottles of beer on the wall, 37 bottles of beer.\n"+
277
- "Take one down and pass it around, 36 bottles of beer on the wall.\n"+
278
- "\n"+
279
- "36 bottles of beer on the wall, 36 bottles of beer.\n"+
280
- "Take one down and pass it around, 35 bottles of beer on the wall.\n"+
281
- "\n"+
282
- "35 bottles of beer on the wall, 35 bottles of beer.\n"+
283
- "Take one down and pass it around, 34 bottles of beer on the wall.\n"+
284
- "\n"+
285
- "34 bottles of beer on the wall, 34 bottles of beer.\n"+
286
- "Take one down and pass it around, 33 bottles of beer on the wall.\n"+
287
- "\n"+
288
- "33 bottles of beer on the wall, 33 bottles of beer.\n"+
289
- "Take one down and pass it around, 32 bottles of beer on the wall.\n"+
290
- "\n"+
291
- "32 bottles of beer on the wall, 32 bottles of beer.\n"+
292
- "Take one down and pass it around, 31 bottles of beer on the wall.\n"+
293
- "\n"+
294
- "31 bottles of beer on the wall, 31 bottles of beer.\n"+
295
- "Take one down and pass it around, 30 bottles of beer on the wall.\n"+
296
- "\n"+
297
- "30 bottles of beer on the wall, 30 bottles of beer.\n"+
298
- "Take one down and pass it around, 29 bottles of beer on the wall.\n"+
299
- "\n"+
300
- "29 bottles of beer on the wall, 29 bottles of beer.\n"+
301
- "Take one down and pass it around, 28 bottles of beer on the wall.\n"+
302
- "\n"+
303
- "28 bottles of beer on the wall, 28 bottles of beer.\n"+
304
- "Take one down and pass it around, 27 bottles of beer on the wall.\n"+
305
- "\n"+
306
- "27 bottles of beer on the wall, 27 bottles of beer.\n"+
307
- "Take one down and pass it around, 26 bottles of beer on the wall.\n"+
308
- "\n"+
309
- "26 bottles of beer on the wall, 26 bottles of beer.\n"+
310
- "Take one down and pass it around, 25 bottles of beer on the wall.\n"+
311
- "\n"+
312
- "25 bottles of beer on the wall, 25 bottles of beer.\n"+
313
- "Take one down and pass it around, 24 bottles of beer on the wall.\n"+
314
- "\n"+
315
- "24 bottles of beer on the wall, 24 bottles of beer.\n"+
316
- "Take one down and pass it around, 23 bottles of beer on the wall.\n"+
317
- "\n"+
318
- "23 bottles of beer on the wall, 23 bottles of beer.\n"+
319
- "Take one down and pass it around, 22 bottles of beer on the wall.\n"+
320
- "\n"+
321
- "22 bottles of beer on the wall, 22 bottles of beer.\n"+
322
- "Take one down and pass it around, 21 bottles of beer on the wall.\n"+
323
- "\n"+
324
- "21 bottles of beer on the wall, 21 bottles of beer.\n"+
325
- "Take one down and pass it around, 20 bottles of beer on the wall.\n"+
326
- "\n"+
327
- "20 bottles of beer on the wall, 20 bottles of beer.\n"+
328
- "Take one down and pass it around, 19 bottles of beer on the wall.\n"+
329
- "\n"+
330
- "19 bottles of beer on the wall, 19 bottles of beer.\n"+
331
- "Take one down and pass it around, 18 bottles of beer on the wall.\n"+
332
- "\n"+
333
- "18 bottles of beer on the wall, 18 bottles of beer.\n"+
334
- "Take one down and pass it around, 17 bottles of beer on the wall.\n"+
335
- "\n"+
336
- "17 bottles of beer on the wall, 17 bottles of beer.\n"+
337
- "Take one down and pass it around, 16 bottles of beer on the wall.\n"+
338
- "\n"+
339
- "16 bottles of beer on the wall, 16 bottles of beer.\n"+
340
- "Take one down and pass it around, 15 bottles of beer on the wall.\n"+
341
- "\n"+
342
- "15 bottles of beer on the wall, 15 bottles of beer.\n"+
343
- "Take one down and pass it around, 14 bottles of beer on the wall.\n"+
344
- "\n"+
345
- "14 bottles of beer on the wall, 14 bottles of beer.\n"+
346
- "Take one down and pass it around, 13 bottles of beer on the wall.\n"+
347
- "\n"+
348
- "13 bottles of beer on the wall, 13 bottles of beer.\n"+
349
- "Take one down and pass it around, 12 bottles of beer on the wall.\n"+
350
- "\n"+
351
- "12 bottles of beer on the wall, 12 bottles of beer.\n"+
352
- "Take one down and pass it around, 11 bottles of beer on the wall.\n"+
353
- "\n"+
354
- "11 bottles of beer on the wall, 11 bottles of beer.\n"+
355
- "Take one down and pass it around, 10 bottles of beer on the wall.\n"+
356
- "\n"+
357
- "10 bottles of beer on the wall, 10 bottles of beer.\n"+
358
- "Take one down and pass it around, 9 bottles of beer on the wall.\n"+
359
- "\n"+
360
- "9 bottles of beer on the wall, 9 bottles of beer.\n"+
361
- "Take one down and pass it around, 8 bottles of beer on the wall.\n"+
362
- "\n"+
363
- "8 bottles of beer on the wall, 8 bottles of beer.\n"+
364
- "Take one down and pass it around, 7 bottles of beer on the wall.\n"+
365
- "\n"+
366
- "7 bottles of beer on the wall, 7 bottles of beer.\n"+
367
- "Take one down and pass it around, 6 bottles of beer on the wall.\n"+
368
- "\n"+
369
- "6 bottles of beer on the wall, 6 bottles of beer.\n"+
370
- "Take one down and pass it around, 5 bottles of beer on the wall.\n"+
371
- "\n"+
372
- "5 bottles of beer on the wall, 5 bottles of beer.\n"+
373
- "Take one down and pass it around, 4 bottles of beer on the wall.\n"+
374
- "\n"+
375
- "4 bottles of beer on the wall, 4 bottles of beer.\n"+
376
- "Take one down and pass it around, 3 bottles of beer on the wall.\n"+
377
- "\n"+
378
- "3 bottles of beer on the wall, 3 bottles of beer.\n"+
379
- "Take one down and pass it around, 2 bottles of beer on the wall.\n"+
380
- "\n"+
381
- "2 bottles of beer on the wall, 2 bottles of beer.\n"+
382
- "Take one down and pass it around, 1 bottle of beer on the wall.\n"+
383
- "\n"+
384
- "1 bottle of beer on the wall, 1 bottle of beer.\n"+
385
- "Take it down and pass it around, no more bottles of beer on the wall.\n"+
386
- "\n"+
387
- "No more bottles of beer on the wall, no more bottles of beer.\n"+
388
- "Go to the store and buy some more, 99 bottles of beer on the wall.\n"+
90
+ "99 bottles of beer on the wall, 99 bottles of beer.\n" +
91
+ "Take one down and pass it around, 98 bottles of beer on the wall.\n" +
92
+ "\n" +
93
+ "98 bottles of beer on the wall, 98 bottles of beer.\n" +
94
+ "Take one down and pass it around, 97 bottles of beer on the wall.\n" +
95
+ "\n" +
96
+ "97 bottles of beer on the wall, 97 bottles of beer.\n" +
97
+ "Take one down and pass it around, 96 bottles of beer on the wall.\n" +
98
+ "\n" +
99
+ "96 bottles of beer on the wall, 96 bottles of beer.\n" +
100
+ "Take one down and pass it around, 95 bottles of beer on the wall.\n" +
101
+ "\n" +
102
+ "95 bottles of beer on the wall, 95 bottles of beer.\n" +
103
+ "Take one down and pass it around, 94 bottles of beer on the wall.\n" +
104
+ "\n" +
105
+ "94 bottles of beer on the wall, 94 bottles of beer.\n" +
106
+ "Take one down and pass it around, 93 bottles of beer on the wall.\n" +
107
+ "\n" +
108
+ "93 bottles of beer on the wall, 93 bottles of beer.\n" +
109
+ "Take one down and pass it around, 92 bottles of beer on the wall.\n" +
110
+ "\n" +
111
+ "92 bottles of beer on the wall, 92 bottles of beer.\n" +
112
+ "Take one down and pass it around, 91 bottles of beer on the wall.\n" +
113
+ "\n" +
114
+ "91 bottles of beer on the wall, 91 bottles of beer.\n" +
115
+ "Take one down and pass it around, 90 bottles of beer on the wall.\n" +
116
+ "\n" +
117
+ "90 bottles of beer on the wall, 90 bottles of beer.\n" +
118
+ "Take one down and pass it around, 89 bottles of beer on the wall.\n" +
119
+ "\n" +
120
+ "89 bottles of beer on the wall, 89 bottles of beer.\n" +
121
+ "Take one down and pass it around, 88 bottles of beer on the wall.\n" +
122
+ "\n" +
123
+ "88 bottles of beer on the wall, 88 bottles of beer.\n" +
124
+ "Take one down and pass it around, 87 bottles of beer on the wall.\n" +
125
+ "\n" +
126
+ "87 bottles of beer on the wall, 87 bottles of beer.\n" +
127
+ "Take one down and pass it around, 86 bottles of beer on the wall.\n" +
128
+ "\n" +
129
+ "86 bottles of beer on the wall, 86 bottles of beer.\n" +
130
+ "Take one down and pass it around, 85 bottles of beer on the wall.\n" +
131
+ "\n" +
132
+ "85 bottles of beer on the wall, 85 bottles of beer.\n" +
133
+ "Take one down and pass it around, 84 bottles of beer on the wall.\n" +
134
+ "\n" +
135
+ "84 bottles of beer on the wall, 84 bottles of beer.\n" +
136
+ "Take one down and pass it around, 83 bottles of beer on the wall.\n" +
137
+ "\n" +
138
+ "83 bottles of beer on the wall, 83 bottles of beer.\n" +
139
+ "Take one down and pass it around, 82 bottles of beer on the wall.\n" +
140
+ "\n" +
141
+ "82 bottles of beer on the wall, 82 bottles of beer.\n" +
142
+ "Take one down and pass it around, 81 bottles of beer on the wall.\n" +
143
+ "\n" +
144
+ "81 bottles of beer on the wall, 81 bottles of beer.\n" +
145
+ "Take one down and pass it around, 80 bottles of beer on the wall.\n" +
146
+ "\n" +
147
+ "80 bottles of beer on the wall, 80 bottles of beer.\n" +
148
+ "Take one down and pass it around, 79 bottles of beer on the wall.\n" +
149
+ "\n" +
150
+ "79 bottles of beer on the wall, 79 bottles of beer.\n" +
151
+ "Take one down and pass it around, 78 bottles of beer on the wall.\n" +
152
+ "\n" +
153
+ "78 bottles of beer on the wall, 78 bottles of beer.\n" +
154
+ "Take one down and pass it around, 77 bottles of beer on the wall.\n" +
155
+ "\n" +
156
+ "77 bottles of beer on the wall, 77 bottles of beer.\n" +
157
+ "Take one down and pass it around, 76 bottles of beer on the wall.\n" +
158
+ "\n" +
159
+ "76 bottles of beer on the wall, 76 bottles of beer.\n" +
160
+ "Take one down and pass it around, 75 bottles of beer on the wall.\n" +
161
+ "\n" +
162
+ "75 bottles of beer on the wall, 75 bottles of beer.\n" +
163
+ "Take one down and pass it around, 74 bottles of beer on the wall.\n" +
164
+ "\n" +
165
+ "74 bottles of beer on the wall, 74 bottles of beer.\n" +
166
+ "Take one down and pass it around, 73 bottles of beer on the wall.\n" +
167
+ "\n" +
168
+ "73 bottles of beer on the wall, 73 bottles of beer.\n" +
169
+ "Take one down and pass it around, 72 bottles of beer on the wall.\n" +
170
+ "\n" +
171
+ "72 bottles of beer on the wall, 72 bottles of beer.\n" +
172
+ "Take one down and pass it around, 71 bottles of beer on the wall.\n" +
173
+ "\n" +
174
+ "71 bottles of beer on the wall, 71 bottles of beer.\n" +
175
+ "Take one down and pass it around, 70 bottles of beer on the wall.\n" +
176
+ "\n" +
177
+ "70 bottles of beer on the wall, 70 bottles of beer.\n" +
178
+ "Take one down and pass it around, 69 bottles of beer on the wall.\n" +
179
+ "\n" +
180
+ "69 bottles of beer on the wall, 69 bottles of beer.\n" +
181
+ "Take one down and pass it around, 68 bottles of beer on the wall.\n" +
182
+ "\n" +
183
+ "68 bottles of beer on the wall, 68 bottles of beer.\n" +
184
+ "Take one down and pass it around, 67 bottles of beer on the wall.\n" +
185
+ "\n" +
186
+ "67 bottles of beer on the wall, 67 bottles of beer.\n" +
187
+ "Take one down and pass it around, 66 bottles of beer on the wall.\n" +
188
+ "\n" +
189
+ "66 bottles of beer on the wall, 66 bottles of beer.\n" +
190
+ "Take one down and pass it around, 65 bottles of beer on the wall.\n" +
191
+ "\n" +
192
+ "65 bottles of beer on the wall, 65 bottles of beer.\n" +
193
+ "Take one down and pass it around, 64 bottles of beer on the wall.\n" +
194
+ "\n" +
195
+ "64 bottles of beer on the wall, 64 bottles of beer.\n" +
196
+ "Take one down and pass it around, 63 bottles of beer on the wall.\n" +
197
+ "\n" +
198
+ "63 bottles of beer on the wall, 63 bottles of beer.\n" +
199
+ "Take one down and pass it around, 62 bottles of beer on the wall.\n" +
200
+ "\n" +
201
+ "62 bottles of beer on the wall, 62 bottles of beer.\n" +
202
+ "Take one down and pass it around, 61 bottles of beer on the wall.\n" +
203
+ "\n" +
204
+ "61 bottles of beer on the wall, 61 bottles of beer.\n" +
205
+ "Take one down and pass it around, 60 bottles of beer on the wall.\n" +
206
+ "\n" +
207
+ "60 bottles of beer on the wall, 60 bottles of beer.\n" +
208
+ "Take one down and pass it around, 59 bottles of beer on the wall.\n" +
209
+ "\n" +
210
+ "59 bottles of beer on the wall, 59 bottles of beer.\n" +
211
+ "Take one down and pass it around, 58 bottles of beer on the wall.\n" +
212
+ "\n" +
213
+ "58 bottles of beer on the wall, 58 bottles of beer.\n" +
214
+ "Take one down and pass it around, 57 bottles of beer on the wall.\n" +
215
+ "\n" +
216
+ "57 bottles of beer on the wall, 57 bottles of beer.\n" +
217
+ "Take one down and pass it around, 56 bottles of beer on the wall.\n" +
218
+ "\n" +
219
+ "56 bottles of beer on the wall, 56 bottles of beer.\n" +
220
+ "Take one down and pass it around, 55 bottles of beer on the wall.\n" +
221
+ "\n" +
222
+ "55 bottles of beer on the wall, 55 bottles of beer.\n" +
223
+ "Take one down and pass it around, 54 bottles of beer on the wall.\n" +
224
+ "\n" +
225
+ "54 bottles of beer on the wall, 54 bottles of beer.\n" +
226
+ "Take one down and pass it around, 53 bottles of beer on the wall.\n" +
227
+ "\n" +
228
+ "53 bottles of beer on the wall, 53 bottles of beer.\n" +
229
+ "Take one down and pass it around, 52 bottles of beer on the wall.\n" +
230
+ "\n" +
231
+ "52 bottles of beer on the wall, 52 bottles of beer.\n" +
232
+ "Take one down and pass it around, 51 bottles of beer on the wall.\n" +
233
+ "\n" +
234
+ "51 bottles of beer on the wall, 51 bottles of beer.\n" +
235
+ "Take one down and pass it around, 50 bottles of beer on the wall.\n" +
236
+ "\n" +
237
+ "50 bottles of beer on the wall, 50 bottles of beer.\n" +
238
+ "Take one down and pass it around, 49 bottles of beer on the wall.\n" +
239
+ "\n" +
240
+ "49 bottles of beer on the wall, 49 bottles of beer.\n" +
241
+ "Take one down and pass it around, 48 bottles of beer on the wall.\n" +
242
+ "\n" +
243
+ "48 bottles of beer on the wall, 48 bottles of beer.\n" +
244
+ "Take one down and pass it around, 47 bottles of beer on the wall.\n" +
245
+ "\n" +
246
+ "47 bottles of beer on the wall, 47 bottles of beer.\n" +
247
+ "Take one down and pass it around, 46 bottles of beer on the wall.\n" +
248
+ "\n" +
249
+ "46 bottles of beer on the wall, 46 bottles of beer.\n" +
250
+ "Take one down and pass it around, 45 bottles of beer on the wall.\n" +
251
+ "\n" +
252
+ "45 bottles of beer on the wall, 45 bottles of beer.\n" +
253
+ "Take one down and pass it around, 44 bottles of beer on the wall.\n" +
254
+ "\n" +
255
+ "44 bottles of beer on the wall, 44 bottles of beer.\n" +
256
+ "Take one down and pass it around, 43 bottles of beer on the wall.\n" +
257
+ "\n" +
258
+ "43 bottles of beer on the wall, 43 bottles of beer.\n" +
259
+ "Take one down and pass it around, 42 bottles of beer on the wall.\n" +
260
+ "\n" +
261
+ "42 bottles of beer on the wall, 42 bottles of beer.\n" +
262
+ "Take one down and pass it around, 41 bottles of beer on the wall.\n" +
263
+ "\n" +
264
+ "41 bottles of beer on the wall, 41 bottles of beer.\n" +
265
+ "Take one down and pass it around, 40 bottles of beer on the wall.\n" +
266
+ "\n" +
267
+ "40 bottles of beer on the wall, 40 bottles of beer.\n" +
268
+ "Take one down and pass it around, 39 bottles of beer on the wall.\n" +
269
+ "\n" +
270
+ "39 bottles of beer on the wall, 39 bottles of beer.\n" +
271
+ "Take one down and pass it around, 38 bottles of beer on the wall.\n" +
272
+ "\n" +
273
+ "38 bottles of beer on the wall, 38 bottles of beer.\n" +
274
+ "Take one down and pass it around, 37 bottles of beer on the wall.\n" +
275
+ "\n" +
276
+ "37 bottles of beer on the wall, 37 bottles of beer.\n" +
277
+ "Take one down and pass it around, 36 bottles of beer on the wall.\n" +
278
+ "\n" +
279
+ "36 bottles of beer on the wall, 36 bottles of beer.\n" +
280
+ "Take one down and pass it around, 35 bottles of beer on the wall.\n" +
281
+ "\n" +
282
+ "35 bottles of beer on the wall, 35 bottles of beer.\n" +
283
+ "Take one down and pass it around, 34 bottles of beer on the wall.\n" +
284
+ "\n" +
285
+ "34 bottles of beer on the wall, 34 bottles of beer.\n" +
286
+ "Take one down and pass it around, 33 bottles of beer on the wall.\n" +
287
+ "\n" +
288
+ "33 bottles of beer on the wall, 33 bottles of beer.\n" +
289
+ "Take one down and pass it around, 32 bottles of beer on the wall.\n" +
290
+ "\n" +
291
+ "32 bottles of beer on the wall, 32 bottles of beer.\n" +
292
+ "Take one down and pass it around, 31 bottles of beer on the wall.\n" +
293
+ "\n" +
294
+ "31 bottles of beer on the wall, 31 bottles of beer.\n" +
295
+ "Take one down and pass it around, 30 bottles of beer on the wall.\n" +
296
+ "\n" +
297
+ "30 bottles of beer on the wall, 30 bottles of beer.\n" +
298
+ "Take one down and pass it around, 29 bottles of beer on the wall.\n" +
299
+ "\n" +
300
+ "29 bottles of beer on the wall, 29 bottles of beer.\n" +
301
+ "Take one down and pass it around, 28 bottles of beer on the wall.\n" +
302
+ "\n" +
303
+ "28 bottles of beer on the wall, 28 bottles of beer.\n" +
304
+ "Take one down and pass it around, 27 bottles of beer on the wall.\n" +
305
+ "\n" +
306
+ "27 bottles of beer on the wall, 27 bottles of beer.\n" +
307
+ "Take one down and pass it around, 26 bottles of beer on the wall.\n" +
308
+ "\n" +
309
+ "26 bottles of beer on the wall, 26 bottles of beer.\n" +
310
+ "Take one down and pass it around, 25 bottles of beer on the wall.\n" +
311
+ "\n" +
312
+ "25 bottles of beer on the wall, 25 bottles of beer.\n" +
313
+ "Take one down and pass it around, 24 bottles of beer on the wall.\n" +
314
+ "\n" +
315
+ "24 bottles of beer on the wall, 24 bottles of beer.\n" +
316
+ "Take one down and pass it around, 23 bottles of beer on the wall.\n" +
317
+ "\n" +
318
+ "23 bottles of beer on the wall, 23 bottles of beer.\n" +
319
+ "Take one down and pass it around, 22 bottles of beer on the wall.\n" +
320
+ "\n" +
321
+ "22 bottles of beer on the wall, 22 bottles of beer.\n" +
322
+ "Take one down and pass it around, 21 bottles of beer on the wall.\n" +
323
+ "\n" +
324
+ "21 bottles of beer on the wall, 21 bottles of beer.\n" +
325
+ "Take one down and pass it around, 20 bottles of beer on the wall.\n" +
326
+ "\n" +
327
+ "20 bottles of beer on the wall, 20 bottles of beer.\n" +
328
+ "Take one down and pass it around, 19 bottles of beer on the wall.\n" +
329
+ "\n" +
330
+ "19 bottles of beer on the wall, 19 bottles of beer.\n" +
331
+ "Take one down and pass it around, 18 bottles of beer on the wall.\n" +
332
+ "\n" +
333
+ "18 bottles of beer on the wall, 18 bottles of beer.\n" +
334
+ "Take one down and pass it around, 17 bottles of beer on the wall.\n" +
335
+ "\n" +
336
+ "17 bottles of beer on the wall, 17 bottles of beer.\n" +
337
+ "Take one down and pass it around, 16 bottles of beer on the wall.\n" +
338
+ "\n" +
339
+ "16 bottles of beer on the wall, 16 bottles of beer.\n" +
340
+ "Take one down and pass it around, 15 bottles of beer on the wall.\n" +
341
+ "\n" +
342
+ "15 bottles of beer on the wall, 15 bottles of beer.\n" +
343
+ "Take one down and pass it around, 14 bottles of beer on the wall.\n" +
344
+ "\n" +
345
+ "14 bottles of beer on the wall, 14 bottles of beer.\n" +
346
+ "Take one down and pass it around, 13 bottles of beer on the wall.\n" +
347
+ "\n" +
348
+ "13 bottles of beer on the wall, 13 bottles of beer.\n" +
349
+ "Take one down and pass it around, 12 bottles of beer on the wall.\n" +
350
+ "\n" +
351
+ "12 bottles of beer on the wall, 12 bottles of beer.\n" +
352
+ "Take one down and pass it around, 11 bottles of beer on the wall.\n" +
353
+ "\n" +
354
+ "11 bottles of beer on the wall, 11 bottles of beer.\n" +
355
+ "Take one down and pass it around, 10 bottles of beer on the wall.\n" +
356
+ "\n" +
357
+ "10 bottles of beer on the wall, 10 bottles of beer.\n" +
358
+ "Take one down and pass it around, 9 bottles of beer on the wall.\n" +
359
+ "\n" +
360
+ "9 bottles of beer on the wall, 9 bottles of beer.\n" +
361
+ "Take one down and pass it around, 8 bottles of beer on the wall.\n" +
362
+ "\n" +
363
+ "8 bottles of beer on the wall, 8 bottles of beer.\n" +
364
+ "Take one down and pass it around, 7 bottles of beer on the wall.\n" +
365
+ "\n" +
366
+ "7 bottles of beer on the wall, 7 bottles of beer.\n" +
367
+ "Take one down and pass it around, 6 bottles of beer on the wall.\n" +
368
+ "\n" +
369
+ "6 bottles of beer on the wall, 6 bottles of beer.\n" +
370
+ "Take one down and pass it around, 5 bottles of beer on the wall.\n" +
371
+ "\n" +
372
+ "5 bottles of beer on the wall, 5 bottles of beer.\n" +
373
+ "Take one down and pass it around, 4 bottles of beer on the wall.\n" +
374
+ "\n" +
375
+ "4 bottles of beer on the wall, 4 bottles of beer.\n" +
376
+ "Take one down and pass it around, 3 bottles of beer on the wall.\n" +
377
+ "\n" +
378
+ "3 bottles of beer on the wall, 3 bottles of beer.\n" +
379
+ "Take one down and pass it around, 2 bottles of beer on the wall.\n" +
380
+ "\n" +
381
+ "2 bottles of beer on the wall, 2 bottles of beer.\n" +
382
+ "Take one down and pass it around, 1 bottle of beer on the wall.\n" +
383
+ "\n" +
384
+ "1 bottle of beer on the wall, 1 bottle of beer.\n" +
385
+ "Take it down and pass it around, no more bottles of beer on the wall.\n" +
386
+ "\n" +
387
+ "No more bottles of beer on the wall, no more bottles of beer.\n" +
388
+ "Go to the store and buy some more, 99 bottles of beer on the wall.\n" +
389
389
  "";
390
390
  Assert.Equal(expected, BeerSong.Verses(99, 0));
391
391
  }