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