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
@@ -4,18 +4,20 @@ require 'minitest/autorun'
|
|
4
4
|
require_relative 'word_count'
|
5
5
|
|
6
6
|
# Common test data version: <%= abbreviated_commit_hash %>
|
7
|
-
class PhraseTest < Minitest::Test
|
8
|
-
|
9
|
-
|
7
|
+
class PhraseTest < Minitest::Test
|
8
|
+
<% test_cases.each do |test_case| %>
|
9
|
+
def <%= test_case.name %>
|
10
|
+
<%= test_case.skipped %>
|
10
11
|
phrase = <%= test_case.object_under_test %>
|
11
12
|
counts = <%= test_case.expected %>
|
12
13
|
assert_equal counts, phrase.word_count
|
13
14
|
end
|
15
|
+
|
14
16
|
<% end %>
|
15
17
|
<%= IO.read(XRUBY_LIB + '/bookkeeping.md') %>
|
18
|
+
|
16
19
|
def test_bookkeeping
|
17
20
|
skip
|
18
21
|
assert_equal <%= version %>, BookKeeping::VERSION
|
19
22
|
end
|
20
23
|
end
|
21
|
-
|
@@ -3,10 +3,10 @@ gem 'minitest', '>= 5.0.0'
|
|
3
3
|
require 'minitest/autorun'
|
4
4
|
require_relative 'word_count'
|
5
5
|
|
6
|
-
#
|
7
|
-
# 5b5e807
|
6
|
+
# Common test data version: cd26d49
|
8
7
|
class PhraseTest < Minitest::Test
|
9
8
|
def test_count_one_word
|
9
|
+
# skip
|
10
10
|
phrase = Phrase.new("word")
|
11
11
|
counts = {"word"=>1}
|
12
12
|
assert_equal counts, phrase.word_count
|
@@ -97,4 +97,3 @@ class PhraseTest < Minitest::Test
|
|
97
97
|
assert_equal 1, BookKeeping::VERSION
|
98
98
|
end
|
99
99
|
end
|
100
|
-
|
@@ -2,14 +2,16 @@ require 'minitest/autorun'
|
|
2
2
|
require_relative 'wordy'
|
3
3
|
|
4
4
|
# Common test data version: <%= abbreviated_commit_hash %>
|
5
|
-
class WordyTest < Minitest::Test
|
6
|
-
|
5
|
+
class WordyTest < 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') %>
|
14
|
+
|
13
15
|
def test_bookkeeping
|
14
16
|
skip
|
15
17
|
assert_equal <%= version %>, BookKeeping::VERSION
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'minitest/autorun'
|
2
2
|
require_relative 'wordy'
|
3
3
|
|
4
|
-
#
|
4
|
+
# Common test data version: 5b8ad58
|
5
5
|
class WordyTest < Minitest::Test
|
6
6
|
def test_addition
|
7
7
|
# skip
|
@@ -121,6 +121,7 @@ class WordyTest < Minitest::Test
|
|
121
121
|
#
|
122
122
|
# If you are curious, read more about constants on RubyDoc:
|
123
123
|
# http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
|
124
|
+
|
124
125
|
def test_bookkeeping
|
125
126
|
skip
|
126
127
|
assert_equal 1, BookKeeping::VERSION
|
@@ -1,21 +1,9 @@
|
|
1
1
|
require 'exercise_cases'
|
2
2
|
|
3
|
-
class AcronymCase <
|
4
|
-
def name
|
5
|
-
'test_%s' % description.tr(' ', '_')
|
6
|
-
end
|
3
|
+
class AcronymCase < ExerciseCase
|
7
4
|
|
8
|
-
def
|
9
|
-
"Acronym.abbreviate('#{phrase}')"
|
5
|
+
def workload
|
6
|
+
assert_equal { "Acronym.abbreviate('#{phrase}')" }
|
10
7
|
end
|
11
8
|
|
12
|
-
def skipped?
|
13
|
-
index > 0
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
AcronymCases = proc do |data|
|
18
|
-
JSON.parse(data)['abbreviate']['cases'].map.with_index do |row, i|
|
19
|
-
AcronymCase.new(row.merge('index' => i))
|
20
|
-
end
|
21
9
|
end
|
@@ -1,18 +1,11 @@
|
|
1
1
|
require 'exercise_cases'
|
2
2
|
|
3
|
-
class AllYourBaseCase <
|
4
|
-
def test_name
|
5
|
-
'test_%s' % description.downcase.tr(' -', '_')
|
6
|
-
end
|
3
|
+
class AllYourBaseCase < ExerciseCase
|
7
4
|
|
8
5
|
def workload
|
9
6
|
indent(4, (assignments + assertion).join("\n")) + "\n"
|
10
7
|
end
|
11
8
|
|
12
|
-
def skipped
|
13
|
-
index.zero? ? '# skip' : 'skip'
|
14
|
-
end
|
15
|
-
|
16
9
|
private
|
17
10
|
|
18
11
|
def indent(size, text)
|
@@ -30,10 +23,10 @@ class AllYourBaseCase < OpenStruct
|
|
30
23
|
end
|
31
24
|
|
32
25
|
def assertion
|
33
|
-
return error_assertion unless
|
26
|
+
return error_assertion unless expected_value
|
34
27
|
|
35
28
|
[
|
36
|
-
"expected = #{
|
29
|
+
"expected = #{expected_value}",
|
37
30
|
"",
|
38
31
|
"converted = BaseConverter.convert(input_base, digits, output_base)",
|
39
32
|
"",
|
@@ -55,57 +48,32 @@ class AllYourBaseCase < OpenStruct
|
|
55
48
|
%q("Input base: #{input_base}, output base #{output_base}. " \\) \
|
56
49
|
"\n" + %q("Expected #{expected} but got #{converted}.")
|
57
50
|
end
|
58
|
-
end
|
59
|
-
|
60
|
-
class AllYourBaseCase::PreProcessor
|
61
|
-
class << self
|
62
|
-
attr_reader :row
|
63
|
-
|
64
|
-
def call(row)
|
65
|
-
@row = row
|
66
|
-
|
67
|
-
row.merge('expected' => expected_value)
|
68
|
-
end
|
69
|
-
|
70
|
-
private :row
|
71
|
-
private
|
72
51
|
|
73
|
-
|
74
|
-
|
52
|
+
def expected_value
|
53
|
+
return expected if expected
|
75
54
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
else
|
83
|
-
handle_special_cases
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def invalid_input_digits?
|
88
|
-
row['input_digits'].any? { |x| x < 0 || x >= row['input_base'] }
|
55
|
+
case
|
56
|
+
when invalid_input_digits? || invalid_bases? then nil
|
57
|
+
when input_digits.empty? then []
|
58
|
+
when input_of_zero? then [0]
|
59
|
+
else
|
60
|
+
handle_special_cases
|
89
61
|
end
|
62
|
+
end
|
90
63
|
|
91
|
-
|
92
|
-
|
93
|
-
|
64
|
+
def invalid_input_digits?
|
65
|
+
input_digits.any? { |x| x < 0 || x >= input_base }
|
66
|
+
end
|
94
67
|
|
95
|
-
|
96
|
-
|
97
|
-
|
68
|
+
def invalid_bases?
|
69
|
+
input_base <= 1 || output_base <= 1
|
70
|
+
end
|
98
71
|
|
99
|
-
|
100
|
-
|
101
|
-
end
|
72
|
+
def input_of_zero?
|
73
|
+
input_digits.all? { |x| x == 0 }
|
102
74
|
end
|
103
|
-
end
|
104
75
|
|
105
|
-
|
106
|
-
|
107
|
-
AllYourBaseCase.new(
|
108
|
-
AllYourBaseCase::PreProcessor.call(row).merge(index: i),
|
109
|
-
)
|
76
|
+
def handle_special_cases
|
77
|
+
[4, 2] if input_digits == [0, 6, 0]
|
110
78
|
end
|
111
79
|
end
|
@@ -1,24 +1,8 @@
|
|
1
1
|
require 'exercise_cases'
|
2
2
|
|
3
|
-
class AlphameticsCase <
|
4
|
-
def test_name
|
5
|
-
"test_#{description.tr(' ', '_')}"
|
6
|
-
end
|
7
|
-
|
8
|
-
def skipped
|
9
|
-
index.zero? ? '# skip' : 'skip'
|
10
|
-
end
|
11
|
-
|
12
|
-
def input
|
13
|
-
"'#{puzzle}'"
|
14
|
-
end
|
15
|
-
|
16
|
-
def expect
|
17
|
-
expected.nil? ? {} : expected_values
|
18
|
-
end
|
19
|
-
|
3
|
+
class AlphameticsCase < ExerciseCase
|
20
4
|
def workload
|
21
|
-
body =
|
5
|
+
body =
|
22
6
|
"input = %s\n" % input,
|
23
7
|
"expected = %s\n" % expect,
|
24
8
|
"assert_equal expected, Alphametics.solve(input)"
|
@@ -27,7 +11,7 @@ class AlphameticsCase < OpenStruct
|
|
27
11
|
|
28
12
|
def runtime_comment
|
29
13
|
if slow?
|
30
|
-
comments =
|
14
|
+
comments =
|
31
15
|
'',
|
32
16
|
"# The obvious algorithm can take a long time to solve this puzzle,\n",
|
33
17
|
"# but an optimised solution can solve it fairly quickly.\n",
|
@@ -38,8 +22,16 @@ class AlphameticsCase < OpenStruct
|
|
38
22
|
|
39
23
|
private
|
40
24
|
|
25
|
+
def input
|
26
|
+
"'#{puzzle}'"
|
27
|
+
end
|
28
|
+
|
29
|
+
def expect
|
30
|
+
expected.nil? ? {} : expected_values
|
31
|
+
end
|
32
|
+
|
41
33
|
def slow?
|
42
|
-
(expected||{}).size > 7
|
34
|
+
(expected||{}).size > 7
|
43
35
|
end
|
44
36
|
|
45
37
|
def expected_values
|
@@ -64,10 +56,3 @@ class AlphameticsCase < OpenStruct
|
|
64
56
|
end
|
65
57
|
|
66
58
|
end
|
67
|
-
|
68
|
-
AlphameticsCases = proc do |data|
|
69
|
-
JSON.parse(data)['solve']['cases'].map.with_index do |row, i|
|
70
|
-
row = row.merge('index' => i)
|
71
|
-
AlphameticsCase.new(row)
|
72
|
-
end
|
73
|
-
end
|
@@ -1,16 +1,9 @@
|
|
1
1
|
require 'exercise_cases'
|
2
2
|
|
3
|
-
class AnagramCase <
|
4
|
-
def test_name
|
5
|
-
'test_%s' % description.gsub(/[ -]/, '_')
|
6
|
-
end
|
3
|
+
class AnagramCase < ExerciseCase
|
7
4
|
|
8
5
|
def workload
|
9
|
-
indent_lines([show_comment, detector, anagram, assert].compact)
|
10
|
-
end
|
11
|
-
|
12
|
-
def skipped
|
13
|
-
index.zero? ? '# skip' : 'skip'
|
6
|
+
indent_lines([show_comment, detector, anagram, wanted, assert].compact)
|
14
7
|
end
|
15
8
|
|
16
9
|
private
|
@@ -31,14 +24,13 @@ class AnagramCase < OpenStruct
|
|
31
24
|
"anagrams = detector.match(#{candidates})"
|
32
25
|
end
|
33
26
|
|
27
|
+
def wanted
|
28
|
+
"expected = #{expected.sort}"
|
29
|
+
end
|
30
|
+
|
34
31
|
def assert
|
35
32
|
actual = expected.size > 1 ? 'anagrams.sort' : 'anagrams'
|
36
|
-
"assert_equal
|
33
|
+
"assert_equal expected, #{actual}"
|
37
34
|
end
|
38
|
-
end
|
39
35
|
|
40
|
-
AnagramCases = proc do |data|
|
41
|
-
JSON.parse(data)['cases'].map.with_index do |row, i|
|
42
|
-
AnagramCase.new(row.merge('index' => i))
|
43
|
-
end
|
44
36
|
end
|
@@ -1,25 +1,22 @@
|
|
1
1
|
require 'exercise_cases'
|
2
2
|
|
3
|
-
class BeerSongCase <
|
4
|
-
def test_name
|
5
|
-
'test_%s' % description.tr(' ', '_')
|
6
|
-
end
|
3
|
+
class BeerSongCase < ExerciseCase
|
7
4
|
|
8
5
|
def workload
|
9
|
-
"
|
6
|
+
"assert_equal expected, #{beer_song}"
|
10
7
|
end
|
11
8
|
|
12
9
|
def expected
|
13
10
|
self["expected"].gsub('\n', '"\n" \\')
|
14
11
|
end
|
15
12
|
|
16
|
-
def skipped
|
17
|
-
index.zero? ? '# skip' : 'skip'
|
18
|
-
end
|
19
|
-
|
20
13
|
private
|
21
14
|
|
22
|
-
def
|
15
|
+
def beer_song
|
16
|
+
"BeerSong.new.%s(%s)" % [property, beer_song_arguments]
|
17
|
+
end
|
18
|
+
|
19
|
+
def beer_song_arguments
|
23
20
|
if property == 'verse'
|
24
21
|
number
|
25
22
|
else
|
@@ -27,17 +24,3 @@ class BeerSongCase < OpenStruct
|
|
27
24
|
end
|
28
25
|
end
|
29
26
|
end
|
30
|
-
|
31
|
-
BeerSongCases = proc do |data|
|
32
|
-
i = 0
|
33
|
-
cases = []
|
34
|
-
JSON.parse(data)["cases"].each do |section|
|
35
|
-
section["cases"].each do |tests|
|
36
|
-
tests["cases"].each do |test|
|
37
|
-
cases << BeerSongCase.new(test.merge('index' => i))
|
38
|
-
i += 1
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
cases
|
43
|
-
end
|
@@ -1,29 +1,22 @@
|
|
1
1
|
require 'exercise_cases'
|
2
2
|
|
3
|
-
class BinaryCase <
|
4
|
-
def name
|
5
|
-
'test_%s' % description.gsub(/[ -]/, '_')
|
6
|
-
end
|
3
|
+
class BinaryCase < ExerciseCase
|
7
4
|
|
8
|
-
def
|
5
|
+
def workload
|
9
6
|
raises_error? ? error_assertion : equality_assertion
|
10
7
|
end
|
11
8
|
|
12
|
-
def skipped
|
13
|
-
index.zero? ? '# skip' : 'skip'
|
14
|
-
end
|
15
|
-
|
16
9
|
private
|
17
10
|
|
18
11
|
def error_assertion
|
19
|
-
"assert_raises(ArgumentError) { #{
|
12
|
+
"assert_raises(ArgumentError) { #{test_case} }"
|
20
13
|
end
|
21
14
|
|
22
15
|
def equality_assertion
|
23
|
-
"assert_equal #{expected}, #{
|
16
|
+
"assert_equal #{expected}, #{test_case}"
|
24
17
|
end
|
25
18
|
|
26
|
-
def
|
19
|
+
def test_case
|
27
20
|
"Binary.to_decimal('#{binary}')"
|
28
21
|
end
|
29
22
|
|
@@ -31,9 +24,3 @@ class BinaryCase < OpenStruct
|
|
31
24
|
expected.nil?
|
32
25
|
end
|
33
26
|
end
|
34
|
-
|
35
|
-
BinaryCases = proc do |data|
|
36
|
-
JSON.parse(data)['decimal'].map.with_index do |row, i|
|
37
|
-
BinaryCase.new(row.merge('index' => i))
|
38
|
-
end
|
39
|
-
end
|
@@ -1,13 +1,6 @@
|
|
1
1
|
require 'exercise_cases'
|
2
2
|
|
3
|
-
class BowlingCase <
|
4
|
-
def test_name
|
5
|
-
"test_#{description.downcase.tr(' ', '_')}"
|
6
|
-
end
|
7
|
-
|
8
|
-
def skipped
|
9
|
-
index.zero? ? '# skip' : 'skip'
|
10
|
-
end
|
3
|
+
class BowlingCase < ExerciseCase
|
11
4
|
|
12
5
|
def workload
|
13
6
|
indent_lines(assert)
|
@@ -15,34 +8,41 @@ class BowlingCase < OpenStruct
|
|
15
8
|
|
16
9
|
private
|
17
10
|
|
18
|
-
def
|
19
|
-
"
|
11
|
+
def roll_previous
|
12
|
+
"record(#{previous_rolls})"
|
20
13
|
end
|
21
14
|
|
22
15
|
def assert
|
23
16
|
if assert_error?
|
24
|
-
|
25
|
-
'assert_raises Game::BowlingError do',
|
26
|
-
" #{roll}",
|
27
|
-
' @game.score',
|
28
|
-
'end'
|
29
|
-
]
|
17
|
+
property == 'score' ? score_raises : roll_raises
|
30
18
|
else
|
31
|
-
[
|
19
|
+
[roll_previous, "assert_equal #{expected}, @game.score"]
|
32
20
|
end
|
33
21
|
end
|
34
22
|
|
23
|
+
def roll_raises
|
24
|
+
[
|
25
|
+
roll_previous,
|
26
|
+
'assert_raises Game::BowlingError do',
|
27
|
+
' @game.roll(' + roll.to_s + ')',
|
28
|
+
'end'
|
29
|
+
]
|
30
|
+
end
|
31
|
+
|
32
|
+
def score_raises
|
33
|
+
[
|
34
|
+
roll_previous,
|
35
|
+
'assert_raises Game::BowlingError do',
|
36
|
+
' @game.score',
|
37
|
+
'end'
|
38
|
+
]
|
39
|
+
end
|
40
|
+
|
35
41
|
def assert_error?
|
36
|
-
expected
|
42
|
+
expected.respond_to?(:key?) && expected.key?('error')
|
37
43
|
end
|
38
44
|
|
39
45
|
def indent_lines(code)
|
40
46
|
code.join("\n" + ' ' * 4)
|
41
47
|
end
|
42
48
|
end
|
43
|
-
|
44
|
-
BowlingCases = proc do |data|
|
45
|
-
JSON.parse(data)['score']['cases'].map.with_index do |row, i|
|
46
|
-
BowlingCase.new(row.merge('index' => i))
|
47
|
-
end
|
48
|
-
end
|