trackler 2.0.6.1 → 2.0.6.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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/go/exercises/word-count/cases_test.go +23 -4
  4. data/tracks/go/exercises/word-count/example.go +6 -2
  5. data/tracks/go/exercises/word-count/word_count.go +1 -1
  6. data/tracks/go/exercises/word-count/word_count_test.go +1 -1
  7. data/tracks/pony/.travis.yml +16 -4
  8. data/tracks/pony/bin/install-deps +12 -0
  9. data/tracks/pony/bin/test-exercises +22 -0
  10. data/tracks/ruby/Gemfile +1 -0
  11. data/tracks/ruby/Rakefile +1 -1
  12. data/tracks/ruby/bin/generate +4 -29
  13. data/tracks/ruby/exercises/all-your-base/.meta/.version +1 -0
  14. data/tracks/ruby/exercises/all-your-base/all_your_base_test.rb +50 -60
  15. data/tracks/ruby/exercises/all-your-base/example.rb +13 -8
  16. data/tracks/ruby/exercises/all-your-base/example.tt +17 -0
  17. data/tracks/ruby/lib/all_your_base_cases.rb +109 -0
  18. data/tracks/ruby/lib/generator.rb +21 -100
  19. data/tracks/ruby/lib/generator/command_line.rb +119 -0
  20. data/tracks/ruby/lib/generator/files.rb +58 -0
  21. data/tracks/ruby/lib/generator/files/metadata_files.rb +22 -0
  22. data/tracks/ruby/lib/generator/files/track_files.rb +83 -0
  23. data/tracks/ruby/lib/generator/git_command.rb +8 -0
  24. data/tracks/ruby/lib/generator/repository.rb +62 -0
  25. data/tracks/ruby/lib/generator/template_values.rb +47 -0
  26. data/tracks/ruby/lib/helper.rb +5 -2
  27. data/tracks/ruby/test/fixtures/metadata/exercises/alpha/canonical-data.json +8 -9
  28. data/tracks/ruby/test/fixtures/{exercises → xruby/exercises}/alpha/.meta/.version +0 -0
  29. data/tracks/ruby/test/fixtures/{exercises → xruby/exercises}/alpha/example.rb +0 -0
  30. data/tracks/ruby/test/fixtures/xruby/exercises/alpha/example.tt +20 -0
  31. data/tracks/ruby/test/fixtures/xruby/lib/alpha_cases.rb +20 -0
  32. data/tracks/ruby/test/fixtures/xruby/lib/beta_cases.rb +0 -0
  33. data/tracks/ruby/test/generator/command_line_test.rb +83 -0
  34. data/tracks/ruby/test/generator/files/metadata_files_test.rb +25 -0
  35. data/tracks/ruby/test/generator/files/track_files_test.rb +117 -0
  36. data/tracks/ruby/test/generator/files_test.rb +63 -0
  37. data/tracks/ruby/test/generator/git_command_test.rb +9 -0
  38. data/tracks/ruby/test/generator/repository_test.rb +98 -0
  39. data/tracks/ruby/test/generator/template_values_test.rb +59 -0
  40. data/tracks/ruby/test/generator_test.rb +19 -63
  41. data/tracks/ruby/test/test_helper.rb +8 -5
  42. metadata +26 -6
  43. data/tracks/ruby/test/fixtures/exercises/alpha/alpha_test.rb +0 -1
  44. data/tracks/ruby/test/fixtures/exercises/alpha/example.tt +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e0a5ee73b9501fd6101f3faf9913c4634acd6cf8
4
- data.tar.gz: 4c49bfef6fa06b4a9b9fed119dd455a7a2dd6859
3
+ metadata.gz: b4e158fdc06604fcbf8f1d27f05a396e4261aaf1
4
+ data.tar.gz: 9f340d289a11e75954cff74b6443048991f45def
5
5
  SHA512:
6
- metadata.gz: 240744071c995385c5f96242c76a12c41ae1d60f4bc82194771c9feb90d9b0d2ee2efe97925a11a57ebb0969927572f6ecec12e721a7eb303111e5bde0d021ee
7
- data.tar.gz: 76be73161db9c3d6114e2b2f2f7409c59ad09de0b79d56515b52e2df3d4a03b7909e9b0229ad84d4e0e88976ba37dae44f394a09a17d5512851cb83d7149fa7f
6
+ metadata.gz: 5f72f08277f2e36d640b7e99a9a527e11b48ff5160457a57590e7c48beed426b75b4191faf5286bf97880a39bf5fea9c49ad6716202c804617551b30c4d6190d
7
+ data.tar.gz: 908336cbfd218c1e95f05f6a2c16c1f9e158a05b43bac7df5d1e1af15a196ec9341597fad8a61cbf0760f240082b350fedd0d04b06a90660fafe99ba1fd864a9
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.0.6.1"
2
+ VERSION = "2.0.6.2"
3
3
  end
@@ -1,7 +1,6 @@
1
1
  package wordcount
2
2
 
3
3
  // Source: exercism/x-common
4
- // Commit: 3b07e53 Merge pull request #117 from mikeyjcat/add-raindrops-json
5
4
 
6
5
  var testCases = []struct {
7
6
  description string
@@ -23,9 +22,19 @@ var testCases = []struct {
23
22
  "one fish two fish red fish blue fish",
24
23
  Frequency{"blue": 1, "fish": 4, "one": 1, "red": 1, "two": 1},
25
24
  },
25
+ {
26
+ "handles cramped lists",
27
+ "one,two,three",
28
+ Frequency{"one": 1, "three": 1, "two": 1},
29
+ },
30
+ {
31
+ "handles expanded lists",
32
+ "one,\ntwo,\nthree",
33
+ Frequency{"one": 1, "three": 1, "two": 1},
34
+ },
26
35
  {
27
36
  "ignore punctuation",
28
- "car : carpet as java : javascript!!&@$%^&",
37
+ "car: carpet as java: javascript!!&@$%^&",
29
38
  Frequency{"as": 1, "car": 1, "carpet": 1, "java": 1, "javascript": 1},
30
39
  },
31
40
  {
@@ -35,7 +44,17 @@ var testCases = []struct {
35
44
  },
36
45
  {
37
46
  "normalize case",
38
- "go Go GO",
39
- Frequency{"go": 3},
47
+ "go Go GO Stop stop",
48
+ Frequency{"go": 3, "stop": 2},
49
+ },
50
+ {
51
+ "with apostrophes",
52
+ "First: don't laugh. Then: don't cry.",
53
+ Frequency{"cry": 1, "don't": 2, "first": 1, "laugh": 1, "then": 1},
54
+ },
55
+ {
56
+ "with_quotations",
57
+ "Joe can't tell between 'large' and large.",
58
+ Frequency{"and": 1, "between": 1, "can't": 1, "joe": 1, "large": 2, "tell": 1},
40
59
  },
41
60
  }
@@ -5,20 +5,24 @@ import (
5
5
  "strings"
6
6
  )
7
7
 
8
- const testVersion = 2
8
+ const testVersion = 3
9
9
 
10
+ // Frequency is a map of the frequency of occurrence keyed to the unique word.
10
11
  type Frequency map[string]int
11
12
 
13
+ // WordCount returns the map of frequency of words based on the input phrase.
12
14
  func WordCount(phrase string) Frequency {
13
15
  freq := Frequency{}
14
16
  for _, word := range strings.Fields(normalize(phrase)) {
17
+ word = strings.Trim(word, "'")
15
18
  freq[word]++
16
19
  }
17
20
  return freq
18
21
  }
19
22
 
20
23
  func normalize(phrase string) string {
21
- r, _ := regexp.Compile(`[^\w]`)
24
+ // Allow for apostrophes in words.
25
+ r, _ := regexp.Compile(`[^\w|']`)
22
26
  phrase = strings.ToLower(phrase)
23
27
  return r.ReplaceAllLiteralString(phrase, " ")
24
28
  }
@@ -1,6 +1,6 @@
1
1
  package wordcount
2
2
 
3
- const testVersion = 2
3
+ const testVersion = 3
4
4
 
5
5
  // Use this return type.
6
6
  type Frequency map[string]int
@@ -5,7 +5,7 @@ import (
5
5
  "testing"
6
6
  )
7
7
 
8
- const targetTestVersion = 2
8
+ const targetTestVersion = 3
9
9
 
10
10
  func TestWordCount(t *testing.T) {
11
11
  if testVersion != targetTestVersion {
@@ -1,6 +1,18 @@
1
1
  ---
2
- language: bash
2
+ language: c
3
+
4
+ sudo: true
5
+
6
+ install:
7
+ - sudo apt-get update -q
8
+ - sudo apt-get install -y python-software-properties
9
+ - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
10
+ - sudo apt-get update -q
11
+ - sudo apt-get install -y wget git apt-transport-https g++-5 build-essential zlib1g-dev libncurses5-dev libssl-dev
12
+
13
+ - sudo bash bin/install-deps
14
+
3
15
  script:
4
- - bin/fetch-configlet
5
- - bin/configlet .
6
- sudo: false
16
+ - bin/fetch-configlet
17
+ - bin/configlet .
18
+ - bin/test-exercises
@@ -0,0 +1,12 @@
1
+ #!/bin/bash
2
+
3
+ # Install pcre2
4
+ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre2-10.21.tar.bz2
5
+ tar -xjvf pcre2-10.21.tar.bz2
6
+ cd pcre2-10.21 && ./configure --prefix=/usr && make && sudo make install && cd -
7
+ rm -r pcre2-10.21
8
+
9
+ # Insall ponyc
10
+ echo "deb https://dl.bintray.com/pony-language/ponyc-debian pony-language main" | sudo tee -a /etc/apt/sources.list
11
+ sudo apt-get update -q
12
+ sudo apt-get install -y --force-yes ponyc-release
@@ -0,0 +1,22 @@
1
+ #!/bin/bash
2
+
3
+ set -eu
4
+
5
+ run_tests() {
6
+ local path=$1
7
+ local base=$(basename $path)
8
+ printf "\nRunning tests for %s\n\n" $base
9
+ (
10
+ cd $path
11
+ ponyc -d -V0
12
+ ./$base
13
+ rm $base
14
+ )
15
+ }
16
+
17
+ exercises_dir="exercises/*"
18
+
19
+ for path in $exercises_dir; do
20
+ [ -d "${path}" ] || continue
21
+ run_tests $path
22
+ done
@@ -4,3 +4,4 @@ gem 'minitest'
4
4
  gem 'rubocop', '0.36.0'
5
5
  gem 'simplecov'
6
6
  gem 'rake'
7
+ gem 'require_all'
@@ -5,5 +5,5 @@ desc 'rake with no argument will run "rake test"'
5
5
  task default: :test
6
6
 
7
7
  Rake::TestTask.new do |task|
8
- task.pattern = 'test/*_test.rb'
8
+ task.pattern = 'test/**/*_test.rb'
9
9
  end
@@ -3,34 +3,9 @@
3
3
  require_relative '../lib/helper'
4
4
  require 'generator'
5
5
 
6
- def available_generators
7
- cases = File.join( __dir__, '../lib/*_cases.rb')
8
- Dir[cases].map {|filename| /([^\/]*)_cases\.rb$/.match(filename).captures}
9
- end
6
+ paths = Generator::Paths.new(track: XRUBY_ROOT, metadata: METADATA_REPOSITORY_PATH)
10
7
 
11
- def usage
12
- "Usage: #{$PROGRAM_NAME} exercise_generator\n\n" +
13
- "Available exercise generators:\n" +
14
- available_generators.sort.join(' ')
15
- end
16
-
17
- exercise = ARGV[0]
18
-
19
- unless exercise
20
- STDERR.puts "Exercise name required!\n"
21
- puts usage
22
- exit
23
- end
24
-
25
- cases = "#{exercise.tr('-','_')}_cases"
26
-
27
- begin
28
- require "#{cases}"
29
- rescue LoadError
30
- puts "A generator does not currently exist for #{exercise}!"
31
- exit(1)
32
- end
33
-
34
- klass = Object.const_get(cases.split('_').map(&:capitalize).join)
35
- Generator.new(exercise, klass).generate
8
+ generator = Generator::CommandLine.new(paths).parse(ARGV)
9
+ exit 1 unless generator
36
10
 
11
+ generator.call
@@ -1,9 +1,10 @@
1
- gem 'minitest', '>= 5.0.0'
2
1
  require 'minitest/autorun'
3
2
  require_relative 'all_your_base'
4
3
 
4
+ # Test data version: aa12f2e
5
5
  class AllYourBaseTest < Minitest::Test
6
- def test_single_bit_to_one_decimal
6
+ def test_single_bit_one_to_decimal
7
+ # skip
7
8
  digits = [1]
8
9
  input_base = 2
9
10
  output_base = 10
@@ -131,7 +132,7 @@ class AllYourBaseTest < Minitest::Test
131
132
  def test_single_zero
132
133
  skip
133
134
  digits = [0]
134
- input_base = 10
135
+ input_base = 10
135
136
  output_base = 2
136
137
  expected = [0]
137
138
 
@@ -142,10 +143,10 @@ class AllYourBaseTest < Minitest::Test
142
143
  "Expected #{expected} but got #{converted}."
143
144
  end
144
145
 
145
- def test_multiple_zeroes
146
+ def test_multiple_zeros
146
147
  skip
147
148
  digits = [0, 0, 0]
148
- input_base = 10
149
+ input_base = 10
149
150
  output_base = 2
150
151
  expected = [0]
151
152
 
@@ -175,13 +176,10 @@ class AllYourBaseTest < Minitest::Test
175
176
  digits = [1, -1, 1, 0, 1, 0]
176
177
  input_base = 2
177
178
  output_base = 10
178
- expected = nil
179
-
180
- converted = BaseConverter.convert(input_base, digits, output_base)
181
179
 
182
- assert_equal expected, converted,
183
- "Input base: #{input_base}, output base #{output_base}. " \
184
- "Expected #{expected} but got #{converted}."
180
+ assert_raises ArgumentError do
181
+ BaseConverter.convert(input_base, digits, output_base)
182
+ end
185
183
  end
186
184
 
187
185
  def test_invalid_positive_digit
@@ -189,13 +187,10 @@ class AllYourBaseTest < Minitest::Test
189
187
  digits = [1, 2, 1, 0, 1, 0]
190
188
  input_base = 2
191
189
  output_base = 10
192
- expected = nil
193
-
194
- converted = BaseConverter.convert(input_base, digits, output_base)
195
190
 
196
- assert_equal expected, converted,
197
- "Input base: #{input_base}, output base #{output_base}. " \
198
- "Expected #{expected} but got #{converted}."
191
+ assert_raises ArgumentError do
192
+ BaseConverter.convert(input_base, digits, output_base)
193
+ end
199
194
  end
200
195
 
201
196
  def test_first_base_is_one
@@ -203,13 +198,10 @@ class AllYourBaseTest < Minitest::Test
203
198
  digits = []
204
199
  input_base = 1
205
200
  output_base = 10
206
- expected = nil
207
201
 
208
- converted = BaseConverter.convert(input_base, digits, output_base)
209
-
210
- assert_equal expected, converted,
211
- "Input base: #{input_base}, output base #{output_base}. " \
212
- "Expected #{expected} but got #{converted}."
202
+ assert_raises ArgumentError do
203
+ BaseConverter.convert(input_base, digits, output_base)
204
+ end
213
205
  end
214
206
 
215
207
  def test_second_base_is_one
@@ -217,13 +209,10 @@ class AllYourBaseTest < Minitest::Test
217
209
  digits = [1, 0, 1, 0, 1, 0]
218
210
  input_base = 2
219
211
  output_base = 1
220
- expected = nil
221
-
222
- converted = BaseConverter.convert(input_base, digits, output_base)
223
212
 
224
- assert_equal expected, converted,
225
- "Input base: #{input_base}, output base #{output_base}. " \
226
- "Expected #{expected} but got #{converted}."
213
+ assert_raises ArgumentError do
214
+ BaseConverter.convert(input_base, digits, output_base)
215
+ end
227
216
  end
228
217
 
229
218
  def test_first_base_is_zero
@@ -231,13 +220,10 @@ class AllYourBaseTest < Minitest::Test
231
220
  digits = []
232
221
  input_base = 0
233
222
  output_base = 10
234
- expected = nil
235
-
236
- converted = BaseConverter.convert(input_base, digits, output_base)
237
223
 
238
- assert_equal expected, converted,
239
- "Input base: #{input_base}, output base #{output_base}. " \
240
- "Expected #{expected} but got #{converted}."
224
+ assert_raises ArgumentError do
225
+ BaseConverter.convert(input_base, digits, output_base)
226
+ end
241
227
  end
242
228
 
243
229
  def test_second_base_is_zero
@@ -245,13 +231,10 @@ class AllYourBaseTest < Minitest::Test
245
231
  digits = [7]
246
232
  input_base = 10
247
233
  output_base = 0
248
- expected = nil
249
234
 
250
- converted = BaseConverter.convert(input_base, digits, output_base)
251
-
252
- assert_equal expected, converted,
253
- "Input base: #{input_base}, output base #{output_base}. " \
254
- "Expected #{expected} but got #{converted}."
235
+ assert_raises ArgumentError do
236
+ BaseConverter.convert(input_base, digits, output_base)
237
+ end
255
238
  end
256
239
 
257
240
  def test_first_base_is_negative
@@ -259,13 +242,10 @@ class AllYourBaseTest < Minitest::Test
259
242
  digits = [1]
260
243
  input_base = -2
261
244
  output_base = 10
262
- expected = nil
263
-
264
- converted = BaseConverter.convert(input_base, digits, output_base)
265
245
 
266
- assert_equal expected, converted,
267
- "Input base: #{input_base}, output base #{output_base}. " \
268
- "Expected #{expected} but got #{converted}."
246
+ assert_raises ArgumentError do
247
+ BaseConverter.convert(input_base, digits, output_base)
248
+ end
269
249
  end
270
250
 
271
251
  def test_second_base_is_negative
@@ -273,13 +253,10 @@ class AllYourBaseTest < Minitest::Test
273
253
  digits = [1]
274
254
  input_base = 2
275
255
  output_base = -7
276
- expected = nil
277
-
278
- converted = BaseConverter.convert(input_base, digits, output_base)
279
256
 
280
- assert_equal expected, converted,
281
- "Input base: #{input_base}, output base #{output_base}. " \
282
- "Expected #{expected} but got #{converted}."
257
+ assert_raises ArgumentError do
258
+ BaseConverter.convert(input_base, digits, output_base)
259
+ end
283
260
  end
284
261
 
285
262
  def test_both_bases_are_negative
@@ -287,17 +264,30 @@ class AllYourBaseTest < Minitest::Test
287
264
  digits = [1]
288
265
  input_base = -2
289
266
  output_base = -7
290
- expected = nil
291
267
 
292
- converted = BaseConverter.convert(input_base, digits, output_base)
293
-
294
- assert_equal expected, converted,
295
- "Input base: #{input_base}, output base #{output_base}. " \
296
- "Expected #{expected} but got #{converted}."
268
+ assert_raises ArgumentError do
269
+ BaseConverter.convert(input_base, digits, output_base)
270
+ end
297
271
  end
298
272
 
273
+ # Problems in exercism evolve over time, as we find better ways to ask
274
+ # questions.
275
+ # The version number refers to the version of the problem you solved,
276
+ # not your solution.
277
+ #
278
+ # Define a constant named VERSION inside of the top level BookKeeping
279
+ # module, which may be placed near the end of your file.
280
+ #
281
+ # In your file, it will look like this:
282
+ #
283
+ # module BookKeeping
284
+ # VERSION = 1 # Where the version number matches the one in the test.
285
+ # end
286
+ #
287
+ # If you are curious, read more about constants on RubyDoc:
288
+ # http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
299
289
  def test_bookkeeping
300
290
  skip
301
- assert_equal 1, BookKeeping::VERSION
291
+ assert_equal 2, BookKeeping::VERSION
302
292
  end
303
293
  end
@@ -1,21 +1,26 @@
1
1
  module BookKeeping
2
- VERSION = 1
2
+ VERSION = 2
3
3
  end
4
4
 
5
5
  class BaseConverter
6
6
  def self.convert(base_from, number_array, base_to)
7
- return if number_array.any?{|number| number < 0 || number >= base_from}
8
- return if base_from <= 1 || base_to <= 1
7
+ fail ArgumentError if invalid_inputs?(base_from, number_array, base_to)
9
8
  return [] unless number_array.any?
10
9
  number_in_canonical_base = convert_to_canonical_base(number_array, base_from)
11
10
  convert_from_canonical_base(number_in_canonical_base, base_to)
12
11
  end
13
12
 
14
- private
13
+ private_class_method
14
+
15
+ def self.invalid_inputs?(base_from, number_array, base_to)
16
+ number_array.any? { |number| number < 0 || number >= base_from } ||
17
+ base_from <= 1 || base_to <= 1
18
+ end
19
+
15
20
  def self.convert_to_canonical_base(number_array, base)
16
21
  total = 0
17
22
  number_array.reverse.each_with_index do |number, index|
18
- total += number * base ** index
23
+ total += number * base**index
19
24
  end
20
25
  total
21
26
  end
@@ -23,9 +28,9 @@ class BaseConverter
23
28
  def self.convert_from_canonical_base(number, base_to)
24
29
  result = []
25
30
  current_number = number
26
- while current_number >= base_to do
27
- result << current_number % base_to
28
- current_number = current_number / base_to
31
+ while current_number >= base_to
32
+ result << current_number % base_to
33
+ current_number /= base_to
29
34
  end
30
35
  result << current_number % base_to
31
36
  result.reverse