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.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/tracks/elixir/config.json +17 -0
- data/tracks/elixir/exercises/matrix/example.exs +63 -0
- data/tracks/elixir/exercises/matrix/matrix.exs +48 -0
- data/tracks/elixir/exercises/matrix/matrix_test.exs +58 -0
- data/tracks/elixir/exercises/twelve-days/example.exs +53 -0
- data/tracks/elixir/exercises/twelve-days/twelve_days.exs +25 -0
- data/tracks/elixir/exercises/twelve-days/twelve_days_test.exs +86 -0
- data/tracks/go/exercises/change/.meta/gen.go +1 -3
- data/tracks/go/exercises/change/cases_test.go +1 -0
- data/tracks/go/exercises/forth/example.go +1 -1
- data/tracks/go/exercises/raindrops/.meta/gen.go +1 -3
- data/tracks/go/exercises/raindrops/cases_test.go +5 -1
- data/tracks/go/exercises/raindrops/example.go +1 -1
- data/tracks/go/exercises/raindrops/raindrops.go +1 -1
- data/tracks/go/exercises/raindrops/raindrops_test.go +1 -1
- data/tracks/java/config.json +5 -5
- data/tracks/java/exercises/isogram/src/example/java/IsogramChecker.java +23 -27
- data/tracks/java/exercises/isogram/src/test/java/IsogramCheckerTest.java +77 -0
- data/tracks/javascript/config.json +9 -0
- data/tracks/javascript/exercises/proverb/example.js +36 -0
- data/tracks/javascript/exercises/proverb/proverb.spec.js +78 -0
- data/tracks/ruby/README.md +0 -33
- data/tracks/ruby/exercises/acronym/.meta/.version +1 -1
- data/tracks/ruby/exercises/acronym/acronym_test.rb +14 -9
- data/tracks/ruby/exercises/acronym/example.rb +1 -1
- data/tracks/ruby/exercises/acronym/example.tt +7 -4
- data/tracks/ruby/exercises/all-your-base/all_your_base_test.rb +1 -1
- data/tracks/ruby/exercises/all-your-base/example.tt +4 -3
- data/tracks/ruby/exercises/alphametics/alphametics_test.rb +2 -1
- data/tracks/ruby/exercises/alphametics/example.tt +2 -1
- data/tracks/ruby/exercises/anagram/anagram_test.rb +35 -20
- data/tracks/ruby/exercises/anagram/example.rb +1 -1
- data/tracks/ruby/exercises/anagram/example.tt +5 -2
- data/tracks/ruby/exercises/beer-song/beer_song_test.rb +1 -0
- data/tracks/ruby/exercises/beer-song/example.tt +6 -4
- data/tracks/ruby/exercises/binary/binary_test.rb +3 -2
- data/tracks/ruby/exercises/binary/example.tt +5 -2
- data/tracks/ruby/exercises/bowling/bowling_test.rb +39 -40
- data/tracks/ruby/exercises/bowling/example.tt +2 -2
- data/tracks/ruby/exercises/bracket-push/.meta/.version +1 -1
- data/tracks/ruby/exercises/bracket-push/bracket_push_test.rb +7 -3
- data/tracks/ruby/exercises/bracket-push/example.rb +1 -1
- data/tracks/ruby/exercises/bracket-push/example.tt +5 -2
- data/tracks/ruby/exercises/clock/clock_test.rb +40 -41
- data/tracks/ruby/exercises/clock/example.tt +5 -2
- data/tracks/ruby/exercises/connect/.meta/.version +1 -1
- data/tracks/ruby/exercises/connect/connect_test.rb +20 -3
- data/tracks/ruby/exercises/connect/example.rb +1 -1
- data/tracks/ruby/exercises/connect/example.tt +3 -1
- data/tracks/ruby/exercises/custom-set/custom_set_test.rb +1 -2
- data/tracks/ruby/exercises/custom-set/example.tt +5 -2
- data/tracks/ruby/exercises/difference-of-squares/difference_of_squares_test.rb +6 -5
- data/tracks/ruby/exercises/difference-of-squares/example.tt +8 -4
- data/tracks/ruby/exercises/dominoes/dominoes_test.rb +1 -1
- data/tracks/ruby/exercises/dominoes/example.tt +1 -1
- data/tracks/ruby/exercises/gigasecond/.meta/.version +1 -1
- data/tracks/ruby/exercises/gigasecond/example.rb +1 -1
- data/tracks/ruby/exercises/gigasecond/example.tt +7 -5
- data/tracks/ruby/exercises/gigasecond/gigasecond_test.rb +11 -16
- data/tracks/ruby/exercises/grains/example.tt +5 -3
- data/tracks/ruby/exercises/grains/grains_test.rb +2 -1
- data/tracks/ruby/exercises/hello-world/example.tt +1 -1
- data/tracks/ruby/exercises/hello-world/hello_world_test.rb +1 -1
- data/tracks/ruby/exercises/isogram/.meta/.version +1 -1
- data/tracks/ruby/exercises/isogram/example.rb +1 -1
- data/tracks/ruby/exercises/isogram/example.tt +6 -4
- data/tracks/ruby/exercises/isogram/isogram_test.rb +18 -10
- data/tracks/ruby/exercises/largest-series-product/.meta/.version +1 -1
- data/tracks/ruby/exercises/largest-series-product/example.rb +1 -1
- data/tracks/ruby/exercises/largest-series-product/example.tt +7 -5
- data/tracks/ruby/exercises/largest-series-product/largest_series_product_test.rb +11 -21
- data/tracks/ruby/exercises/leap/.meta/.version +1 -1
- data/tracks/ruby/exercises/leap/example.rb +1 -1
- data/tracks/ruby/exercises/leap/example.tt +6 -4
- data/tracks/ruby/exercises/leap/leap_test.rb +11 -25
- data/tracks/ruby/exercises/nth-prime/example.tt +7 -5
- data/tracks/ruby/exercises/nth-prime/nth_prime_test.rb +2 -3
- data/tracks/ruby/exercises/pangram/example.tt +5 -3
- data/tracks/ruby/exercises/pangram/pangram_test.rb +2 -1
- data/tracks/ruby/exercises/queen-attack/example.tt +2 -2
- data/tracks/ruby/exercises/queen-attack/queen_attack_test.rb +14 -15
- data/tracks/ruby/exercises/raindrops/example.tt +7 -4
- data/tracks/ruby/exercises/raindrops/raindrops_test.rb +38 -38
- data/tracks/ruby/exercises/rna-transcription/example.tt +6 -3
- data/tracks/ruby/exercises/rna-transcription/rna_transcription_test.rb +4 -5
- data/tracks/ruby/exercises/roman-numerals/example.tt +7 -4
- data/tracks/ruby/exercises/roman-numerals/roman_numerals_test.rb +5 -5
- data/tracks/ruby/exercises/run-length-encoding/.meta/.version +1 -1
- data/tracks/ruby/exercises/run-length-encoding/example.rb +1 -1
- data/tracks/ruby/exercises/run-length-encoding/example.tt +6 -3
- data/tracks/ruby/exercises/run-length-encoding/run_length_encoding_test.rb +70 -28
- data/tracks/ruby/exercises/say/example.tt +7 -5
- data/tracks/ruby/exercises/say/say_test.rb +3 -2
- data/tracks/ruby/exercises/sieve/example.tt +4 -1
- data/tracks/ruby/exercises/sieve/sieve_test.rb +1 -3
- data/tracks/ruby/exercises/tournament/example.tt +4 -1
- data/tracks/ruby/exercises/tournament/tournament_test.rb +1 -2
- data/tracks/ruby/exercises/transpose/example.tt +5 -2
- data/tracks/ruby/exercises/transpose/transpose_test.rb +1 -2
- data/tracks/ruby/exercises/triangle/example.tt +5 -3
- data/tracks/ruby/exercises/triangle/triangle_test.rb +1 -3
- data/tracks/ruby/exercises/two-bucket/example.tt +7 -4
- data/tracks/ruby/exercises/two-bucket/two_bucket_test.rb +9 -9
- data/tracks/ruby/exercises/word-count/example.tt +6 -4
- data/tracks/ruby/exercises/word-count/word_count_test.rb +2 -3
- data/tracks/ruby/exercises/wordy/example.tt +5 -3
- data/tracks/ruby/exercises/wordy/wordy_test.rb +2 -1
- data/tracks/ruby/lib/acronym_cases.rb +3 -15
- data/tracks/ruby/lib/all_your_base_cases.rb +22 -54
- data/tracks/ruby/lib/alphametics_cases.rb +12 -27
- data/tracks/ruby/lib/anagram_cases.rb +7 -15
- data/tracks/ruby/lib/beer_song_cases.rb +7 -24
- data/tracks/ruby/lib/binary_cases.rb +5 -18
- data/tracks/ruby/lib/bowling_cases.rb +24 -24
- data/tracks/ruby/lib/bracket_push_cases.rb +6 -21
- data/tracks/ruby/lib/clock_cases.rb +6 -25
- data/tracks/ruby/lib/connect_cases.rb +2 -20
- data/tracks/ruby/lib/custom_set_cases.rb +14 -35
- data/tracks/ruby/lib/difference_of_squares_cases.rb +5 -26
- data/tracks/ruby/lib/dominoes_cases.rb +2 -11
- data/tracks/ruby/lib/generator/case_values.rb +25 -0
- data/tracks/ruby/lib/generator/exercise_cases.rb +11 -0
- data/tracks/ruby/lib/generator/files/track_files.rb +7 -2
- data/tracks/ruby/lib/generator/template_values.rb +12 -7
- data/tracks/ruby/lib/gigasecond_cases.rb +4 -18
- data/tracks/ruby/lib/grains_cases.rb +11 -38
- data/tracks/ruby/lib/hamming_cases.rb +0 -6
- data/tracks/ruby/lib/hello_world_cases.rb +2 -14
- data/tracks/ruby/lib/isogram_cases.rb +8 -16
- data/tracks/ruby/lib/largest_series_product_cases.rb +10 -16
- data/tracks/ruby/lib/leap_cases.rb +3 -16
- data/tracks/ruby/lib/luhn_cases.rb +0 -6
- data/tracks/ruby/lib/nth_prime_cases.rb +11 -13
- data/tracks/ruby/lib/ocr_numbers_cases.rb +0 -5
- data/tracks/ruby/lib/pangram_cases.rb +2 -19
- data/tracks/ruby/lib/pig_latin_cases.rb +0 -5
- data/tracks/ruby/lib/queen_attack_cases.rb +14 -37
- data/tracks/ruby/lib/raindrops_cases.rb +3 -15
- data/tracks/ruby/lib/rna_transcription_cases.rb +2 -14
- data/tracks/ruby/lib/roman_numerals_cases.rb +7 -10
- data/tracks/ruby/lib/run_length_encoding_cases.rb +4 -25
- data/tracks/ruby/lib/say_cases.rb +3 -14
- data/tracks/ruby/lib/sieve_cases.rb +1 -15
- data/tracks/ruby/lib/tournament_cases.rb +1 -14
- data/tracks/ruby/lib/transpose_cases.rb +1 -14
- data/tracks/ruby/lib/triangle_cases.rb +8 -27
- data/tracks/ruby/lib/two_bucket_cases.rb +7 -17
- data/tracks/ruby/lib/word_count_cases.rb +1 -13
- data/tracks/ruby/lib/wordy_cases.rb +4 -27
- data/tracks/ruby/test/fixtures/metadata/exercises/complex/canonical-data.json +45 -0
- data/tracks/ruby/test/fixtures/xruby/lib/beta_cases.rb +7 -0
- data/tracks/ruby/test/generator/case_values_test.rb +30 -0
- data/tracks/ruby/test/generator/files/track_files_test.rb +2 -3
- data/tracks/ruby/test/generator/template_values_test.rb +44 -3
- data/tracks/ruby/test/wordy_cases_test.rb +4 -65
- metadata +14 -4
- data/tracks/java/exercises/isogram/src/test/java/IsogramTest.java +0 -80
- data/tracks/ruby/test/grains_cases_test.rb +0 -103
@@ -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
|
6
|
-
|
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
|
-
#
|
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.
|
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
|
-
#
|
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
|
-
|
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
|
-
|
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
|
-
|
28
|
+
expected = []
|
29
|
+
assert_equal expected, anagrams
|
28
30
|
end
|
29
31
|
|
30
|
-
def
|
32
|
+
def test_detects_two_anagrams
|
31
33
|
skip
|
32
34
|
detector = Anagram.new('master')
|
33
35
|
anagrams = detector.match(["stream", "pigeon", "maters"])
|
34
|
-
|
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
|
-
|
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
|
-
|
52
|
+
expected = ["inlets"]
|
53
|
+
assert_equal expected, anagrams
|
49
54
|
end
|
50
55
|
|
51
|
-
def
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
@@ -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
|
8
|
-
|
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
|
9
|
-
|
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
|
-
|
14
|
-
|
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
|
-
#
|
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
|
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.
|
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
|
-
#
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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(
|
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(
|
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(
|
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(
|
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(
|
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
|
-
|
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(
|
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(
|
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
|
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(
|
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
|