trackler 1.0.4.0 → 1.0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/common/CONTRIBUTING.md +17 -2
- data/common/exercises/anagram/canonical-data.json +0 -14
- data/common/exercises/pig-latin/canonical-data.json +6 -1
- data/common/exercises/raindrops/description.md +4 -4
- data/common/exercises/raindrops/metadata.yml +1 -1
- data/common/exercises/roman-numerals/metadata.yml +1 -1
- data/lib/trackler/version.rb +1 -1
- data/tracks/c/config.json +12 -1
- data/tracks/c/exercises/roman-numerals/makefile +16 -0
- data/tracks/c/exercises/roman-numerals/src/example.c +43 -0
- data/tracks/c/exercises/roman-numerals/src/example.h +6 -0
- data/tracks/c/exercises/roman-numerals/test/test_roman_numerals.c +126 -0
- data/tracks/c/exercises/roman-numerals/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/roman-numerals/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/roman-numerals/test/vendor/unity_internals.h +701 -0
- data/tracks/clojure/exercises/flatten-array/project.clj +4 -0
- data/tracks/csharp/exercises/protein-translation/ProteinTranslationTest.cs +1 -1
- data/tracks/elixir/exercises/bowling/bowling_test.exs +157 -62
- data/tracks/elixir/exercises/bowling/example.exs +33 -4
- data/tracks/erlang/config.json +176 -36
- data/tracks/go/.travis.yml +7 -1
- data/tracks/go/bin/test-without-stubs +29 -0
- data/tracks/go/exercises/robot-simulator/defs.go +1 -1
- data/tracks/go/exercises/variable-length-quantity/variable_length_quantity_test.go +31 -25
- data/tracks/haskell/.travis.yml +9 -5
- data/tracks/haskell/config.json +127 -121
- data/tracks/haskell/exercises/leap/src/LeapYear.hs +1 -1
- data/tracks/haskell/exercises/space-age/HINTS.md +14 -2
- data/tracks/haskell/exercises/space-age/{src/Example.hs → examples/success-double/SpaceAge.hs} +0 -0
- data/tracks/haskell/exercises/space-age/examples/success-double/package.yaml +19 -0
- data/tracks/haskell/exercises/space-age/examples/success-rational/SpaceAge.hs +24 -0
- data/tracks/haskell/exercises/space-age/examples/success-rational/package.yaml +19 -0
- data/tracks/haskell/exercises/space-age/src/SpaceAge.hs +4 -1
- data/tracks/haskell/exercises/space-age/test/Tests.hs +12 -5
- data/tracks/haskell/exercises/word-count/HINTS.md +21 -0
- data/tracks/haskell/exercises/word-count/examples/success-newtype/WordCount.hs +31 -0
- data/tracks/haskell/exercises/word-count/examples/success-newtype/package.yaml +21 -0
- data/tracks/haskell/exercises/word-count/examples/success-simple/WordCount.hs +13 -0
- data/tracks/haskell/exercises/word-count/examples/success-simple/package.yaml +20 -0
- data/tracks/haskell/exercises/word-count/package.yaml +0 -2
- data/tracks/haskell/exercises/word-count/src/WordCount.hs +2 -1
- data/tracks/haskell/exercises/word-count/test/Tests.hs +15 -6
- data/tracks/haskell/exercises/zebra-puzzle/package.yaml +19 -0
- data/tracks/haskell/exercises/zebra-puzzle/src/Example.hs +113 -0
- data/tracks/haskell/exercises/zebra-puzzle/src/ZebraPuzzle.hs +12 -0
- data/tracks/haskell/exercises/zebra-puzzle/stack.yaml +1 -0
- data/tracks/haskell/exercises/zebra-puzzle/test/Tests.hs +13 -0
- data/tracks/javascript/exercises/beer-song/beer-song.spec.js +5 -0
- data/tracks/lisp/config.json +147 -0
- data/tracks/ocaml/config.json +12 -0
- data/tracks/ocaml/exercises/atbash-cipher/.merlin +5 -0
- data/tracks/ocaml/exercises/atbash-cipher/HINTS.md +17 -0
- data/tracks/ocaml/exercises/atbash-cipher/Makefile +11 -0
- data/tracks/ocaml/exercises/atbash-cipher/atbash_cipher.mli +5 -0
- data/tracks/ocaml/exercises/atbash-cipher/example.ml +47 -0
- data/tracks/ocaml/exercises/atbash-cipher/test.ml +37 -0
- data/tracks/ocaml/exercises/meetup/.merlin +5 -0
- data/tracks/ocaml/exercises/meetup/Makefile +11 -0
- data/tracks/ocaml/exercises/meetup/example.ml +63 -0
- data/tracks/ocaml/exercises/meetup/meetup.mli +7 -0
- data/tracks/ocaml/exercises/meetup/test.ml +786 -0
- data/tracks/php/exercises/bowling/bowling_test.php +233 -10
- data/tracks/php/exercises/bowling/example.php +49 -6
- data/tracks/python/.travis.yml +5 -0
- data/tracks/python/config.json +33 -1
- data/tracks/python/exercises/flatten-array/example.py +18 -0
- data/tracks/python/exercises/flatten-array/flatten_array_test.py +40 -0
- data/tracks/python/exercises/robot-name/robot_name_test.py +8 -2
- data/tracks/r/config.json +32 -8
- data/tracks/ruby/bin/enable-executable +9 -5
- data/tracks/ruby/bin/executable-tests-check +7 -3
- data/tracks/ruby/bin/local-status-check +4 -4
- data/tracks/ruby/config.json +8 -1
- data/tracks/ruby/exercises/acronym/acronym_test.rb +0 -1
- data/tracks/ruby/exercises/anagram/.version +1 -0
- data/tracks/ruby/exercises/anagram/anagram_test.rb +101 -31
- data/tracks/ruby/exercises/anagram/example.rb +4 -0
- data/tracks/ruby/exercises/anagram/example.tt +19 -0
- data/tracks/ruby/exercises/gigasecond/.version +1 -1
- data/tracks/ruby/exercises/gigasecond/example.rb +1 -1
- data/tracks/ruby/exercises/gigasecond/gigasecond_test.rb +2 -2
- data/tracks/ruby/exercises/isogram/.version +1 -0
- data/tracks/ruby/exercises/isogram/example.rb +10 -0
- data/tracks/ruby/exercises/isogram/example.tt +20 -0
- data/tracks/ruby/exercises/isogram/isogram_test.rb +90 -0
- data/tracks/ruby/exercises/poker/example.rb +97 -39
- data/tracks/ruby/exercises/poker/poker_test.rb +67 -36
- data/tracks/ruby/exercises/sieve/.version +1 -0
- data/tracks/ruby/exercises/sieve/example.rb +4 -0
- data/tracks/ruby/exercises/sieve/example.tt +21 -0
- data/tracks/ruby/exercises/sieve/sieve_test.rb +36 -13
- data/tracks/ruby/exercises/word-count/example.tt +4 -3
- data/tracks/ruby/exercises/word-count/word_count_test.rb +38 -48
- data/tracks/ruby/lib/anagram_cases.rb +42 -0
- data/tracks/ruby/lib/isogram_cases.rb +24 -0
- data/tracks/ruby/lib/sieve_cases.rb +33 -0
- data/tracks/ruby/lib/word_count_cases.rb +19 -0
- data/tracks/scala/config.json +21 -0
- data/tracks/scala/docs/RESOURCES.md +1 -0
- data/tracks/scala/exercises/bracket-push/build.sbt +4 -0
- data/tracks/scala/exercises/bracket-push/example.scala +23 -0
- data/tracks/scala/exercises/bracket-push/src/main/scala/.keep +0 -0
- data/tracks/scala/exercises/bracket-push/src/test/scala/BracketsTest.scala +68 -0
- data/tracks/scala/exercises/change/src/test/scala/ChangeTest.scala +7 -0
- data/tracks/scala/exercises/sgf-parsing/build.sbt +7 -0
- data/tracks/scala/exercises/sgf-parsing/example.scala +66 -0
- data/tracks/scala/exercises/sgf-parsing/src/main/scala/.keep +0 -0
- data/tracks/scala/exercises/sgf-parsing/src/main/scala/Sgf.scala +17 -0
- data/tracks/scala/exercises/sgf-parsing/src/test/scala/SgfTest.scala +66 -0
- data/tracks/scala/exercises/zebra-puzzle/build.sbt +3 -0
- data/tracks/scala/exercises/zebra-puzzle/example.scala +152 -0
- data/tracks/scala/exercises/zebra-puzzle/src/main/scala/.keep +0 -0
- data/tracks/scala/exercises/zebra-puzzle/src/main/scala/ZebraPuzzle.scala +14 -0
- data/tracks/scala/exercises/zebra-puzzle/src/test/scala/ZebraPuzzleTest.scala +11 -0
- data/tracks/scala/testgen/src/main/scala/BracketPushTestGenerator.scala +44 -0
- metadata +63 -3
- data/tracks/haskell/exercises/word-count/src/Example.hs +0 -8
@@ -0,0 +1 @@
|
|
1
|
+
1
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
gem 'minitest', '>= 5.0.0'
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require_relative 'sieve'
|
5
|
+
|
6
|
+
# Test data version:
|
7
|
+
# <%= sha1 %>
|
8
|
+
|
9
|
+
class SieveTest < Minitest::Test<% test_cases.each do |test_case| %>
|
10
|
+
def <%= test_case.name %>
|
11
|
+
<%= test_case.skipped %>
|
12
|
+
expected = <%= test_case.expected_string %>
|
13
|
+
assert_equal expected, Sieve.new(<%= test_case.limit %>).primes
|
14
|
+
end
|
15
|
+
<% end %>
|
16
|
+
<%= IO.read(XRUBY_LIB + '/bookkeeping.md') %>
|
17
|
+
def test_bookkeeping
|
18
|
+
skip
|
19
|
+
assert_equal <%= version.next %>, BookKeeping::VERSION
|
20
|
+
end
|
21
|
+
end
|
@@ -3,8 +3,12 @@ gem 'minitest', '>= 5.0.0'
|
|
3
3
|
require 'minitest/autorun'
|
4
4
|
require_relative 'sieve'
|
5
5
|
|
6
|
+
# Test data version:
|
7
|
+
# 43d62d1
|
8
|
+
|
6
9
|
class SieveTest < Minitest::Test
|
7
10
|
def test_no_primes_under_two
|
11
|
+
# skip
|
8
12
|
expected = []
|
9
13
|
assert_equal expected, Sieve.new(1).primes
|
10
14
|
end
|
@@ -27,23 +31,42 @@ class SieveTest < Minitest::Test
|
|
27
31
|
assert_equal expected, Sieve.new(13).primes
|
28
32
|
end
|
29
33
|
|
30
|
-
def
|
34
|
+
def test_find_primes_up_to_1000
|
31
35
|
skip
|
32
36
|
expected = [
|
33
37
|
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59,
|
34
|
-
61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127,
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857,
|
44
|
-
859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947,
|
45
|
-
953, 967, 971, 977, 983, 991, 997
|
38
|
+
61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139,
|
39
|
+
149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
|
40
|
+
239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337,
|
41
|
+
347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439,
|
42
|
+
443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557,
|
43
|
+
563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653,
|
44
|
+
659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769,
|
45
|
+
773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883,
|
46
|
+
887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
|
46
47
|
]
|
47
48
|
assert_equal expected, Sieve.new(1000).primes
|
48
49
|
end
|
50
|
+
|
51
|
+
# Problems in exercism evolve over time, as we find better ways to ask
|
52
|
+
# questions.
|
53
|
+
# The version number refers to the version of the problem you solved,
|
54
|
+
# not your solution.
|
55
|
+
#
|
56
|
+
# Define a constant named VERSION inside of the top level BookKeeping
|
57
|
+
# module, which may be placed near the end of your file.
|
58
|
+
#
|
59
|
+
# In your file, it will look like this:
|
60
|
+
#
|
61
|
+
# module BookKeeping
|
62
|
+
# VERSION = 1 # Where the version number matches the one in the test.
|
63
|
+
# end
|
64
|
+
#
|
65
|
+
# If you are curious, read more about constants on RubyDoc:
|
66
|
+
# http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
|
67
|
+
|
68
|
+
def test_bookkeeping
|
69
|
+
skip
|
70
|
+
assert_equal 1, BookKeeping::VERSION
|
71
|
+
end
|
49
72
|
end
|
@@ -7,9 +7,10 @@ require_relative 'word_count'
|
|
7
7
|
# <%= sha1 %>
|
8
8
|
class PhraseTest < Minitest::Test<% test_cases.each do |test_case| %>
|
9
9
|
def <%= test_case.name %><% if test_case.skipped? %>
|
10
|
-
skip<% end
|
11
|
-
|
12
|
-
|
10
|
+
skip<% end %>
|
11
|
+
phrase = <%= test_case.object_under_test %>
|
12
|
+
counts = <%= test_case.expected %>
|
13
|
+
assert_equal counts, phrase.word_count
|
13
14
|
end
|
14
15
|
<% end %>
|
15
16
|
<%= IO.read(XRUBY_LIB + '/bookkeeping.md') %>
|
@@ -4,107 +4,97 @@ require 'minitest/autorun'
|
|
4
4
|
require_relative 'word_count'
|
5
5
|
|
6
6
|
# Test data version:
|
7
|
-
|
7
|
+
# 5b5e807
|
8
8
|
class PhraseTest < Minitest::Test
|
9
9
|
def test_count_one_word
|
10
|
-
phrase = Phrase.new(
|
11
|
-
counts = {
|
12
|
-
assert_equal counts, phrase.word_count
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_count_one_of_each
|
16
|
-
skip
|
17
|
-
phrase = Phrase.new('one of each')
|
18
|
-
counts = { 'one' => 1, 'of' => 1, 'each' => 1 }
|
10
|
+
phrase = Phrase.new("word")
|
11
|
+
counts = {"word"=>1}
|
19
12
|
assert_equal counts, phrase.word_count
|
20
13
|
end
|
21
14
|
|
22
|
-
def
|
15
|
+
def test_count_one_of_each_word
|
23
16
|
skip
|
24
|
-
phrase = Phrase.new(
|
25
|
-
counts = {
|
17
|
+
phrase = Phrase.new("one of each")
|
18
|
+
counts = {"one"=>1, "of"=>1, "each"=>1}
|
26
19
|
assert_equal counts, phrase.word_count
|
27
20
|
end
|
28
21
|
|
29
|
-
def
|
22
|
+
def test_multiple_occurrences_of_a_word
|
30
23
|
skip
|
31
|
-
phrase = Phrase.new(
|
32
|
-
|
33
|
-
counts = {
|
34
|
-
'all' => 2, 'the' => 2, 'kings' => 2,
|
35
|
-
'horses' => 1, 'and' => 1, 'men' => 1
|
36
|
-
}
|
24
|
+
phrase = Phrase.new("one fish two fish red fish blue fish")
|
25
|
+
counts = {"one"=>1, "fish"=>4, "two"=>1, "red"=>1, "blue"=>1}
|
37
26
|
assert_equal counts, phrase.word_count
|
38
27
|
end
|
39
28
|
|
40
|
-
def
|
29
|
+
def test_handles_cramped_lists
|
41
30
|
skip
|
42
|
-
phrase = Phrase.new(
|
43
|
-
counts = {
|
44
|
-
'car' => 1, 'carpet' => 1, 'as' => 1,
|
45
|
-
'java' => 1, 'javascript' => 1
|
46
|
-
}
|
31
|
+
phrase = Phrase.new("one,two,three")
|
32
|
+
counts = {"one"=>1, "two"=>1, "three"=>1}
|
47
33
|
assert_equal counts, phrase.word_count
|
48
34
|
end
|
49
35
|
|
50
|
-
def
|
36
|
+
def test_handles_expanded_lists
|
51
37
|
skip
|
52
|
-
phrase = Phrase.new(
|
53
|
-
counts = {
|
38
|
+
phrase = Phrase.new("one,\ntwo,\nthree")
|
39
|
+
counts = {"one"=>1, "two"=>1, "three"=>1}
|
54
40
|
assert_equal counts, phrase.word_count
|
55
41
|
end
|
56
42
|
|
57
|
-
def
|
43
|
+
def test_ignore_punctuation
|
58
44
|
skip
|
59
|
-
phrase = Phrase.new("
|
60
|
-
counts = {
|
45
|
+
phrase = Phrase.new("car: carpet as java: javascript!!&@$%^&")
|
46
|
+
counts = {"car"=>1, "carpet"=>1, "as"=>1, "java"=>1, "javascript"=>1}
|
61
47
|
assert_equal counts, phrase.word_count
|
62
48
|
end
|
63
49
|
|
64
50
|
def test_include_numbers
|
65
51
|
skip
|
66
|
-
phrase = Phrase.new(
|
67
|
-
counts = {
|
52
|
+
phrase = Phrase.new("testing, 1, 2 testing")
|
53
|
+
counts = {"testing"=>2, "1"=>1, "2"=>1}
|
68
54
|
assert_equal counts, phrase.word_count
|
69
55
|
end
|
70
56
|
|
71
57
|
def test_normalize_case
|
72
58
|
skip
|
73
|
-
phrase = Phrase.new(
|
74
|
-
counts = {
|
59
|
+
phrase = Phrase.new("go Go GO Stop stop")
|
60
|
+
counts = {"go"=>3, "stop"=>2}
|
75
61
|
assert_equal counts, phrase.word_count
|
76
62
|
end
|
77
63
|
|
78
64
|
def test_with_apostrophes
|
79
65
|
skip
|
80
66
|
phrase = Phrase.new("First: don't laugh. Then: don't cry.")
|
81
|
-
counts = {
|
82
|
-
'first' => 1, "don't" => 2, 'laugh' => 1,
|
83
|
-
'then' => 1, 'cry' => 1
|
84
|
-
}
|
67
|
+
counts = {"first"=>1, "don't"=>2, "laugh"=>1, "then"=>1, "cry"=>1}
|
85
68
|
assert_equal counts, phrase.word_count
|
86
69
|
end
|
87
70
|
|
88
71
|
def test_with_quotations
|
89
72
|
skip
|
90
73
|
phrase = Phrase.new("Joe can't tell between 'large' and large.")
|
91
|
-
counts = {
|
92
|
-
'joe' => 1, "can't" => 1, 'tell' => 1,
|
93
|
-
'between' => 1, 'large' => 2, 'and' => 1
|
94
|
-
}
|
74
|
+
counts = {"joe"=>1, "can't"=>1, "tell"=>1, "between"=>1, "large"=>2, "and"=>1}
|
95
75
|
assert_equal counts, phrase.word_count
|
96
76
|
end
|
97
77
|
|
98
|
-
# Problems in exercism evolve over time,
|
99
|
-
#
|
78
|
+
# Problems in exercism evolve over time, as we find better ways to ask
|
79
|
+
# questions.
|
100
80
|
# The version number refers to the version of the problem you solved,
|
101
81
|
# not your solution.
|
102
82
|
#
|
103
|
-
# Define a constant named VERSION inside of BookKeeping
|
104
|
-
#
|
83
|
+
# Define a constant named VERSION inside of the top level BookKeeping
|
84
|
+
# module, which may be placed near the end of your file.
|
85
|
+
#
|
86
|
+
# In your file, it will look like this:
|
87
|
+
#
|
88
|
+
# module BookKeeping
|
89
|
+
# VERSION = 1 # Where the version number matches the one in the test.
|
90
|
+
# end
|
91
|
+
#
|
92
|
+
# If you are curious, read more about constants on RubyDoc:
|
105
93
|
# http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
|
94
|
+
|
106
95
|
def test_bookkeeping
|
107
96
|
skip
|
108
97
|
assert_equal 1, BookKeeping::VERSION
|
109
98
|
end
|
110
99
|
end
|
100
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
class AnagramCase < OpenStruct
|
2
|
+
def test_name
|
3
|
+
'test_%s' % description.gsub(/[ -]/, '_')
|
4
|
+
end
|
5
|
+
|
6
|
+
def work_load
|
7
|
+
indent_lines([show_comment, detector, anagram, assert].compact)
|
8
|
+
end
|
9
|
+
|
10
|
+
def skipped
|
11
|
+
index.zero? ? '# skip' : 'skip'
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def indent_lines(code, indent = 2)
|
17
|
+
code.join("\n" + ' '*2*indent)
|
18
|
+
end
|
19
|
+
|
20
|
+
def show_comment
|
21
|
+
"# #{comment}" unless comment.nil?
|
22
|
+
end
|
23
|
+
|
24
|
+
def detector
|
25
|
+
"detector = Anagram.new('#{subject}')"
|
26
|
+
end
|
27
|
+
|
28
|
+
def anagram
|
29
|
+
"anagrams = detector.match(#{candidates})"
|
30
|
+
end
|
31
|
+
|
32
|
+
def assert
|
33
|
+
actual = expected.size > 1 ? 'anagrams.sort' : 'anagrams'
|
34
|
+
"assert_equal #{expected.sort}, #{actual}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
AnagramCases = proc do |data|
|
39
|
+
JSON.parse(data)['cases'].map.with_index do |row, i|
|
40
|
+
AnagramCase.new(row.merge('index' => i))
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class IsogramCase < OpenStruct
|
2
|
+
|
3
|
+
def name
|
4
|
+
format('test_%s', description)
|
5
|
+
end
|
6
|
+
|
7
|
+
def description
|
8
|
+
input.downcase.gsub(/[ -]/,'_')
|
9
|
+
end
|
10
|
+
|
11
|
+
def assertion
|
12
|
+
expected ? 'assert' : 'refute'
|
13
|
+
end
|
14
|
+
|
15
|
+
def skip
|
16
|
+
'skip' unless index.zero?
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
IsogramCases = proc do |data|
|
21
|
+
JSON.parse(data)['cases'].map.with_index do |row, i|
|
22
|
+
IsogramCase.new(row.merge('index' => i))
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
class SieveCase < OpenStruct
|
2
|
+
OPEN_ARRAY = "[\n\s\s\s\s\s\s".freeze
|
3
|
+
CLOSE_ARRAY = "\n\s\s\s\s]".freeze
|
4
|
+
NEW_ARRAY_ROW = ",\n\s\s\s\s\s\s".freeze
|
5
|
+
ARRAY_ELEMENTS_PER_ROW = 17.freeze
|
6
|
+
|
7
|
+
def name
|
8
|
+
'test_%s' % description.tr(' ', '_')
|
9
|
+
end
|
10
|
+
|
11
|
+
def expected_string
|
12
|
+
return expected unless needs_indentation?
|
13
|
+
|
14
|
+
array_rows = expected.each_slice(ARRAY_ELEMENTS_PER_ROW).map { |elements| elements.join(', ') }
|
15
|
+
"#{OPEN_ARRAY}#{array_rows.join(NEW_ARRAY_ROW)}#{CLOSE_ARRAY}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def skipped
|
19
|
+
index.zero? ? '# skip' : 'skip'
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def needs_indentation?
|
25
|
+
expected.size > ARRAY_ELEMENTS_PER_ROW
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
SieveCases = proc do |data|
|
30
|
+
JSON.parse(data)['cases'].map.with_index do |row, i|
|
31
|
+
SieveCase.new(row.merge('index' => i))
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class WordCountCase < OpenStruct
|
2
|
+
def name
|
3
|
+
'test_%s' % description.tr(' ', '_')
|
4
|
+
end
|
5
|
+
|
6
|
+
def object_under_test
|
7
|
+
%Q(Phrase.new(#{input.inspect}))
|
8
|
+
end
|
9
|
+
|
10
|
+
def skipped?
|
11
|
+
index.nonzero?
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
WordCountCases = proc do |data|
|
16
|
+
JSON.parse(data)['cases'].map.with_index do |row, i|
|
17
|
+
WordCountCase.new(row.merge('index' => i))
|
18
|
+
end
|
19
|
+
end
|
data/tracks/scala/config.json
CHANGED
@@ -37,6 +37,7 @@
|
|
37
37
|
"crypto-square",
|
38
38
|
"kindergarten-garden",
|
39
39
|
"robot-simulator",
|
40
|
+
"bracket-push",
|
40
41
|
"queen-attack",
|
41
42
|
"binary-search-tree",
|
42
43
|
"largest-series-product",
|
@@ -44,6 +45,7 @@
|
|
44
45
|
"clock",
|
45
46
|
"matrix",
|
46
47
|
"house",
|
48
|
+
"zebra-puzzle",
|
47
49
|
"minesweeper",
|
48
50
|
"ocr-numbers",
|
49
51
|
"wordy",
|
@@ -64,6 +66,7 @@
|
|
64
66
|
"change",
|
65
67
|
"connect",
|
66
68
|
"parallel-letter-frequency",
|
69
|
+
"sgf-parsing",
|
67
70
|
"acronym",
|
68
71
|
"zipper",
|
69
72
|
"forth",
|
@@ -276,6 +279,12 @@
|
|
276
279
|
"topics": [
|
277
280
|
]
|
278
281
|
},
|
282
|
+
{
|
283
|
+
"slug": "bracket-push",
|
284
|
+
"difficulty": 1,
|
285
|
+
"topics": [
|
286
|
+
]
|
287
|
+
},
|
279
288
|
{
|
280
289
|
"slug": "queen-attack",
|
281
290
|
"difficulty": 1,
|
@@ -318,6 +327,12 @@
|
|
318
327
|
"topics": [
|
319
328
|
]
|
320
329
|
},
|
330
|
+
{
|
331
|
+
"slug": "zebra-puzzle",
|
332
|
+
"difficulty": 1,
|
333
|
+
"topics": [
|
334
|
+
]
|
335
|
+
},
|
321
336
|
{
|
322
337
|
"slug": "minesweeper",
|
323
338
|
"difficulty": 1,
|
@@ -438,6 +453,12 @@
|
|
438
453
|
"topics": [
|
439
454
|
]
|
440
455
|
},
|
456
|
+
{
|
457
|
+
"slug": "sgf-parsing",
|
458
|
+
"difficulty": 1,
|
459
|
+
"topics": [
|
460
|
+
]
|
461
|
+
},
|
441
462
|
{
|
442
463
|
"slug": "acronym",
|
443
464
|
"difficulty": 1,
|