trackler 1.0.0 → 1.0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (288) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +7 -0
  3. data/CHANGELOG.md +9 -1
  4. data/README.md +10 -0
  5. data/common/CONTRIBUTING.md +50 -2
  6. data/common/exercises/alphametics/canonical-data.json +10 -10
  7. data/common/exercises/markdown/canonical-data.json +4 -4
  8. data/common/exercises/pov/canonical-data.json +356 -0
  9. data/lib/trackler/version.rb +1 -1
  10. data/trackler.gemspec +1 -2
  11. data/tracks/c/config.json +11 -1
  12. data/tracks/c/exercises/binary-search/makefile +16 -0
  13. data/tracks/c/exercises/binary-search/src/example.c +21 -0
  14. data/tracks/c/exercises/binary-search/src/example.h +8 -0
  15. data/tracks/c/exercises/binary-search/test/test_binary_search.c +99 -0
  16. data/tracks/c/exercises/binary-search/test/vendor/unity.c +1300 -0
  17. data/tracks/c/exercises/binary-search/test/vendor/unity.h +274 -0
  18. data/tracks/c/exercises/binary-search/test/vendor/unity_internals.h +701 -0
  19. data/tracks/clojure/config.json +3 -2
  20. data/tracks/clojure/exercises/bank-account/project.clj +4 -0
  21. data/tracks/clojure/exercises/bank-account/src/example.clj +17 -0
  22. data/tracks/clojure/exercises/bank-account/test/bank_account_test.clj +44 -0
  23. data/tracks/clojure/exercises/isogram/project.clj +4 -0
  24. data/tracks/clojure/exercises/isogram/src/example.clj +5 -0
  25. data/tracks/clojure/exercises/isogram/test/isogram_test.clj +17 -0
  26. data/tracks/csharp/config.json +27 -87
  27. data/tracks/csharp/exercises/exercises.csproj +265 -1
  28. data/tracks/csharp/exercises/grep/Example.cs +114 -0
  29. data/tracks/csharp/exercises/grep/GrepTest.cs +376 -0
  30. data/tracks/csharp/exercises/paket.references +2 -1
  31. data/tracks/csharp/exercises/poker/Example.cs +96 -0
  32. data/tracks/csharp/exercises/poker/PokerTest.cs +171 -0
  33. data/tracks/csharp/exercises/sgf-parsing/Example.cs +61 -0
  34. data/tracks/csharp/exercises/sgf-parsing/SgfParsing.cs +13 -0
  35. data/tracks/csharp/exercises/sgf-parsing/SgfParsingTest.cs +158 -0
  36. data/tracks/csharp/paket.dependencies +2 -1
  37. data/tracks/csharp/paket.lock +72 -0
  38. data/tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js +1 -1
  39. data/tracks/elisp/config.json +6 -1
  40. data/tracks/elisp/exercises/etl/etl-test.el +90 -0
  41. data/tracks/elisp/exercises/etl/etl.el +9 -0
  42. data/tracks/elisp/exercises/etl/example.el +22 -0
  43. data/tracks/elisp/exercises/nucleotide-count/example.el +19 -0
  44. data/tracks/elisp/exercises/nucleotide-count/nucleotide-count-test.el +34 -0
  45. data/tracks/elisp/exercises/nucleotide-count/nucleotide-count.el +9 -0
  46. data/tracks/elisp/exercises/perfect-numbers/example.el +28 -0
  47. data/tracks/elisp/exercises/perfect-numbers/perfect-numbers-test.el +24 -0
  48. data/tracks/elisp/exercises/perfect-numbers/perfect-numbers.el +10 -0
  49. data/tracks/elisp/exercises/roman-numerals/example.el +36 -0
  50. data/tracks/elisp/exercises/roman-numerals/roman-numerals-test.el +30 -0
  51. data/tracks/elisp/exercises/roman-numerals/roman-numerals.el +10 -0
  52. data/tracks/elisp/exercises/word-count/example.el +18 -0
  53. data/tracks/elisp/exercises/word-count/word-count-test.el +64 -0
  54. data/tracks/elisp/exercises/word-count/word-count.el +9 -0
  55. data/tracks/elixir/README.md +4 -4
  56. data/tracks/elixir/SETUP.md +3 -3
  57. data/tracks/elixir/docs/TESTS.md +3 -3
  58. data/tracks/elixir/exercises/accumulate/accumulate_test.exs +7 -7
  59. data/tracks/elixir/exercises/acronym/acronym_test.exs +5 -5
  60. data/tracks/elixir/exercises/allergies/allergies_test.exs +13 -13
  61. data/tracks/elixir/exercises/anagram/anagram_test.exs +12 -12
  62. data/tracks/elixir/exercises/atbash-cipher/atbash_cipher_test.exs +9 -9
  63. data/tracks/elixir/exercises/bank-account/bank_account_test.exs +5 -5
  64. data/tracks/elixir/exercises/beer-song/beer_song_test.exs +6 -6
  65. data/tracks/elixir/exercises/binary-search/binary_search_test.exs +7 -7
  66. data/tracks/elixir/exercises/binary/binary_test.exs +13 -13
  67. data/tracks/elixir/exercises/bob/bob_test.exs +15 -15
  68. data/tracks/elixir/exercises/bowling/bowling_test.exs +18 -18
  69. data/tracks/elixir/exercises/bracket-push/bracket_push_test.exs +12 -12
  70. data/tracks/elixir/exercises/change/change_test.exs +7 -7
  71. data/tracks/elixir/exercises/connect/connect_test.exs +9 -9
  72. data/tracks/elixir/exercises/crypto-square/crypto_square_test.exs +7 -7
  73. data/tracks/elixir/exercises/custom-set/custom_set_test.exs +11 -11
  74. data/tracks/elixir/exercises/diamond/diamond_test.exs +4 -4
  75. data/tracks/elixir/exercises/difference-of-squares/difference_of_squares_test.exs +10 -10
  76. data/tracks/elixir/exercises/dot-dsl/dot_dsl_test.exs +17 -17
  77. data/tracks/elixir/exercises/etl/etl_test.exs +5 -5
  78. data/tracks/elixir/exercises/flatten-array/flatten_array_test.exs +6 -6
  79. data/tracks/elixir/exercises/forth/forth_test.exs +16 -16
  80. data/tracks/elixir/exercises/gigasecond/gigasecond_test.exs +5 -5
  81. data/tracks/elixir/exercises/grade-school/grade_school_test.exs +6 -6
  82. data/tracks/elixir/exercises/grains/grains_test.exs +9 -9
  83. data/tracks/elixir/exercises/hamming/hamming_test.exs +6 -6
  84. data/tracks/elixir/exercises/hello-world/hello_world_test.exs +3 -3
  85. data/tracks/elixir/exercises/hexadecimal/hexadecimal_test.exs +11 -11
  86. data/tracks/elixir/exercises/isogram/isogram_test.exs +10 -10
  87. data/tracks/elixir/exercises/kindergarten-garden/garden_test.exs +7 -7
  88. data/tracks/elixir/exercises/largest-series-product/largest_series_product_test.exs +17 -17
  89. data/tracks/elixir/exercises/leap/leap_test.exs +5 -5
  90. data/tracks/elixir/exercises/list-ops/list_ops_test.exs +26 -26
  91. data/tracks/elixir/exercises/luhn/luhn_test.exs +7 -7
  92. data/tracks/elixir/exercises/markdown/markdown_test.exs +10 -10
  93. data/tracks/elixir/exercises/meetup/meetup_test.exs +92 -92
  94. data/tracks/elixir/exercises/minesweeper/minesweeper_test.exs +8 -8
  95. data/tracks/elixir/exercises/nth-prime/nth_prime_test.exs +6 -6
  96. data/tracks/elixir/exercises/nucleotide-count/example.exs +0 -5
  97. data/tracks/elixir/exercises/nucleotide-count/nucleotide_count_test.exs +7 -7
  98. data/tracks/elixir/exercises/palindrome-products/palindrome_products_test.exs +6 -6
  99. data/tracks/elixir/exercises/pangram/pangram_test.exs +11 -11
  100. data/tracks/elixir/exercises/parallel-letter-frequency/parallel_letter_frequency_test.exs +10 -10
  101. data/tracks/elixir/exercises/pascals-triangle/pascals_triangle_test.exs +7 -7
  102. data/tracks/elixir/exercises/phone-number/phone_number_test.exs +10 -10
  103. data/tracks/elixir/exercises/prime-factors/prime_factors_test.exs +13 -13
  104. data/tracks/elixir/exercises/pythagorean-triplet/pythagorean_triplet_test.exs +8 -8
  105. data/tracks/elixir/exercises/queen-attack/queen_attack_test.exs +16 -16
  106. data/tracks/elixir/exercises/rail-fence-cipher/rail_fence_cipher_test.exs +13 -13
  107. data/tracks/elixir/exercises/raindrops/raindrops_test.exs +17 -17
  108. data/tracks/elixir/exercises/rna-transcription/rna_transcription_test.exs +6 -6
  109. data/tracks/elixir/exercises/robot-simulator/robot_simulator_test.exs +6 -6
  110. data/tracks/elixir/exercises/roman-numerals/roman_numerals_test.exs +19 -19
  111. data/tracks/elixir/exercises/run-length-encoding/rle_test.exs +6 -6
  112. data/tracks/elixir/exercises/saddle-points/saddle_points_test.exs +11 -11
  113. data/tracks/elixir/exercises/scrabble-score/scrabble_score_test.exs +9 -9
  114. data/tracks/elixir/exercises/sieve/sieve_test.exs +3 -3
  115. data/tracks/elixir/exercises/space-age/space_age_test.exs +9 -9
  116. data/tracks/elixir/exercises/sublist/sublist_test.exs +20 -20
  117. data/tracks/elixir/exercises/sum-of-multiples/sum_of_multiples_test.exs +11 -11
  118. data/tracks/elixir/exercises/test_helper.exs +1 -1
  119. data/tracks/elixir/exercises/triangle/triangle_test.exs +16 -16
  120. data/tracks/elixir/exercises/word-count/word_count_test.exs +9 -9
  121. data/tracks/elixir/exercises/wordy/wordy_test.exs +16 -16
  122. data/tracks/elixir/exercises/zipper/zipper_test.exs +13 -13
  123. data/tracks/fsharp/build.fsx +2 -7
  124. data/tracks/fsharp/config.json +0 -104
  125. data/tracks/fsharp/exercises/grep/GrepTest.fs +7 -1
  126. data/tracks/go/config.json +1 -0
  127. data/tracks/go/exercises/acronym/acronym_test.go +36 -0
  128. data/tracks/go/exercises/acronym/example.go +21 -0
  129. data/tracks/go/exercises/palindrome-products/example.go +2 -0
  130. data/tracks/go/exercises/palindrome-products/palindrome_products_test.go +10 -0
  131. data/tracks/go/exercises/phone-number/example.go +2 -0
  132. data/tracks/go/exercises/phone-number/phone_number_test.go +44 -27
  133. data/tracks/go/exercises/robot-simulator/defs.go +6 -6
  134. data/tracks/go/exercises/robot-simulator/example.go +22 -22
  135. data/tracks/go/exercises/robot-simulator/robot_simulator_step2_test.go +28 -28
  136. data/tracks/go/exercises/robot-simulator/robot_simulator_step3_test.go +75 -76
  137. data/tracks/go/exercises/robot-simulator/robot_simulator_test.go +10 -4
  138. data/tracks/haskell/exercises/anagram/HINTS.md +22 -0
  139. data/tracks/haskell/exercises/anagram/package.yaml +3 -0
  140. data/tracks/haskell/exercises/anagram/src/Example.hs +10 -7
  141. data/tracks/haskell/exercises/anagram/test/Tests.hs +9 -3
  142. data/tracks/haskell/exercises/beer-song/HINTS.md +18 -0
  143. data/tracks/haskell/exercises/beer-song/src/Beer.hs +301 -3
  144. data/tracks/haskell/exercises/beer-song/src/Example.hs +5 -3
  145. data/tracks/haskell/exercises/beer-song/test/Tests.hs +332 -23
  146. data/tracks/haskell/exercises/crypto-square/src/CryptoSquare.hs +3 -17
  147. data/tracks/haskell/exercises/crypto-square/src/Example.hs +12 -20
  148. data/tracks/haskell/exercises/crypto-square/test/Tests.hs +46 -86
  149. data/tracks/haskell/exercises/leap/HINTS.md +11 -0
  150. data/tracks/haskell/exercises/leap/src/LeapYear.hs +1 -0
  151. data/tracks/java/exercises/pangram/src/test/java/PangramTest.java +34 -4
  152. data/tracks/lua/exercises/pov/pov_spec.lua +0 -13
  153. data/tracks/mips/docs/ABOUT.md +1 -1
  154. data/tracks/objective-c/config.json +225 -0
  155. data/tracks/objective-c/exercises/largest-series-product/LargestSeriesProductExample.h +8 -0
  156. data/tracks/objective-c/exercises/largest-series-product/LargestSeriesProductExample.m +63 -0
  157. data/tracks/objective-c/exercises/largest-series-product/LargestSeriesProductTest.m +84 -0
  158. data/tracks/objective-c/xcodeProject/ObjectiveC.xcodeproj/project.pbxproj +18 -0
  159. data/tracks/ocaml/.travis-ci.sh +23 -0
  160. data/tracks/ocaml/.travis.yml +5 -1
  161. data/tracks/ocaml/Makefile +41 -0
  162. data/tracks/ocaml/config.json +18 -0
  163. data/tracks/ocaml/exercises/anagram/Makefile +1 -0
  164. data/tracks/ocaml/exercises/beer-song/Makefile +1 -0
  165. data/tracks/ocaml/exercises/beer-song/{beer.mli → beer_song.mli} +0 -0
  166. data/tracks/ocaml/exercises/beer-song/example.ml +1 -1
  167. data/tracks/ocaml/exercises/beer-song/test.ml +7 -6
  168. data/tracks/ocaml/exercises/bob/Makefile +1 -0
  169. data/tracks/ocaml/exercises/bowling/Makefile +1 -0
  170. data/tracks/ocaml/exercises/custom-set/Makefile +1 -0
  171. data/tracks/ocaml/exercises/difference-of-squares/.merlin +5 -0
  172. data/tracks/ocaml/exercises/difference-of-squares/Makefile +11 -0
  173. data/tracks/ocaml/exercises/difference-of-squares/difference_of_squares.mli +8 -0
  174. data/tracks/ocaml/exercises/difference-of-squares/example.ml +21 -0
  175. data/tracks/ocaml/exercises/difference-of-squares/test.ml +32 -0
  176. data/tracks/ocaml/exercises/grade-school/Makefile +1 -0
  177. data/tracks/ocaml/exercises/grade-school/{school.mli → grade_school.mli} +0 -0
  178. data/tracks/ocaml/exercises/grade-school/test.ml +27 -27
  179. data/tracks/ocaml/exercises/hamming/Makefile +1 -0
  180. data/tracks/ocaml/exercises/hangman/Makefile +1 -0
  181. data/tracks/ocaml/exercises/hello-world/Makefile +1 -1
  182. data/tracks/ocaml/exercises/hello-world/{hello.ml → hello_world.ml} +0 -0
  183. data/tracks/ocaml/exercises/hello-world/{hello.mli → hello_world.mli} +0 -0
  184. data/tracks/ocaml/exercises/hello-world/test.ml +1 -1
  185. data/tracks/ocaml/exercises/hexadecimal/Makefile +1 -0
  186. data/tracks/ocaml/exercises/leap/Makefile +1 -1
  187. data/tracks/ocaml/exercises/list-ops/Makefile +1 -0
  188. data/tracks/ocaml/exercises/luhn/Makefile +1 -0
  189. data/tracks/ocaml/exercises/minesweeper/Makefile +1 -0
  190. data/tracks/ocaml/exercises/nucleotide-count/Makefile +1 -0
  191. data/tracks/ocaml/exercises/nucleotide-count/{dna.mli → nucleotide_count.mli} +0 -0
  192. data/tracks/ocaml/exercises/nucleotide-count/test.ml +7 -7
  193. data/tracks/ocaml/exercises/phone-number/Makefile +1 -0
  194. data/tracks/ocaml/exercises/phone-number/{phone.mli → phone_number.mli} +0 -0
  195. data/tracks/ocaml/exercises/phone-number/test.ml +10 -10
  196. data/tracks/ocaml/exercises/point-mutations/Makefile +8 -0
  197. data/tracks/ocaml/exercises/point-mutations/example.ml +0 -0
  198. data/tracks/ocaml/exercises/prime-factors/Makefile +1 -0
  199. data/tracks/ocaml/exercises/raindrops/.merlin +5 -0
  200. data/tracks/ocaml/exercises/raindrops/Makefile +11 -0
  201. data/tracks/ocaml/exercises/raindrops/example.ml +11 -0
  202. data/tracks/ocaml/exercises/raindrops/raindrops.mli +7 -0
  203. data/tracks/ocaml/exercises/raindrops/test.ml +48 -0
  204. data/tracks/ocaml/exercises/rna-transcription/Makefile +1 -0
  205. data/tracks/ocaml/exercises/rna-transcription/{dna.mli → rna_transcription.mli} +0 -0
  206. data/tracks/ocaml/exercises/rna-transcription/test.ml +6 -6
  207. data/tracks/ocaml/exercises/roman-numerals/Makefile +1 -0
  208. data/tracks/ocaml/exercises/say/.gitignore +1 -0
  209. data/tracks/ocaml/exercises/say/.merlin +5 -0
  210. data/tracks/ocaml/exercises/say/Makefile +11 -0
  211. data/tracks/ocaml/exercises/say/example.ml +52 -0
  212. data/tracks/ocaml/exercises/say/say.mli +8 -0
  213. data/tracks/ocaml/exercises/say/test.ml +65 -0
  214. data/tracks/ocaml/exercises/space-age/Makefile +1 -0
  215. data/tracks/ocaml/exercises/word-count/Makefile +1 -0
  216. data/tracks/ocaml/exercises/word-count/example.ml +1 -1
  217. data/tracks/ocaml/exercises/zipper/HINT.md +5 -6
  218. data/tracks/ocaml/exercises/zipper/Makefile +1 -0
  219. data/tracks/ocaml/exercises/zipper/example.ml +2 -2
  220. data/tracks/ocaml/exercises/zipper/tree.ml +1 -1
  221. data/tracks/php/config.json +7 -1
  222. data/tracks/php/exercises/variable-length-quantity/example.php +56 -0
  223. data/tracks/php/exercises/variable-length-quantity/variable-length-quantity_test.php +149 -0
  224. data/tracks/python/config.json +1 -1
  225. data/tracks/ruby/.rubocop.yml +1915 -26
  226. data/tracks/ruby/bin/generate-acronym +7 -0
  227. data/tracks/ruby/bin/generate-nth-prime +7 -0
  228. data/tracks/ruby/config.json +482 -0
  229. data/tracks/ruby/exercises/acronym/.version +1 -0
  230. data/tracks/ruby/exercises/acronym/acronym_test.rb +45 -21
  231. data/tracks/ruby/exercises/acronym/example.rb +1 -1
  232. data/tracks/ruby/exercises/acronym/example.tt +19 -0
  233. data/tracks/ruby/exercises/anagram/anagram_test.rb +1 -1
  234. data/tracks/ruby/exercises/nth-prime/.version +1 -0
  235. data/tracks/ruby/exercises/nth-prime/example.rb +4 -0
  236. data/tracks/ruby/exercises/nth-prime/example.tt +23 -0
  237. data/tracks/ruby/exercises/nth-prime/nth_prime_test.rb +33 -10
  238. data/tracks/ruby/exercises/raindrops/.version +1 -1
  239. data/tracks/ruby/exercises/raindrops/example.rb +1 -1
  240. data/tracks/ruby/exercises/raindrops/raindrops_test.rb +20 -5
  241. data/tracks/ruby/lib/acronym_cases.rb +19 -0
  242. data/tracks/ruby/lib/generator.rb +3 -2
  243. data/tracks/ruby/lib/nth_prime_cases.rb +23 -0
  244. data/tracks/ruby/lib/raindrop_cases.rb +1 -1
  245. data/tracks/rust/README.md +1 -1
  246. data/tracks/scala/exercises/leap/src/test/scala/leap_test.scala +10 -0
  247. data/tracks/scala/exercises/prime-factors/example.scala +2 -5
  248. data/tracks/scala/exercises/prime-factors/src/test/scala/primefactors_test.scala +11 -13
  249. data/tracks/scheme/{anagram → exercises/anagram}/anagram-test.scm +0 -0
  250. data/tracks/scheme/{anagram → exercises/anagram}/anagram.scm +0 -0
  251. data/tracks/scheme/{anagram → exercises/anagram}/example.scm +0 -0
  252. data/tracks/scheme/{bob → exercises/bob}/bob-test.scm +0 -0
  253. data/tracks/scheme/{bob → exercises/bob}/bob.scm +0 -0
  254. data/tracks/scheme/{bob → exercises/bob}/example.scm +0 -0
  255. data/tracks/scheme/{difference-of-squares → exercises/difference-of-squares}/difference-of-squares-test.scm +0 -0
  256. data/tracks/scheme/{difference-of-squares → exercises/difference-of-squares}/example.scm +0 -0
  257. data/tracks/scheme/{difference-of-squares → exercises/difference-of-squares}/squares.scm +0 -0
  258. data/tracks/scheme/{grains → exercises/grains}/example.scm +0 -0
  259. data/tracks/scheme/{grains → exercises/grains}/grains-test.scm +0 -0
  260. data/tracks/scheme/{grains → exercises/grains}/grains.scm +0 -0
  261. data/tracks/scheme/{hamming → exercises/hamming}/example.scm +0 -0
  262. data/tracks/scheme/{hamming → exercises/hamming}/hamming-test.scm +0 -0
  263. data/tracks/scheme/{hamming → exercises/hamming}/hamming.scm +0 -0
  264. data/tracks/scheme/{hello-world → exercises/hello-world}/example.scm +0 -0
  265. data/tracks/scheme/{hello-world → exercises/hello-world}/hello-world-test.scm +0 -0
  266. data/tracks/scheme/{hello-world → exercises/hello-world}/hello-world.scm +0 -0
  267. data/tracks/scheme/{leap → exercises/leap}/example.scm +0 -0
  268. data/tracks/scheme/{leap → exercises/leap}/leap-test.scm +0 -0
  269. data/tracks/scheme/{leap → exercises/leap}/leap-year.scm +0 -0
  270. data/tracks/scheme/{list-ops → exercises/list-ops}/example.scm +0 -0
  271. data/tracks/scheme/{list-ops → exercises/list-ops}/list-ops-test.scm +0 -0
  272. data/tracks/scheme/{list-ops → exercises/list-ops}/list-ops.scm +0 -0
  273. data/tracks/scheme/{nucleotide-count → exercises/nucleotide-count}/example.scm +0 -0
  274. data/tracks/scheme/{nucleotide-count → exercises/nucleotide-count}/nucleotide-count-test.scm +0 -0
  275. data/tracks/scheme/{nucleotide-count → exercises/nucleotide-count}/nucleotide-count.scm +0 -0
  276. data/tracks/scheme/{phone-number → exercises/phone-number}/example.scm +0 -0
  277. data/tracks/scheme/{phone-number → exercises/phone-number}/phone-number-test.scm +0 -0
  278. data/tracks/scheme/{phone-number → exercises/phone-number}/phone-number.scm +0 -0
  279. data/tracks/scheme/{raindrops → exercises/raindrops}/example.scm +0 -0
  280. data/tracks/scheme/{raindrops → exercises/raindrops}/raindrops-test.scm +0 -0
  281. data/tracks/scheme/{raindrops → exercises/raindrops}/raindrops.scm +0 -0
  282. data/tracks/scheme/{rna-transcription → exercises/rna-transcription}/dna.scm +0 -0
  283. data/tracks/scheme/{rna-transcription → exercises/rna-transcription}/example.scm +0 -0
  284. data/tracks/scheme/{rna-transcription → exercises/rna-transcription}/rna-transcription-test.scm +0 -0
  285. data/tracks/scheme/{robot-name → exercises/robot-name}/example.scm +0 -0
  286. data/tracks/scheme/{robot-name → exercises/robot-name}/robot-name-test.scm +0 -0
  287. data/tracks/scheme/{robot-name → exercises/robot-name}/robot.scm +0 -0
  288. metadata +125 -64
@@ -3,34 +3,58 @@ gem 'minitest', '>= 5.0.0'
3
3
  require 'minitest/autorun'
4
4
  require_relative 'acronym'
5
5
 
6
+ # Test data version:
7
+ # 5b5e807
8
+ # rubocop:disable Metrics/LineLength
6
9
  class AcronymTest < Minitest::Test
7
- ACRONYM_PAIRS =
8
- {
9
- 'Portable Network Graphics' => 'PNG',
10
- 'Ruby on Rails' => 'ROR',
11
- 'HyperText Markup Language' => 'HTML',
12
- 'First In, First Out' => 'FIFO',
13
- 'PHP: Hypertext Preprocessor' => 'PHP',
14
- 'Complementary metal-oxide semiconductor' => 'CMOS'
15
- }.freeze
16
-
17
- def test_acronyms
18
- ACRONYM_PAIRS.each do |given, expected|
19
- assert_equal expected, Acronym.abbreviate(given), <<-MSG
20
- The acronym of '#{given}' should be '#{expected}'.
21
- MSG
22
- end
10
+ def test_basic
11
+ assert_equal 'PNG', Acronym.abbreviate('Portable Network Graphics')
23
12
  end
24
13
 
25
- # Problems in exercism evolve over time,
26
- # as we find better ways to ask questions.
14
+ def test_lowercase_words
15
+ skip
16
+ assert_equal 'ROR', Acronym.abbreviate('Ruby on Rails')
17
+ end
18
+
19
+ def test_camelcase
20
+ skip
21
+ assert_equal 'HTML', Acronym.abbreviate('HyperText Markup Language')
22
+ end
23
+
24
+ def test_punctuation
25
+ skip
26
+ assert_equal 'FIFO', Acronym.abbreviate('First In, First Out')
27
+ end
28
+
29
+ def test_all_caps_words
30
+ skip
31
+ assert_equal 'PHP', Acronym.abbreviate('PHP: Hypertext Preprocessor')
32
+ end
33
+
34
+ def test_hyphenated
35
+ skip
36
+ assert_equal 'CMOS', Acronym.abbreviate('Complementary metal-oxide semiconductor')
37
+ end
38
+
39
+ # Problems in exercism evolve over time, as we find better ways to ask
40
+ # questions.
27
41
  # The version number refers to the version of the problem you solved,
28
42
  # not your solution.
29
43
  #
30
- # Define a constant named VERSION inside of BookKeeping.
44
+ # Define a constant named VERSION inside of the top level BookKeeping
45
+ # module, which may be placed near the end of your file.
46
+ #
47
+ # In your file, it will look like this:
48
+ #
49
+ # module BookKeeping
50
+ # VERSION = 1 # Where the version number matches the one in the test.
51
+ # end
52
+ #
31
53
  # If you are curious, read more about constants on RubyDoc:
32
54
  # http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
33
- def test_version
34
- assert_equal 1, BookKeeping::VERSION
55
+
56
+ def test_bookkeeping
57
+ skip
58
+ assert_equal 2, BookKeeping::VERSION
35
59
  end
36
60
  end
@@ -1,5 +1,5 @@
1
1
  module BookKeeping
2
- VERSION = 1
2
+ VERSION = 2
3
3
  end
4
4
 
5
5
  class Acronym
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+ gem 'minitest', '>= 5.0.0'
3
+ require 'minitest/autorun'
4
+ require_relative 'acronym'
5
+
6
+ # Test data version:
7
+ # <%= sha1 %>
8
+ class AcronymTest < Minitest::Test<% test_cases.each do |test_case| %>
9
+ def <%= test_case.name %><% if test_case.skipped? %>
10
+ skip<% end %>
11
+ assert_equal '<%= test_case.expected %>', <%= test_case.assertion %>
12
+ end
13
+ <% end %>
14
+ <%= IO.read(XRUBY_LIB + '/bookkeeping.md') %>
15
+ def test_bookkeeping
16
+ skip
17
+ assert_equal <%= version.next %>, BookKeeping::VERSION
18
+ end
19
+ end
@@ -59,7 +59,7 @@ class AnagramTest < Minitest::Test
59
59
  skip
60
60
  detector = Anagram.new('allergy')
61
61
  anagrams =
62
- detector.match %w( gallery ballerina regally clergy largely leading)
62
+ detector.match %w(gallery ballerina regally clergy largely leading)
63
63
  assert_equal %w(gallery largely regally), anagrams.sort
64
64
  end
65
65
 
@@ -1,3 +1,7 @@
1
+ module BookKeeping
2
+ VERSION = 1
3
+ end
4
+
1
5
  class Prime
2
6
  def self.nth(n)
3
7
  if n < 1
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+ gem 'minitest', '>= 5.0.0'
3
+ require 'minitest/autorun'
4
+ require_relative 'nth_prime'
5
+
6
+ # Test data version:
7
+ # <%= sha1 %>
8
+ # Rubocop directives
9
+ # rubocop:disable Style/NumericLiterals
10
+ #
11
+ class NthPrimeTest < Minitest::Test<% test_cases.each do |test_case| %>
12
+ def <%= test_case.name %><% if test_case.skipped? %>
13
+ skip<% end %><% if test_case.raises_error? %>
14
+ assert_raises(ArgumentError) { <%= test_case.actual %> }<% else %>
15
+ assert_equal <%= test_case.expected %>, <%= test_case.actual %><% end %>
16
+ end
17
+ <% end %>
18
+ <%= IO.read(XRUBY_LIB + '/bookkeeping.md') %>
19
+ def test_bookkeeping
20
+ skip
21
+ assert_equal <%= version.next %>, BookKeeping::VERSION
22
+ end
23
+ end
@@ -1,16 +1,19 @@
1
1
  #!/usr/bin/env ruby
2
-
3
2
  gem 'minitest', '>= 5.0.0'
4
3
  require 'minitest/autorun'
5
-
6
4
  require_relative 'nth_prime'
7
5
 
8
- class TestPrimes < Minitest::Test
9
- def test_first
6
+ # Test data version:
7
+ # bb79e10
8
+ # Rubocop directives
9
+ # rubocop:disable Style/NumericLiterals
10
+ #
11
+ class NthPrimeTest < Minitest::Test
12
+ def test_first_prime
10
13
  assert_equal 2, Prime.nth(1)
11
14
  end
12
15
 
13
- def test_second
16
+ def test_second_prime
14
17
  skip
15
18
  assert_equal 3, Prime.nth(2)
16
19
  end
@@ -22,13 +25,33 @@ class TestPrimes < Minitest::Test
22
25
 
23
26
  def test_big_prime
24
27
  skip
25
- assert_equal 104_743, Prime.nth(10_001)
28
+ assert_equal 104743, Prime.nth(10001)
29
+ end
30
+
31
+ def test_there_is_no_zeroth_prime
32
+ skip
33
+ assert_raises(ArgumentError) { Prime.nth(0) }
26
34
  end
27
35
 
28
- def test_weird_case
36
+ # Problems in exercism evolve over time, as we find better ways to ask
37
+ # questions.
38
+ # The version number refers to the version of the problem you solved,
39
+ # not your solution.
40
+ #
41
+ # Define a constant named VERSION inside of the top level BookKeeping
42
+ # module, which may be placed near the end of your file.
43
+ #
44
+ # In your file, it will look like this:
45
+ #
46
+ # module BookKeeping
47
+ # VERSION = 1 # Where the version number matches the one in the test.
48
+ # end
49
+ #
50
+ # If you are curious, read more about constants on RubyDoc:
51
+ # http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
52
+
53
+ def test_bookkeeping
29
54
  skip
30
- assert_raises ArgumentError do
31
- Prime.nth(0)
32
- end
55
+ assert_equal 1, BookKeeping::VERSION
33
56
  end
34
57
  end
@@ -1 +1 @@
1
- 2
1
+ 3
@@ -1,5 +1,5 @@
1
1
  module BookKeeping
2
- VERSION = 2
2
+ VERSION = 3
3
3
  end
4
4
 
5
5
  class Raindrops
@@ -4,8 +4,7 @@ require 'minitest/autorun'
4
4
  require_relative 'raindrops'
5
5
 
6
6
  # Test data version:
7
- # deb225e Implement canonical dataset for scrabble-score problem (#255)
8
-
7
+ # 5b5e807
9
8
  class RaindropsTest < Minitest::Test
10
9
  def test_1
11
10
  assert_equal '1', Raindrops.convert(1)
@@ -31,6 +30,11 @@ class RaindropsTest < Minitest::Test
31
30
  assert_equal 'Pling', Raindrops.convert(6)
32
31
  end
33
32
 
33
+ def test_8
34
+ skip
35
+ assert_equal '8', Raindrops.convert(8)
36
+ end
37
+
34
38
  def test_9
35
39
  skip
36
40
  assert_equal 'Pling', Raindrops.convert(9)
@@ -61,6 +65,11 @@ class RaindropsTest < Minitest::Test
61
65
  assert_equal 'Plang', Raindrops.convert(25)
62
66
  end
63
67
 
68
+ def test_27
69
+ skip
70
+ assert_equal 'Pling', Raindrops.convert(27)
71
+ end
72
+
64
73
  def test_35
65
74
  skip
66
75
  assert_equal 'PlangPlong', Raindrops.convert(35)
@@ -81,14 +90,20 @@ class RaindropsTest < Minitest::Test
81
90
  assert_equal 'PlingPlangPlong', Raindrops.convert(105)
82
91
  end
83
92
 
93
+ def test_3125
94
+ skip
95
+ assert_equal 'Plang', Raindrops.convert(3125)
96
+ end
97
+
84
98
  # Problems in exercism evolve over time, as we find better ways to ask
85
99
  # questions.
86
100
  # The version number refers to the version of the problem you solved,
87
101
  # not your solution.
88
102
  #
89
103
  # Define a constant named VERSION inside of the top level BookKeeping
90
- # module.
91
- # In your file, it will look like this:
104
+ # module, which may be placed near the end of your file.
105
+ #
106
+ # In your file, it will look like this:
92
107
  #
93
108
  # module BookKeeping
94
109
  # VERSION = 1 # Where the version number matches the one in the test.
@@ -99,6 +114,6 @@ class RaindropsTest < Minitest::Test
99
114
 
100
115
  def test_bookkeeping
101
116
  skip
102
- assert_equal 2, BookKeeping::VERSION
117
+ assert_equal 3, BookKeeping::VERSION
103
118
  end
104
119
  end
@@ -0,0 +1,19 @@
1
+ class AcronymCase < OpenStruct
2
+ def name
3
+ 'test_%s' % description.tr(' ', '_')
4
+ end
5
+
6
+ def assertion
7
+ "Acronym.abbreviate('#{phrase}')"
8
+ end
9
+
10
+ def skipped?
11
+ index > 0
12
+ end
13
+ end
14
+
15
+ AcronymCases = proc do |data|
16
+ JSON.parse(data)['abbreviate']['cases'].map.with_index do |row, i|
17
+ AcronymCase.new(row.merge('index' => i))
18
+ end
19
+ end
@@ -14,11 +14,12 @@ class Generator
14
14
  end
15
15
 
16
16
  def metadata_dir
17
- File.expand_path(File.join('..', '..', '..', METADATA_REPOSITORY), __FILE__)
17
+ # rubocop:disable Metrics/LineLength
18
+ File.expand_path(File.join('..', '..', '..', METADATA_REPOSITORY, 'exercises', name), __FILE__)
18
19
  end
19
20
 
20
21
  def data
21
- File.read(File.join(metadata_dir, "#{name}.json"))
22
+ File.read(File.join(metadata_dir, 'canonical-data.json'))
22
23
  end
23
24
 
24
25
  def path_to(file)
@@ -0,0 +1,23 @@
1
+ class NthPrimeCase < OpenStruct
2
+ def name
3
+ 'test_%s' % description.downcase.gsub(/[ -]/, '_')
4
+ end
5
+
6
+ def actual
7
+ "Prime.nth(#{input})"
8
+ end
9
+
10
+ def raises_error?
11
+ expected == false
12
+ end
13
+
14
+ def skipped?
15
+ index > 0
16
+ end
17
+ end
18
+
19
+ NthPrimeCases = proc do |data|
20
+ JSON.parse(data)['cases'].map.with_index do |row, i|
21
+ NthPrimeCase.new(row.merge('index' => i))
22
+ end
23
+ end
@@ -1,6 +1,6 @@
1
1
  class RaindropsCase < OpenStruct
2
2
  def name
3
- 'test_%s' % description.downcase.gsub(/[ -]/, '_')
3
+ 'test_%s' % number
4
4
  end
5
5
 
6
6
  def do
@@ -15,5 +15,5 @@ The MIT License (MIT)
15
15
  Copyright (c) 2014 Katrina Owen, _@kytrinyx.com
16
16
 
17
17
  ## Rust icon
18
- The Rust Logo is created by the Mozilla Corporation, and has been released under the Creative Commons Attribution 4.0 International license.
18
+ The Rust Logo is created by the Mozilla Corporation, and has been released under the [Creative Commons Attribution 4.0 International license](https://creativecommons.org/licenses/by/4.0/).
19
19
  We tweaked the color from black to charcoal (#212121).
@@ -10,6 +10,11 @@ class LeapTest extends FunSuite {
10
10
  assert(!Year(1997).isLeap)
11
11
  }
12
12
 
13
+ test("an even year") {
14
+ pending
15
+ assert(!Year(1986).isLeap)
16
+ }
17
+
13
18
  test ("century") {
14
19
  pending
15
20
  assert(!Year(1900).isLeap)
@@ -19,4 +24,9 @@ class LeapTest extends FunSuite {
19
24
  pending
20
25
  assert(Year(2000).isLeap)
21
26
  }
27
+
28
+ test("exceptional century that is no millenium") {
29
+ pending
30
+ assert(Year(1600).isLeap)
31
+ }
22
32
  }
@@ -1,8 +1,8 @@
1
1
  import scala.annotation.tailrec
2
2
 
3
3
  // Algorithm from - http://fldit-www.cs.uni-dortmund.de/~peter/PS07/HR.pdf
4
- class PrimeFactors {
5
- def primeFactors(n: Long): List[Long] = {
4
+ object PrimeFactors {
5
+ def forNumber(n: Long): List[Long] = {
6
6
  assert(n >= 1, "Argument must be positive")
7
7
 
8
8
  @tailrec
@@ -26,7 +26,4 @@ class PrimeFactors {
26
26
  else ldf(k + 1, n)
27
27
  }
28
28
 
29
- object PrimeFactors {
30
- def apply() = new PrimeFactors
31
- }
32
29
 
@@ -1,50 +1,48 @@
1
1
  import org.scalatest.{FlatSpec, Matchers}
2
2
 
3
3
  class PrimeFactorsTest extends FlatSpec with Matchers {
4
- private val calc = PrimeFactors()
5
-
6
4
  it should "calc empty list" in {
7
- calc.primeFactors(1) should be (List())
5
+ PrimeFactors.forNumber(1) should be (List())
8
6
  }
9
7
 
10
8
  it should "calc prime factors of 2" in {
11
- calc.primeFactors(2) should be (List(2))
9
+ PrimeFactors.forNumber(2) should be (List(2))
12
10
  }
13
11
 
14
12
  it should "calc prime factors of 3" in {
15
- calc.primeFactors(3) should be (List(3))
13
+ PrimeFactors.forNumber(3) should be (List(3))
16
14
  }
17
15
 
18
16
  it should "calc prime factors of 4" in {
19
- calc.primeFactors(4) should be (List(2, 2))
17
+ PrimeFactors.forNumber(4) should be (List(2, 2))
20
18
  }
21
19
 
22
20
  it should "calc prime factors of 6" in {
23
- calc.primeFactors(6) should be (List(2, 3))
21
+ PrimeFactors.forNumber(6) should be (List(2, 3))
24
22
  }
25
23
 
26
24
  it should "calc prime factors of 8" in {
27
- calc.primeFactors(8) should be (List(2, 2, 2))
25
+ PrimeFactors.forNumber(8) should be (List(2, 2, 2))
28
26
  }
29
27
 
30
28
  it should "calc prime factors of 9" in {
31
- calc.primeFactors(9) should be (List(3, 3))
29
+ PrimeFactors.forNumber(9) should be (List(3, 3))
32
30
  }
33
31
 
34
32
  it should "calc prime factors of 27" in {
35
- calc.primeFactors(27) should be (List(3, 3, 3))
33
+ PrimeFactors.forNumber(27) should be (List(3, 3, 3))
36
34
  }
37
35
 
38
36
  it should "calc prime factors of 625" in {
39
- calc.primeFactors(625) should be (List(5, 5, 5, 5))
37
+ PrimeFactors.forNumber(625) should be (List(5, 5, 5, 5))
40
38
  }
41
39
 
42
40
  it should "calc prime factors of 901255" in {
43
- calc.primeFactors(901255) should be (List(5, 17, 23, 461))
41
+ PrimeFactors.forNumber(901255) should be (List(5, 17, 23, 461))
44
42
  }
45
43
 
46
44
  it should "calc prime factors of 93819012551" in {
47
- calc.primeFactors(Long.MaxValue) should be (List(7, 7, 73, 127, 337, 92737, 649657))
45
+ PrimeFactors.forNumber(Long.MaxValue) should be (List(7, 7, 73, 127, 337, 92737, 649657))
48
46
  }
49
47
  }
50
48