trackler 2.1.0.1 → 2.1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (160) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/elixir/config.json +17 -0
  4. data/tracks/elixir/exercises/matrix/example.exs +63 -0
  5. data/tracks/elixir/exercises/matrix/matrix.exs +48 -0
  6. data/tracks/elixir/exercises/matrix/matrix_test.exs +58 -0
  7. data/tracks/elixir/exercises/twelve-days/example.exs +53 -0
  8. data/tracks/elixir/exercises/twelve-days/twelve_days.exs +25 -0
  9. data/tracks/elixir/exercises/twelve-days/twelve_days_test.exs +86 -0
  10. data/tracks/go/exercises/change/.meta/gen.go +1 -3
  11. data/tracks/go/exercises/change/cases_test.go +1 -0
  12. data/tracks/go/exercises/forth/example.go +1 -1
  13. data/tracks/go/exercises/raindrops/.meta/gen.go +1 -3
  14. data/tracks/go/exercises/raindrops/cases_test.go +5 -1
  15. data/tracks/go/exercises/raindrops/example.go +1 -1
  16. data/tracks/go/exercises/raindrops/raindrops.go +1 -1
  17. data/tracks/go/exercises/raindrops/raindrops_test.go +1 -1
  18. data/tracks/java/config.json +5 -5
  19. data/tracks/java/exercises/isogram/src/example/java/IsogramChecker.java +23 -27
  20. data/tracks/java/exercises/isogram/src/test/java/IsogramCheckerTest.java +77 -0
  21. data/tracks/javascript/config.json +9 -0
  22. data/tracks/javascript/exercises/proverb/example.js +36 -0
  23. data/tracks/javascript/exercises/proverb/proverb.spec.js +78 -0
  24. data/tracks/ruby/README.md +0 -33
  25. data/tracks/ruby/exercises/acronym/.meta/.version +1 -1
  26. data/tracks/ruby/exercises/acronym/acronym_test.rb +14 -9
  27. data/tracks/ruby/exercises/acronym/example.rb +1 -1
  28. data/tracks/ruby/exercises/acronym/example.tt +7 -4
  29. data/tracks/ruby/exercises/all-your-base/all_your_base_test.rb +1 -1
  30. data/tracks/ruby/exercises/all-your-base/example.tt +4 -3
  31. data/tracks/ruby/exercises/alphametics/alphametics_test.rb +2 -1
  32. data/tracks/ruby/exercises/alphametics/example.tt +2 -1
  33. data/tracks/ruby/exercises/anagram/anagram_test.rb +35 -20
  34. data/tracks/ruby/exercises/anagram/example.rb +1 -1
  35. data/tracks/ruby/exercises/anagram/example.tt +5 -2
  36. data/tracks/ruby/exercises/beer-song/beer_song_test.rb +1 -0
  37. data/tracks/ruby/exercises/beer-song/example.tt +6 -4
  38. data/tracks/ruby/exercises/binary/binary_test.rb +3 -2
  39. data/tracks/ruby/exercises/binary/example.tt +5 -2
  40. data/tracks/ruby/exercises/bowling/bowling_test.rb +39 -40
  41. data/tracks/ruby/exercises/bowling/example.tt +2 -2
  42. data/tracks/ruby/exercises/bracket-push/.meta/.version +1 -1
  43. data/tracks/ruby/exercises/bracket-push/bracket_push_test.rb +7 -3
  44. data/tracks/ruby/exercises/bracket-push/example.rb +1 -1
  45. data/tracks/ruby/exercises/bracket-push/example.tt +5 -2
  46. data/tracks/ruby/exercises/clock/clock_test.rb +40 -41
  47. data/tracks/ruby/exercises/clock/example.tt +5 -2
  48. data/tracks/ruby/exercises/connect/.meta/.version +1 -1
  49. data/tracks/ruby/exercises/connect/connect_test.rb +20 -3
  50. data/tracks/ruby/exercises/connect/example.rb +1 -1
  51. data/tracks/ruby/exercises/connect/example.tt +3 -1
  52. data/tracks/ruby/exercises/custom-set/custom_set_test.rb +1 -2
  53. data/tracks/ruby/exercises/custom-set/example.tt +5 -2
  54. data/tracks/ruby/exercises/difference-of-squares/difference_of_squares_test.rb +6 -5
  55. data/tracks/ruby/exercises/difference-of-squares/example.tt +8 -4
  56. data/tracks/ruby/exercises/dominoes/dominoes_test.rb +1 -1
  57. data/tracks/ruby/exercises/dominoes/example.tt +1 -1
  58. data/tracks/ruby/exercises/gigasecond/.meta/.version +1 -1
  59. data/tracks/ruby/exercises/gigasecond/example.rb +1 -1
  60. data/tracks/ruby/exercises/gigasecond/example.tt +7 -5
  61. data/tracks/ruby/exercises/gigasecond/gigasecond_test.rb +11 -16
  62. data/tracks/ruby/exercises/grains/example.tt +5 -3
  63. data/tracks/ruby/exercises/grains/grains_test.rb +2 -1
  64. data/tracks/ruby/exercises/hello-world/example.tt +1 -1
  65. data/tracks/ruby/exercises/hello-world/hello_world_test.rb +1 -1
  66. data/tracks/ruby/exercises/isogram/.meta/.version +1 -1
  67. data/tracks/ruby/exercises/isogram/example.rb +1 -1
  68. data/tracks/ruby/exercises/isogram/example.tt +6 -4
  69. data/tracks/ruby/exercises/isogram/isogram_test.rb +18 -10
  70. data/tracks/ruby/exercises/largest-series-product/.meta/.version +1 -1
  71. data/tracks/ruby/exercises/largest-series-product/example.rb +1 -1
  72. data/tracks/ruby/exercises/largest-series-product/example.tt +7 -5
  73. data/tracks/ruby/exercises/largest-series-product/largest_series_product_test.rb +11 -21
  74. data/tracks/ruby/exercises/leap/.meta/.version +1 -1
  75. data/tracks/ruby/exercises/leap/example.rb +1 -1
  76. data/tracks/ruby/exercises/leap/example.tt +6 -4
  77. data/tracks/ruby/exercises/leap/leap_test.rb +11 -25
  78. data/tracks/ruby/exercises/nth-prime/example.tt +7 -5
  79. data/tracks/ruby/exercises/nth-prime/nth_prime_test.rb +2 -3
  80. data/tracks/ruby/exercises/pangram/example.tt +5 -3
  81. data/tracks/ruby/exercises/pangram/pangram_test.rb +2 -1
  82. data/tracks/ruby/exercises/queen-attack/example.tt +2 -2
  83. data/tracks/ruby/exercises/queen-attack/queen_attack_test.rb +14 -15
  84. data/tracks/ruby/exercises/raindrops/example.tt +7 -4
  85. data/tracks/ruby/exercises/raindrops/raindrops_test.rb +38 -38
  86. data/tracks/ruby/exercises/rna-transcription/example.tt +6 -3
  87. data/tracks/ruby/exercises/rna-transcription/rna_transcription_test.rb +4 -5
  88. data/tracks/ruby/exercises/roman-numerals/example.tt +7 -4
  89. data/tracks/ruby/exercises/roman-numerals/roman_numerals_test.rb +5 -5
  90. data/tracks/ruby/exercises/run-length-encoding/.meta/.version +1 -1
  91. data/tracks/ruby/exercises/run-length-encoding/example.rb +1 -1
  92. data/tracks/ruby/exercises/run-length-encoding/example.tt +6 -3
  93. data/tracks/ruby/exercises/run-length-encoding/run_length_encoding_test.rb +70 -28
  94. data/tracks/ruby/exercises/say/example.tt +7 -5
  95. data/tracks/ruby/exercises/say/say_test.rb +3 -2
  96. data/tracks/ruby/exercises/sieve/example.tt +4 -1
  97. data/tracks/ruby/exercises/sieve/sieve_test.rb +1 -3
  98. data/tracks/ruby/exercises/tournament/example.tt +4 -1
  99. data/tracks/ruby/exercises/tournament/tournament_test.rb +1 -2
  100. data/tracks/ruby/exercises/transpose/example.tt +5 -2
  101. data/tracks/ruby/exercises/transpose/transpose_test.rb +1 -2
  102. data/tracks/ruby/exercises/triangle/example.tt +5 -3
  103. data/tracks/ruby/exercises/triangle/triangle_test.rb +1 -3
  104. data/tracks/ruby/exercises/two-bucket/example.tt +7 -4
  105. data/tracks/ruby/exercises/two-bucket/two_bucket_test.rb +9 -9
  106. data/tracks/ruby/exercises/word-count/example.tt +6 -4
  107. data/tracks/ruby/exercises/word-count/word_count_test.rb +2 -3
  108. data/tracks/ruby/exercises/wordy/example.tt +5 -3
  109. data/tracks/ruby/exercises/wordy/wordy_test.rb +2 -1
  110. data/tracks/ruby/lib/acronym_cases.rb +3 -15
  111. data/tracks/ruby/lib/all_your_base_cases.rb +22 -54
  112. data/tracks/ruby/lib/alphametics_cases.rb +12 -27
  113. data/tracks/ruby/lib/anagram_cases.rb +7 -15
  114. data/tracks/ruby/lib/beer_song_cases.rb +7 -24
  115. data/tracks/ruby/lib/binary_cases.rb +5 -18
  116. data/tracks/ruby/lib/bowling_cases.rb +24 -24
  117. data/tracks/ruby/lib/bracket_push_cases.rb +6 -21
  118. data/tracks/ruby/lib/clock_cases.rb +6 -25
  119. data/tracks/ruby/lib/connect_cases.rb +2 -20
  120. data/tracks/ruby/lib/custom_set_cases.rb +14 -35
  121. data/tracks/ruby/lib/difference_of_squares_cases.rb +5 -26
  122. data/tracks/ruby/lib/dominoes_cases.rb +2 -11
  123. data/tracks/ruby/lib/generator/case_values.rb +25 -0
  124. data/tracks/ruby/lib/generator/exercise_cases.rb +11 -0
  125. data/tracks/ruby/lib/generator/files/track_files.rb +7 -2
  126. data/tracks/ruby/lib/generator/template_values.rb +12 -7
  127. data/tracks/ruby/lib/gigasecond_cases.rb +4 -18
  128. data/tracks/ruby/lib/grains_cases.rb +11 -38
  129. data/tracks/ruby/lib/hamming_cases.rb +0 -6
  130. data/tracks/ruby/lib/hello_world_cases.rb +2 -14
  131. data/tracks/ruby/lib/isogram_cases.rb +8 -16
  132. data/tracks/ruby/lib/largest_series_product_cases.rb +10 -16
  133. data/tracks/ruby/lib/leap_cases.rb +3 -16
  134. data/tracks/ruby/lib/luhn_cases.rb +0 -6
  135. data/tracks/ruby/lib/nth_prime_cases.rb +11 -13
  136. data/tracks/ruby/lib/ocr_numbers_cases.rb +0 -5
  137. data/tracks/ruby/lib/pangram_cases.rb +2 -19
  138. data/tracks/ruby/lib/pig_latin_cases.rb +0 -5
  139. data/tracks/ruby/lib/queen_attack_cases.rb +14 -37
  140. data/tracks/ruby/lib/raindrops_cases.rb +3 -15
  141. data/tracks/ruby/lib/rna_transcription_cases.rb +2 -14
  142. data/tracks/ruby/lib/roman_numerals_cases.rb +7 -10
  143. data/tracks/ruby/lib/run_length_encoding_cases.rb +4 -25
  144. data/tracks/ruby/lib/say_cases.rb +3 -14
  145. data/tracks/ruby/lib/sieve_cases.rb +1 -15
  146. data/tracks/ruby/lib/tournament_cases.rb +1 -14
  147. data/tracks/ruby/lib/transpose_cases.rb +1 -14
  148. data/tracks/ruby/lib/triangle_cases.rb +8 -27
  149. data/tracks/ruby/lib/two_bucket_cases.rb +7 -17
  150. data/tracks/ruby/lib/word_count_cases.rb +1 -13
  151. data/tracks/ruby/lib/wordy_cases.rb +4 -27
  152. data/tracks/ruby/test/fixtures/metadata/exercises/complex/canonical-data.json +45 -0
  153. data/tracks/ruby/test/fixtures/xruby/lib/beta_cases.rb +7 -0
  154. data/tracks/ruby/test/generator/case_values_test.rb +30 -0
  155. data/tracks/ruby/test/generator/files/track_files_test.rb +2 -3
  156. data/tracks/ruby/test/generator/template_values_test.rb +44 -3
  157. data/tracks/ruby/test/wordy_cases_test.rb +4 -65
  158. metadata +14 -4
  159. data/tracks/java/exercises/isogram/src/test/java/IsogramTest.java +0 -80
  160. data/tracks/ruby/test/grains_cases_test.rb +0 -103
@@ -1,7 +1,7 @@
1
1
  require 'minitest/autorun'
2
2
  require_relative 'all_your_base'
3
3
 
4
- # Test data version: aa12f2e
4
+ # Common test data version: 39de23b
5
5
  class AllYourBaseTest < Minitest::Test
6
6
  def test_single_bit_one_to_decimal
7
7
  # skip
@@ -2,13 +2,14 @@ require 'minitest/autorun'
2
2
  require_relative 'all_your_base'
3
3
 
4
4
  # Common test data version: <%= abbreviated_commit_hash %>
5
- class AllYourBaseTest < Minitest::Test<% test_cases.each do |test_case| %>
6
- def <%= test_case.test_name %>
5
+ class AllYourBaseTest < Minitest::Test
6
+ <% test_cases.each do |test_case| %>
7
+ def <%= test_case.name %>
7
8
  <%= test_case.skipped %>
8
9
  <%= test_case.workload %>
9
10
  end
10
- <% end %>
11
11
 
12
+ <% end %>
12
13
  <%= IO.read(XRUBY_LIB + '/bookkeeping.md') %>
13
14
  def test_bookkeeping
14
15
  skip
@@ -3,7 +3,7 @@ gem 'minitest', '>= 5.0.0'
3
3
  require 'minitest/autorun'
4
4
  require_relative 'alphametics'
5
5
 
6
- # Test data version: 9dab356
6
+ # Common test data version: b9bada8
7
7
  class AlphameticsTest < Minitest::Test
8
8
 
9
9
  def test_puzzle_with_three_letters
@@ -89,6 +89,7 @@ class AlphameticsTest < Minitest::Test
89
89
  #
90
90
  # If you are curious, read more about constants on RubyDoc:
91
91
  # http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
92
+
92
93
  def test_bookkeeping
93
94
  skip
94
95
  assert_equal 4, BookKeeping::VERSION
@@ -8,13 +8,14 @@ class AlphameticsTest < Minitest::Test
8
8
  <% test_cases.each do |test_case| %>
9
9
 
10
10
  <%= test_case.runtime_comment %>
11
- def <%= test_case.test_name %>
11
+ def <%= test_case.name %>
12
12
  <%= test_case.skipped %>
13
13
  <%= test_case.workload %>
14
14
  end
15
15
  <% end %>
16
16
 
17
17
  <%= IO.read(XRUBY_LIB + '/bookkeeping.md') %>
18
+
18
19
  def test_bookkeeping
19
20
  skip
20
21
  assert_equal <%= version %>, BookKeeping::VERSION
@@ -3,119 +3,134 @@ gem 'minitest', '>= 5.0.0'
3
3
  require 'minitest/autorun'
4
4
  require_relative 'anagram'
5
5
 
6
- # Test data version:
7
- # 6a886e0
6
+ # Common test data version: 196fc1a
8
7
  class AnagramTest < Minitest::Test
9
8
  def test_no_matches
10
9
  # skip
11
10
  detector = Anagram.new('diaper')
12
11
  anagrams = detector.match(["hello", "world", "zombies", "pants"])
13
- assert_equal [], anagrams
12
+ expected = []
13
+ assert_equal expected, anagrams
14
14
  end
15
15
 
16
16
  def test_detects_simple_anagram
17
17
  skip
18
18
  detector = Anagram.new('ant')
19
19
  anagrams = detector.match(["tan", "stand", "at"])
20
- assert_equal ["tan"], anagrams
20
+ expected = ["tan"]
21
+ assert_equal expected, anagrams
21
22
  end
22
23
 
23
24
  def test_does_not_detect_false_positives
24
25
  skip
25
26
  detector = Anagram.new('galea')
26
27
  anagrams = detector.match(["eagle"])
27
- assert_equal [], anagrams
28
+ expected = []
29
+ assert_equal expected, anagrams
28
30
  end
29
31
 
30
- def test_detects_multiple_anagrams
32
+ def test_detects_two_anagrams
31
33
  skip
32
34
  detector = Anagram.new('master')
33
35
  anagrams = detector.match(["stream", "pigeon", "maters"])
34
- assert_equal ["maters", "stream"], anagrams.sort
36
+ expected = ["maters", "stream"]
37
+ assert_equal expected, anagrams.sort
35
38
  end
36
39
 
37
40
  def test_does_not_detect_anagram_subsets
38
41
  skip
39
42
  detector = Anagram.new('good')
40
43
  anagrams = detector.match(["dog", "goody"])
41
- assert_equal [], anagrams
44
+ expected = []
45
+ assert_equal expected, anagrams
42
46
  end
43
47
 
44
48
  def test_detects_anagram
45
49
  skip
46
50
  detector = Anagram.new('listen')
47
51
  anagrams = detector.match(["enlists", "google", "inlets", "banana"])
48
- assert_equal ["inlets"], anagrams
52
+ expected = ["inlets"]
53
+ assert_equal expected, anagrams
49
54
  end
50
55
 
51
- def test_detects_multiple_anagrams
56
+ def test_detects_three_anagrams
52
57
  skip
53
58
  detector = Anagram.new('allergy')
54
59
  anagrams = detector.match(["gallery", "ballerina", "regally", "clergy", "largely", "leading"])
55
- assert_equal ["gallery", "largely", "regally"], anagrams.sort
60
+ expected = ["gallery", "largely", "regally"]
61
+ assert_equal expected, anagrams.sort
56
62
  end
57
63
 
58
64
  def test_does_not_detect_identical_words
59
65
  skip
60
66
  detector = Anagram.new('corn')
61
67
  anagrams = detector.match(["corn", "dark", "Corn", "rank", "CORN", "cron", "park"])
62
- assert_equal ["cron"], anagrams
68
+ expected = ["cron"]
69
+ assert_equal expected, anagrams
63
70
  end
64
71
 
65
72
  def test_does_not_detect_non_anagrams_with_identical_checksum
66
73
  skip
67
74
  detector = Anagram.new('mass')
68
75
  anagrams = detector.match(["last"])
69
- assert_equal [], anagrams
76
+ expected = []
77
+ assert_equal expected, anagrams
70
78
  end
71
79
 
72
80
  def test_detects_anagrams_case_insensitively
73
81
  skip
74
82
  detector = Anagram.new('Orchestra')
75
83
  anagrams = detector.match(["cashregister", "Carthorse", "radishes"])
76
- assert_equal ["Carthorse"], anagrams
84
+ expected = ["Carthorse"]
85
+ assert_equal expected, anagrams
77
86
  end
78
87
 
79
88
  def test_detects_anagrams_using_case_insensitive_subject
80
89
  skip
81
90
  detector = Anagram.new('Orchestra')
82
91
  anagrams = detector.match(["cashregister", "carthorse", "radishes"])
83
- assert_equal ["carthorse"], anagrams
92
+ expected = ["carthorse"]
93
+ assert_equal expected, anagrams
84
94
  end
85
95
 
86
96
  def test_detects_anagrams_using_case_insensitive_possible_matches
87
97
  skip
88
98
  detector = Anagram.new('orchestra')
89
99
  anagrams = detector.match(["cashregister", "Carthorse", "radishes"])
90
- assert_equal ["Carthorse"], anagrams
100
+ expected = ["Carthorse"]
101
+ assert_equal expected, anagrams
91
102
  end
92
103
 
93
104
  def test_does_not_detect_a_word_as_its_own_anagram
94
105
  skip
95
106
  detector = Anagram.new('banana')
96
107
  anagrams = detector.match(["Banana"])
97
- assert_equal [], anagrams
108
+ expected = []
109
+ assert_equal expected, anagrams
98
110
  end
99
111
 
100
112
  def test_does_not_detect_a_anagram_if_the_original_word_is_repeated
101
113
  skip
102
114
  detector = Anagram.new('go')
103
115
  anagrams = detector.match(["go Go GO"])
104
- assert_equal [], anagrams
116
+ expected = []
117
+ assert_equal expected, anagrams
105
118
  end
106
119
 
107
120
  def test_anagrams_must_use_all_letters_exactly_once
108
121
  skip
109
122
  detector = Anagram.new('tapper')
110
123
  anagrams = detector.match(["patter"])
111
- assert_equal [], anagrams
124
+ expected = []
125
+ assert_equal expected, anagrams
112
126
  end
113
127
 
114
128
  def test_capital_word_is_not_own_anagram
115
129
  skip
116
130
  detector = Anagram.new('BANANA')
117
131
  anagrams = detector.match(["Banana"])
118
- assert_equal [], anagrams
132
+ expected = []
133
+ assert_equal expected, anagrams
119
134
  end
120
135
 
121
136
  # Problems in exercism evolve over time, as we find better ways to ask
@@ -1,5 +1,5 @@
1
1
  module BookKeeping
2
- VERSION=2
2
+ VERSION = 2
3
3
  end
4
4
 
5
5
  class Anagram
@@ -4,13 +4,16 @@ require 'minitest/autorun'
4
4
  require_relative 'anagram'
5
5
 
6
6
  # Common test data version: <%= abbreviated_commit_hash %>
7
- class AnagramTest < Minitest::Test<% test_cases.each do |test_case| %>
8
- def <%= test_case.test_name %>
7
+ class AnagramTest < Minitest::Test
8
+ <% test_cases.each do |test_case| %>
9
+ def <%= test_case.name %>
9
10
  <%= test_case.skipped %>
10
11
  <%= test_case.workload %>
11
12
  end
13
+
12
14
  <% end %>
13
15
  <%= IO.read(XRUBY_LIB + '/bookkeeping.md') %>
16
+
14
17
  def test_bookkeeping
15
18
  skip
16
19
  assert_equal <%= version %>, BookKeeping::VERSION
@@ -383,6 +383,7 @@ Go to the store and buy some more, 99 bottles of beer on the wall.
383
383
  TEXT
384
384
  assert_equal expected, BeerSong.new.verses(99, 0)
385
385
  end
386
+
386
387
  # Problems in exercism evolve over time, as we find better ways to ask
387
388
  # questions.
388
389
  # The version number refers to the version of the problem you solved,
@@ -5,14 +5,16 @@ require 'minitest/autorun'
5
5
  require_relative 'beer_song'
6
6
 
7
7
  # Common test data version: <%= abbreviated_commit_hash %>
8
- class BeerSongTest < Minitest::Test<% test_cases.each do |test_case| %>
9
- def <%= test_case.test_name %>
8
+ class BeerSongTest < Minitest::Test
9
+ <% test_cases.each do |test_case| %>
10
+ def <%= test_case.name %>
10
11
  <%= test_case.skipped %>
11
12
  expected = <<-TEXT
12
13
  <%= test_case.expected %>
13
- TEXT
14
- assert_equal expected, <%= test_case.workload %>
14
+ TEXT
15
+ <%= test_case.workload %>
15
16
  end
17
+
16
18
  <% end %>
17
19
  <%= IO.read(XRUBY_LIB + '/bookkeeping.md') %>
18
20
  def test_bookkeeping
@@ -4,8 +4,7 @@ gem 'minitest', '>= 5.0.0'
4
4
  require 'minitest/autorun'
5
5
  require_relative 'binary'
6
6
 
7
- # Test data version:
8
- # 82eb00d
7
+ # Common test data version: 969717d
9
8
  class BinaryTest < Minitest::Test
10
9
  def test_binary_0_is_decimal_0
11
10
  # skip
@@ -81,6 +80,7 @@ class BinaryTest < Minitest::Test
81
80
  skip
82
81
  assert_raises(ArgumentError) { Binary.to_decimal('001 nope') }
83
82
  end
83
+
84
84
  # Problems in exercism evolve over time, as we find better ways to ask
85
85
  # questions.
86
86
  # The version number refers to the version of the problem you solved,
@@ -97,6 +97,7 @@ class BinaryTest < Minitest::Test
97
97
  #
98
98
  # If you are curious, read more about constants on RubyDoc:
99
99
  # http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
100
+
100
101
  def test_bookkeeping
101
102
  skip
102
103
  assert_equal 3, BookKeeping::VERSION
@@ -5,13 +5,16 @@ require 'minitest/autorun'
5
5
  require_relative 'binary'
6
6
 
7
7
  # Common test data version: <%= abbreviated_commit_hash %>
8
- class BinaryTest < Minitest::Test<% test_cases.each do |test_case| %>
8
+ class BinaryTest < Minitest::Test
9
+ <% test_cases.each do |test_case| %>
9
10
  def <%= test_case.name %>
10
11
  <%= test_case.skipped %>
11
- <%= test_case.assertion %>
12
+ <%= test_case.workload %>
12
13
  end
14
+
13
15
  <% end %>
14
16
  <%= IO.read(XRUBY_LIB + '/bookkeeping.md') %>
17
+
15
18
  def test_bookkeeping
16
19
  skip
17
20
  assert_equal <%= version %>, BookKeeping::VERSION
@@ -3,207 +3,206 @@ gem 'minitest', '>= 5.0.0'
3
3
  require 'minitest/autorun'
4
4
  require_relative 'bowling'
5
5
 
6
- # Test data version: c59c2c4
7
- #
6
+ # Common test data version: 3cf5eb9
8
7
  class BowlingTest < Minitest::Test
9
8
  def setup
10
9
  @game = Game.new
11
10
  end
12
11
 
13
- def roll(rolls)
12
+ def record(rolls)
14
13
  rolls.each { |pins| @game.roll(pins) }
15
14
  end
16
15
 
17
16
  def test_should_be_able_to_score_a_game_with_all_zeros
18
17
  # skip
19
- roll([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
18
+ record([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
20
19
  assert_equal 0, @game.score
21
20
  end
22
21
 
23
22
  def test_should_be_able_to_score_a_game_with_no_strikes_or_spares
24
23
  skip
25
- roll([3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6])
24
+ record([3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6])
26
25
  assert_equal 90, @game.score
27
26
  end
28
27
 
29
28
  def test_a_spare_followed_by_zeros_is_worth_ten_points
30
29
  skip
31
- roll([6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
30
+ record([6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
32
31
  assert_equal 10, @game.score
33
32
  end
34
33
 
35
34
  def test_points_scored_in_the_roll_after_a_spare_are_counted_twice
36
35
  skip
37
- roll([6, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
36
+ record([6, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
38
37
  assert_equal 16, @game.score
39
38
  end
40
39
 
41
40
  def test_consecutive_spares_each_get_a_one_roll_bonus
42
41
  skip
43
- roll([5, 5, 3, 7, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
42
+ record([5, 5, 3, 7, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
44
43
  assert_equal 31, @game.score
45
44
  end
46
45
 
47
46
  def test_a_spare_in_the_last_frame_gets_a_one_roll_bonus_that_is_counted_once
48
47
  skip
49
- roll([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 3, 7])
48
+ record([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 3, 7])
50
49
  assert_equal 17, @game.score
51
50
  end
52
51
 
53
52
  def test_a_strike_earns_ten_points_in_a_frame_with_a_single_roll
54
53
  skip
55
- roll([10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
54
+ record([10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
56
55
  assert_equal 10, @game.score
57
56
  end
58
57
 
59
58
  def test_points_scored_in_the_two_rolls_after_a_strike_are_counted_twice_as_a_bonus
60
59
  skip
61
- roll([10, 5, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
60
+ record([10, 5, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
62
61
  assert_equal 26, @game.score
63
62
  end
64
63
 
65
64
  def test_consecutive_strikes_each_get_the_two_roll_bonus
66
65
  skip
67
- roll([10, 10, 10, 5, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
66
+ record([10, 10, 10, 5, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
68
67
  assert_equal 81, @game.score
69
68
  end
70
69
 
71
70
  def test_a_strike_in_the_last_frame_gets_a_two_roll_bonus_that_is_counted_once
72
71
  skip
73
- roll([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7, 1])
72
+ record([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7, 1])
74
73
  assert_equal 18, @game.score
75
74
  end
76
75
 
77
76
  def test_rolling_a_spare_with_the_two_roll_bonus_does_not_get_a_bonus_roll
78
77
  skip
79
- roll([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7, 3])
78
+ record([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 7, 3])
80
79
  assert_equal 20, @game.score
81
80
  end
82
81
 
83
82
  def test_strikes_with_the_two_roll_bonus_do_not_get_bonus_rolls
84
83
  skip
85
- roll([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10])
84
+ record([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10])
86
85
  assert_equal 30, @game.score
87
86
  end
88
87
 
89
88
  def test_a_strike_with_the_one_roll_bonus_after_a_spare_in_the_last_frame_does_not_get_a_bonus
90
89
  skip
91
- roll([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 3, 10])
90
+ record([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 3, 10])
92
91
  assert_equal 20, @game.score
93
92
  end
94
93
 
95
94
  def test_all_strikes_is_a_perfect_game
96
95
  skip
97
- roll([10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10])
96
+ record([10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10])
98
97
  assert_equal 300, @game.score
99
98
  end
100
99
 
101
100
  def test_rolls_can_not_score_negative_points
102
101
  skip
102
+ record([])
103
103
  assert_raises Game::BowlingError do
104
- roll([-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
105
- @game.score
104
+ @game.roll(-1)
106
105
  end
107
106
  end
108
107
 
109
108
  def test_a_roll_can_not_score_more_than_10_points
110
109
  skip
110
+ record([])
111
111
  assert_raises Game::BowlingError do
112
- roll([11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
113
- @game.score
112
+ @game.roll(11)
114
113
  end
115
114
  end
116
115
 
117
116
  def test_two_rolls_in_a_frame_can_not_score_more_than_10_points
118
117
  skip
118
+ record([5])
119
119
  assert_raises Game::BowlingError do
120
- roll([5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
121
- @game.score
120
+ @game.roll(6)
122
121
  end
123
122
  end
124
123
 
125
124
  def test_bonus_roll_after_a_strike_in_the_last_frame_can_not_score_more_than_10_points
126
125
  skip
126
+ record([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10])
127
127
  assert_raises Game::BowlingError do
128
- roll([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11])
129
- @game.score
128
+ @game.roll(11)
130
129
  end
131
130
  end
132
131
 
133
132
  def test_two_bonus_rolls_after_a_strike_in_the_last_frame_can_not_score_more_than_10_points
134
133
  skip
134
+ record([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 5])
135
135
  assert_raises Game::BowlingError do
136
- roll([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 5, 6])
137
- @game.score
136
+ @game.roll(6)
138
137
  end
139
138
  end
140
139
 
141
140
  def test_two_bonus_rolls_after_a_strike_in_the_last_frame_can_score_more_than_10_points_if_one_is_a_strike
142
141
  skip
143
- roll([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 6])
142
+ record([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 6])
144
143
  assert_equal 26, @game.score
145
144
  end
146
145
 
147
146
  def test_the_second_bonus_rolls_after_a_strike_in_the_last_frame_can_not_be_a_strike_if_the_first_one_is_not_a_strike
148
147
  skip
148
+ record([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 6])
149
149
  assert_raises Game::BowlingError do
150
- roll([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 6, 10])
151
- @game.score
150
+ @game.roll(10)
152
151
  end
153
152
  end
154
153
 
155
154
  def test_second_bonus_roll_after_a_strike_in_the_last_frame_can_not_score_than_10_points
156
155
  skip
156
+ record([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10])
157
157
  assert_raises Game::BowlingError do
158
- roll([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 11])
159
- @game.score
158
+ @game.roll(11)
160
159
  end
161
160
  end
162
161
 
163
162
  def test_an_unstarted_game_can_not_be_scored
164
163
  skip
164
+ record([])
165
165
  assert_raises Game::BowlingError do
166
- roll([])
167
166
  @game.score
168
167
  end
169
168
  end
170
169
 
171
170
  def test_an_incomplete_game_can_not_be_scored
172
171
  skip
172
+ record([0, 0])
173
173
  assert_raises Game::BowlingError do
174
- roll([0, 0])
175
174
  @game.score
176
175
  end
177
176
  end
178
177
 
179
- def test_a_game_with_more_than_ten_frames_can_not_be_scored
178
+ def test_cannot_roll_if_game_already_has_ten_frames
180
179
  skip
180
+ record([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
181
181
  assert_raises Game::BowlingError do
182
- roll([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
183
- @game.score
182
+ @game.roll(0)
184
183
  end
185
184
  end
186
185
 
187
186
  def test_bonus_rolls_for_a_strike_in_the_last_frame_must_be_rolled_before_score_can_be_calculated
188
187
  skip
188
+ record([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10])
189
189
  assert_raises Game::BowlingError do
190
- roll([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10])
191
190
  @game.score
192
191
  end
193
192
  end
194
193
 
195
194
  def test_both_bonus_rolls_for_a_strike_in_the_last_frame_must_be_rolled_before_score_can_be_calculated
196
195
  skip
196
+ record([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10])
197
197
  assert_raises Game::BowlingError do
198
- roll([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10])
199
198
  @game.score
200
199
  end
201
200
  end
202
201
 
203
202
  def test_bonus_roll_for_a_spare_in_the_last_frame_must_be_rolled_before_score_can_be_calculated
204
203
  skip
204
+ record([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 3])
205
205
  assert_raises Game::BowlingError do
206
- roll([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 3])
207
206
  @game.score
208
207
  end
209
208
  end