trackler 2.1.0.1 → 2.1.0.2

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 (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