trackler 2.1.0.6 → 2.1.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/common/exercises/rail-fence-cipher/canonical-data.json +7 -7
  3. data/common/exercises/scrabble-score/description.md +2 -2
  4. data/lib/trackler/version.rb +1 -1
  5. data/tracks/delphi/exercises/clock/uClockExample.pas +5 -5
  6. data/tracks/delphi/exercises/clock/uClockTest.pas +435 -49
  7. data/tracks/ocaml/exercises/triangle/example.ml +1 -1
  8. data/tracks/ocaml/exercises/triangle/test.ml +8 -8
  9. data/tracks/ocaml/exercises/triangle/triangle.mli +1 -1
  10. data/tracks/ocaml/tools/test-generator/templates/triangle/template.ml +3 -3
  11. data/tracks/perl6/exercises/all-your-base/AllYourBase.pm6 +1 -1
  12. data/tracks/perl6/exercises/all-your-base/Example.pm +2 -2
  13. data/tracks/perl6/exercises/all-your-base/all-your-base.t +215 -138
  14. data/tracks/perl6/exercises/all-your-base/example.yaml +14 -0
  15. data/tracks/ruby/exercises/acronym/.meta/generator/acronym_cases.rb +1 -1
  16. data/tracks/ruby/exercises/all-your-base/.meta/generator/all_your_base_cases.rb +4 -10
  17. data/tracks/ruby/exercises/all-your-base/all_your_base_test.rb +3 -0
  18. data/tracks/ruby/exercises/alphametics/.meta/generator/alphametics_cases.rb +1 -1
  19. data/tracks/ruby/exercises/alphametics/{example.tt → .meta/generator/test_template.erb} +0 -0
  20. data/tracks/ruby/exercises/anagram/.meta/generator/anagram_cases.rb +1 -1
  21. data/tracks/ruby/exercises/beer-song/.meta/generator/beer_song_cases.rb +3 -6
  22. data/tracks/ruby/exercises/beer-song/beer_song_test.rb +1 -1
  23. data/tracks/ruby/exercises/binary/.meta/generator/binary_cases.rb +1 -1
  24. data/tracks/ruby/exercises/bowling/.meta/generator/bowling_cases.rb +1 -1
  25. data/tracks/ruby/exercises/bowling/{example.tt → .meta/generator/test_template.erb} +0 -0
  26. data/tracks/ruby/exercises/bracket-push/.meta/generator/bracket_push_cases.rb +1 -1
  27. data/tracks/ruby/exercises/clock/.meta/generator/clock_cases.rb +1 -1
  28. data/tracks/ruby/exercises/connect/.meta/generator/connect_cases.rb +1 -1
  29. data/tracks/ruby/exercises/connect/{example.tt → .meta/generator/test_template.erb} +0 -0
  30. data/tracks/ruby/exercises/custom-set/.meta/generator/custom_set_cases.rb +1 -1
  31. data/tracks/ruby/exercises/difference-of-squares/.meta/generator/difference_of_squares_cases.rb +1 -1
  32. data/tracks/ruby/exercises/difference-of-squares/difference_of_squares_test.rb +0 -6
  33. data/tracks/ruby/exercises/dominoes/.meta/generator/dominoes_cases.rb +1 -1
  34. data/tracks/ruby/exercises/dominoes/{example.tt → .meta/generator/test_template.erb} +0 -0
  35. data/tracks/ruby/exercises/etl/.meta/generator/etl_cases.rb +1 -1
  36. data/tracks/ruby/exercises/gigasecond/.meta/generator/gigasecond_cases.rb +1 -1
  37. data/tracks/ruby/exercises/gigasecond/gigasecond_test.rb +3 -5
  38. data/tracks/ruby/exercises/grains/.meta/generator/grains_cases.rb +1 -1
  39. data/tracks/ruby/exercises/hamming/.meta/generator/hamming_cases.rb +1 -1
  40. data/tracks/ruby/exercises/hello-world/.meta/generator/hello_world_cases.rb +1 -1
  41. data/tracks/ruby/exercises/hello-world/{example.tt → .meta/generator/test_template.erb} +0 -0
  42. data/tracks/ruby/exercises/isogram/.meta/generator/isogram_cases.rb +1 -1
  43. data/tracks/ruby/exercises/largest-series-product/.meta/generator/largest_series_product_cases.rb +1 -1
  44. data/tracks/ruby/exercises/leap/.meta/generator/leap_cases.rb +1 -1
  45. data/tracks/ruby/exercises/leap/{example.tt → .meta/generator/test_template.erb} +0 -0
  46. data/tracks/ruby/exercises/luhn/.meta/generator/luhn_cases.rb +1 -1
  47. data/tracks/ruby/exercises/nth-prime/.meta/generator/nth_prime_cases.rb +1 -1
  48. data/tracks/ruby/exercises/ocr-numbers/.meta/generator/ocr_numbers_cases.rb +1 -1
  49. data/tracks/ruby/exercises/pangram/.meta/generator/pangram_cases.rb +1 -1
  50. data/tracks/ruby/exercises/pig-latin/.meta/generator/pig_latin_cases.rb +1 -1
  51. data/tracks/ruby/exercises/queen-attack/.meta/generator/queen_attack_cases.rb +1 -1
  52. data/tracks/ruby/exercises/raindrops/.meta/generator/raindrops_cases.rb +1 -1
  53. data/tracks/ruby/exercises/rna-transcription/.meta/generator/rna_transcription_cases.rb +1 -1
  54. data/tracks/ruby/exercises/roman-numerals/.meta/generator/roman_numerals_cases.rb +1 -1
  55. data/tracks/ruby/exercises/run-length-encoding/.meta/generator/run_length_encoding_cases.rb +1 -1
  56. data/tracks/ruby/exercises/say/.meta/generator/say_cases.rb +1 -1
  57. data/tracks/ruby/exercises/sieve/.meta/generator/sieve_cases.rb +1 -1
  58. data/tracks/ruby/exercises/tournament/.meta/generator/tournament_cases.rb +7 -24
  59. data/tracks/ruby/exercises/tournament/tournament_test.rb +37 -38
  60. data/tracks/ruby/exercises/transpose/.meta/generator/transpose_cases.rb +7 -23
  61. data/tracks/ruby/exercises/transpose/transpose_test.rb +22 -22
  62. data/tracks/ruby/exercises/triangle/.meta/generator/triangle_cases.rb +1 -1
  63. data/tracks/ruby/exercises/two-bucket/.meta/generator/two_bucket_cases.rb +1 -1
  64. data/tracks/ruby/exercises/word-count/.meta/generator/word_count_cases.rb +1 -1
  65. data/tracks/ruby/exercises/wordy/.meta/generator/wordy_cases.rb +1 -1
  66. data/tracks/ruby/lib/generator/exercise_case/assertion.rb +33 -0
  67. data/tracks/ruby/lib/generator/exercise_cases.rb +46 -49
  68. data/tracks/ruby/lib/generator/files/generator_cases.rb +0 -14
  69. data/tracks/ruby/test/fixtures/xruby/{lib → exercises/alpha/.meta/generator}/alpha_cases.rb +0 -0
  70. data/tracks/ruby/test/fixtures/xruby/exercises/beta/.meta/generator/beta_cases.rb +1 -1
  71. data/tracks/ruby/test/generator/case_values_test.rb +5 -5
  72. data/tracks/ruby/test/generator/exercise_case/assertion_test.rb +46 -0
  73. data/tracks/ruby/test/generator/exercise_cases_test.rb +47 -0
  74. data/tracks/ruby/test/generator/files/generate_cases_test.rb +0 -12
  75. metadata +13 -15
  76. data/tracks/ruby/exercises/all-your-base/example.tt +0 -18
  77. data/tracks/ruby/exercises/beer-song/example.tt +0 -24
  78. data/tracks/ruby/exercises/difference-of-squares/example.tt +0 -27
  79. data/tracks/ruby/exercises/gigasecond/example.tt +0 -23
  80. data/tracks/ruby/exercises/tournament/example.tt +0 -25
  81. data/tracks/ruby/exercises/transpose/example.tt +0 -24
@@ -0,0 +1,14 @@
1
+ exercise: AllYourBase
2
+ version: 2
3
+ plan: 23
4
+ imports: '&convert-base'
5
+ tests: |
6
+ sub test ($case, $expected) { is-deeply &::('convert-base')(|$case<input_base input_digits output_base>), $expected, $case<description> }
7
+ for @($c-data<cases>) {
8
+ when .<expected> ~~ Array { test $_, .<expected> }
9
+ when .<description> ~~ /base|digit/ { throws-like {&::('convert-base')(|.<input_base input_digits output_base>)}, Exception, .<description> }
10
+ when .<description> eq 'leading zeros' { test $_, [4,2] }
11
+ when .<description> eq 'empty list' { test $_, [] }
12
+ when .<description> ~~ /zero/ { test $_, [0] }
13
+ default { flunk .<description> } # To ensure that no canonical-data cases are missed.
14
+ }
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class AcronymCase < ExerciseCase
3
+ class AcronymCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
6
  assert_equal { "Acronym.abbreviate('#{phrase}')" }
@@ -1,19 +1,13 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class AllYourBaseCase < ExerciseCase
3
+ class AllYourBaseCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
- indent(4, (assignments + assertion).join("\n")) + "\n"
6
+ indent_text(4, (assignments + assertion).join("\n"))
7
7
  end
8
8
 
9
9
  private
10
10
 
11
- def indent(size, text)
12
- text.lines.each_with_object('') do |line, obj|
13
- obj << (line == "\n" ? line : ' ' * size + line)
14
- end
15
- end
16
-
17
11
  def assignments
18
12
  [
19
13
  "digits = #{input_digits}",
@@ -31,7 +25,7 @@ class AllYourBaseCase < ExerciseCase
31
25
  "converted = BaseConverter.convert(input_base, digits, output_base)",
32
26
  "",
33
27
  "assert_equal expected, converted,",
34
- indent(13, error_message),
28
+ indent_text(13, error_message),
35
29
  ]
36
30
  end
37
31
 
@@ -45,7 +39,7 @@ class AllYourBaseCase < ExerciseCase
45
39
  end
46
40
 
47
41
  def error_message
48
- %q("Input base: #{input_base}, output base #{output_base}. " \\) \
42
+ %q( "Input base: #{input_base}, output base #{output_base}. " \\) \
49
43
  "\n" + %q("Expected #{expected} but got #{converted}.")
50
44
  end
51
45
 
@@ -1,3 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ gem 'minitest', '>= 5.0.0'
1
3
  require 'minitest/autorun'
2
4
  require_relative 'all_your_base'
3
5
 
@@ -286,6 +288,7 @@ class AllYourBaseTest < Minitest::Test
286
288
  #
287
289
  # If you are curious, read more about constants on RubyDoc:
288
290
  # http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
291
+
289
292
  def test_bookkeeping
290
293
  skip
291
294
  assert_equal 2, BookKeeping::VERSION
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class AlphameticsCase < ExerciseCase
3
+ class AlphameticsCase < Generator::ExerciseCase
4
4
  def workload
5
5
  body =
6
6
  "input = %s\n" % input,
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class AnagramCase < ExerciseCase
3
+ class AnagramCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
6
  indent_lines([show_comment, detector, anagram, wanted, assert].compact)
@@ -1,13 +1,10 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class BeerSongCase < ExerciseCase
3
+ class BeerSongCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
- "assert_equal expected, #{beer_song}"
7
- end
8
-
9
- def expected
10
- self["expected"].gsub('\n', '"\n" \\')
6
+ %Q(expected = #{indent_heredoc(expected.split("\n"), 'TEXT', 0)}\n) +
7
+ " assert_equal expected, #{beer_song}"
11
8
  end
12
9
 
13
10
  private
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: utf-8
3
2
  gem 'minitest', '>= 5.0.0'
4
3
  require 'minitest/autorun'
5
4
  require_relative 'beer_song'
@@ -400,6 +399,7 @@ TEXT
400
399
  #
401
400
  # If you are curious, read more about constants on RubyDoc:
402
401
  # http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
402
+
403
403
  def test_bookkeeping
404
404
  skip
405
405
  assert_equal 3, BookKeeping::VERSION
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class BinaryCase < ExerciseCase
3
+ class BinaryCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
6
  raises_error? ? error_assertion : equality_assertion
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class BowlingCase < ExerciseCase
3
+ class BowlingCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
6
  indent_lines(assert)
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class BracketPushCase < ExerciseCase
3
+ class BracketPushCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
6
  long_input? ? split_test : simple_test
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class ClockCase < ExerciseCase
3
+ class ClockCase < Generator::ExerciseCase
4
4
  def name
5
5
  'test_%s' % description
6
6
  .gsub(/[() -]/, '_')
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class ConnectCase < ExerciseCase
3
+ class ConnectCase < Generator::ExerciseCase
4
4
 
5
5
  def test_body
6
6
  [
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class CustomSetCase < ExerciseCase
3
+ class CustomSetCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
6
  send property
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class DifferenceOfSquaresCase < ExerciseCase
3
+ class DifferenceOfSquaresCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
6
  %Q(assert_equal #{expected_formatted}, Squares.new(#{number}).#{action})
@@ -55,12 +55,6 @@ class DifferenceOfSquaresTest < Minitest::Test
55
55
  assert_equal 25_164_150, Squares.new(100).difference
56
56
  end
57
57
 
58
- def test_consistent_difference
59
- skip
60
- squares = Squares.new(10)
61
- assert_equal squares.difference, squares.difference
62
- end
63
-
64
58
  # Problems in exercism evolve over time, as we find better ways to ask
65
59
  # questions.
66
60
  # The version number refers to the version of the problem you solved,
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class DominoesCase < ExerciseCase
3
+ class DominoesCase < Generator::ExerciseCase
4
4
  def name
5
5
  'test_%s' % description.gsub("can't", 'can not').gsub(/[= -]+/, '_')
6
6
  end
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class EtlCase < ExerciseCase
3
+ class EtlCase < Generator::ExerciseCase
4
4
  def workload
5
5
  indent_lines([
6
6
  "old = {\n #{format(input)}\n }",
@@ -1,7 +1,7 @@
1
1
  require 'generator/exercise_cases'
2
2
  require 'time'
3
3
 
4
- class GigasecondCase < ExerciseCase
4
+ class GigasecondCase < Generator::ExerciseCase
5
5
  def workload
6
6
  %Q(assert_equal #{want}, Gigasecond.from(#{got}))
7
7
  end
@@ -1,3 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ gem 'minitest', '>= 5.0.0'
1
3
  require 'minitest/autorun'
2
4
  require_relative 'gigasecond'
3
5
 
@@ -28,11 +30,6 @@ class GigasecondTest < Minitest::Test
28
30
  assert_equal Time.utc(2046, 10, 3, 1, 46, 39), Gigasecond.from(Time.utc(2015, 1, 24, 23, 59, 59))
29
31
  end
30
32
 
31
- # Test your 1Gs anniversary
32
- def test_with_your_birthday
33
- skip
34
- end
35
-
36
33
  # Problems in exercism evolve over time, as we find better ways to ask
37
34
  # questions.
38
35
  # The version number refers to the version of the problem you solved,
@@ -51,6 +48,7 @@ class GigasecondTest < Minitest::Test
51
48
  # http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
52
49
 
53
50
  def test_bookkeeping
51
+ skip
54
52
  assert_equal 6, BookKeeping::VERSION
55
53
  end
56
54
  end
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class GrainsCase < ExerciseCase
3
+ class GrainsCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
6
  send("#{property}_workload")
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class HammingCase < ExerciseCase
3
+ class HammingCase < Generator::ExerciseCase
4
4
  def workload
5
5
  if raises_error?
6
6
  assert_raises(ArgumentError) { test_case }
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class HelloWorldCase < ExerciseCase
3
+ class HelloWorldCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
6
  assert_equal { "HelloWorld.hello" }
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class IsogramCase < ExerciseCase
3
+ class IsogramCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
6
  indent_lines(
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class LargestSeriesProductCase < ExerciseCase
3
+ class LargestSeriesProductCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
6
  if raises_error?
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class LeapCase < ExerciseCase
3
+ class LeapCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
6
  "#{assert} Year.leap?(#{input.inspect})"
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class LuhnCase < ExerciseCase
3
+ class LuhnCase < Generator::ExerciseCase
4
4
  def workload
5
5
  "#{assert} Luhn.valid?(#{input.inspect})"
6
6
  end
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class NthPrimeCase < ExerciseCase
3
+ class NthPrimeCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
6
  if raises_error?
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class OcrNumbersCase < ExerciseCase
3
+ class OcrNumbersCase < Generator::ExerciseCase
4
4
  def workload
5
5
  if raises_error?
6
6
  assert_raises(ArgumentError) { test_case }
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class PangramCase < ExerciseCase
3
+ class PangramCase < Generator::ExerciseCase
4
4
  def workload
5
5
  [
6
6
  "phrase = '#{input}'",
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class PigLatinCase < ExerciseCase
3
+ class PigLatinCase < Generator::ExerciseCase
4
4
  def workload
5
5
  assert_equal { "PigLatin.translate(#{input.inspect})" }
6
6
  end
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class QueenAttackCase < ExerciseCase
3
+ class QueenAttackCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
6
  property == 'create' ? create_workload : attack_workload
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class RaindropsCase < ExerciseCase
3
+ class RaindropsCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
6
  assert_equal { "Raindrops.convert(#{number})" }
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class RnaTranscriptionCase < ExerciseCase
3
+ class RnaTranscriptionCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
6
  "assert_equal '#{expected}', Complement.of_dna('#{dna}')"
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class RomanNumeralsCase < ExerciseCase
3
+ class RomanNumeralsCase < Generator::ExerciseCase
4
4
  def name
5
5
  'test_%s' % number.to_s
6
6
  end
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class RunLengthEncodingCase < ExerciseCase
3
+ class RunLengthEncodingCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
6
  indent_lines([
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class SayCase < ExerciseCase
3
+ class SayCase < Generator::ExerciseCase
4
4
 
5
5
  def workload
6
6
  [
@@ -1,6 +1,6 @@
1
1
  require 'generator/exercise_cases'
2
2
 
3
- class SieveCase < ExerciseCase
3
+ class SieveCase < Generator::ExerciseCase
4
4
  OPEN_ARRAY = "[\n\s\s\s\s\s\s".freeze
5
5
  CLOSE_ARRAY = "\n\s\s\s\s]".freeze
6
6
  NEW_ARRAY_ROW = ",\n\s\s\s\s\s\s".freeze