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.
Files changed (160) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/elixir/config.json +17 -0
  4. data/tracks/elixir/exercises/matrix/example.exs +63 -0
  5. data/tracks/elixir/exercises/matrix/matrix.exs +48 -0
  6. data/tracks/elixir/exercises/matrix/matrix_test.exs +58 -0
  7. data/tracks/elixir/exercises/twelve-days/example.exs +53 -0
  8. data/tracks/elixir/exercises/twelve-days/twelve_days.exs +25 -0
  9. data/tracks/elixir/exercises/twelve-days/twelve_days_test.exs +86 -0
  10. data/tracks/go/exercises/change/.meta/gen.go +1 -3
  11. data/tracks/go/exercises/change/cases_test.go +1 -0
  12. data/tracks/go/exercises/forth/example.go +1 -1
  13. data/tracks/go/exercises/raindrops/.meta/gen.go +1 -3
  14. data/tracks/go/exercises/raindrops/cases_test.go +5 -1
  15. data/tracks/go/exercises/raindrops/example.go +1 -1
  16. data/tracks/go/exercises/raindrops/raindrops.go +1 -1
  17. data/tracks/go/exercises/raindrops/raindrops_test.go +1 -1
  18. data/tracks/java/config.json +5 -5
  19. data/tracks/java/exercises/isogram/src/example/java/IsogramChecker.java +23 -27
  20. data/tracks/java/exercises/isogram/src/test/java/IsogramCheckerTest.java +77 -0
  21. data/tracks/javascript/config.json +9 -0
  22. data/tracks/javascript/exercises/proverb/example.js +36 -0
  23. data/tracks/javascript/exercises/proverb/proverb.spec.js +78 -0
  24. data/tracks/ruby/README.md +0 -33
  25. data/tracks/ruby/exercises/acronym/.meta/.version +1 -1
  26. data/tracks/ruby/exercises/acronym/acronym_test.rb +14 -9
  27. data/tracks/ruby/exercises/acronym/example.rb +1 -1
  28. data/tracks/ruby/exercises/acronym/example.tt +7 -4
  29. data/tracks/ruby/exercises/all-your-base/all_your_base_test.rb +1 -1
  30. data/tracks/ruby/exercises/all-your-base/example.tt +4 -3
  31. data/tracks/ruby/exercises/alphametics/alphametics_test.rb +2 -1
  32. data/tracks/ruby/exercises/alphametics/example.tt +2 -1
  33. data/tracks/ruby/exercises/anagram/anagram_test.rb +35 -20
  34. data/tracks/ruby/exercises/anagram/example.rb +1 -1
  35. data/tracks/ruby/exercises/anagram/example.tt +5 -2
  36. data/tracks/ruby/exercises/beer-song/beer_song_test.rb +1 -0
  37. data/tracks/ruby/exercises/beer-song/example.tt +6 -4
  38. data/tracks/ruby/exercises/binary/binary_test.rb +3 -2
  39. data/tracks/ruby/exercises/binary/example.tt +5 -2
  40. data/tracks/ruby/exercises/bowling/bowling_test.rb +39 -40
  41. data/tracks/ruby/exercises/bowling/example.tt +2 -2
  42. data/tracks/ruby/exercises/bracket-push/.meta/.version +1 -1
  43. data/tracks/ruby/exercises/bracket-push/bracket_push_test.rb +7 -3
  44. data/tracks/ruby/exercises/bracket-push/example.rb +1 -1
  45. data/tracks/ruby/exercises/bracket-push/example.tt +5 -2
  46. data/tracks/ruby/exercises/clock/clock_test.rb +40 -41
  47. data/tracks/ruby/exercises/clock/example.tt +5 -2
  48. data/tracks/ruby/exercises/connect/.meta/.version +1 -1
  49. data/tracks/ruby/exercises/connect/connect_test.rb +20 -3
  50. data/tracks/ruby/exercises/connect/example.rb +1 -1
  51. data/tracks/ruby/exercises/connect/example.tt +3 -1
  52. data/tracks/ruby/exercises/custom-set/custom_set_test.rb +1 -2
  53. data/tracks/ruby/exercises/custom-set/example.tt +5 -2
  54. data/tracks/ruby/exercises/difference-of-squares/difference_of_squares_test.rb +6 -5
  55. data/tracks/ruby/exercises/difference-of-squares/example.tt +8 -4
  56. data/tracks/ruby/exercises/dominoes/dominoes_test.rb +1 -1
  57. data/tracks/ruby/exercises/dominoes/example.tt +1 -1
  58. data/tracks/ruby/exercises/gigasecond/.meta/.version +1 -1
  59. data/tracks/ruby/exercises/gigasecond/example.rb +1 -1
  60. data/tracks/ruby/exercises/gigasecond/example.tt +7 -5
  61. data/tracks/ruby/exercises/gigasecond/gigasecond_test.rb +11 -16
  62. data/tracks/ruby/exercises/grains/example.tt +5 -3
  63. data/tracks/ruby/exercises/grains/grains_test.rb +2 -1
  64. data/tracks/ruby/exercises/hello-world/example.tt +1 -1
  65. data/tracks/ruby/exercises/hello-world/hello_world_test.rb +1 -1
  66. data/tracks/ruby/exercises/isogram/.meta/.version +1 -1
  67. data/tracks/ruby/exercises/isogram/example.rb +1 -1
  68. data/tracks/ruby/exercises/isogram/example.tt +6 -4
  69. data/tracks/ruby/exercises/isogram/isogram_test.rb +18 -10
  70. data/tracks/ruby/exercises/largest-series-product/.meta/.version +1 -1
  71. data/tracks/ruby/exercises/largest-series-product/example.rb +1 -1
  72. data/tracks/ruby/exercises/largest-series-product/example.tt +7 -5
  73. data/tracks/ruby/exercises/largest-series-product/largest_series_product_test.rb +11 -21
  74. data/tracks/ruby/exercises/leap/.meta/.version +1 -1
  75. data/tracks/ruby/exercises/leap/example.rb +1 -1
  76. data/tracks/ruby/exercises/leap/example.tt +6 -4
  77. data/tracks/ruby/exercises/leap/leap_test.rb +11 -25
  78. data/tracks/ruby/exercises/nth-prime/example.tt +7 -5
  79. data/tracks/ruby/exercises/nth-prime/nth_prime_test.rb +2 -3
  80. data/tracks/ruby/exercises/pangram/example.tt +5 -3
  81. data/tracks/ruby/exercises/pangram/pangram_test.rb +2 -1
  82. data/tracks/ruby/exercises/queen-attack/example.tt +2 -2
  83. data/tracks/ruby/exercises/queen-attack/queen_attack_test.rb +14 -15
  84. data/tracks/ruby/exercises/raindrops/example.tt +7 -4
  85. data/tracks/ruby/exercises/raindrops/raindrops_test.rb +38 -38
  86. data/tracks/ruby/exercises/rna-transcription/example.tt +6 -3
  87. data/tracks/ruby/exercises/rna-transcription/rna_transcription_test.rb +4 -5
  88. data/tracks/ruby/exercises/roman-numerals/example.tt +7 -4
  89. data/tracks/ruby/exercises/roman-numerals/roman_numerals_test.rb +5 -5
  90. data/tracks/ruby/exercises/run-length-encoding/.meta/.version +1 -1
  91. data/tracks/ruby/exercises/run-length-encoding/example.rb +1 -1
  92. data/tracks/ruby/exercises/run-length-encoding/example.tt +6 -3
  93. data/tracks/ruby/exercises/run-length-encoding/run_length_encoding_test.rb +70 -28
  94. data/tracks/ruby/exercises/say/example.tt +7 -5
  95. data/tracks/ruby/exercises/say/say_test.rb +3 -2
  96. data/tracks/ruby/exercises/sieve/example.tt +4 -1
  97. data/tracks/ruby/exercises/sieve/sieve_test.rb +1 -3
  98. data/tracks/ruby/exercises/tournament/example.tt +4 -1
  99. data/tracks/ruby/exercises/tournament/tournament_test.rb +1 -2
  100. data/tracks/ruby/exercises/transpose/example.tt +5 -2
  101. data/tracks/ruby/exercises/transpose/transpose_test.rb +1 -2
  102. data/tracks/ruby/exercises/triangle/example.tt +5 -3
  103. data/tracks/ruby/exercises/triangle/triangle_test.rb +1 -3
  104. data/tracks/ruby/exercises/two-bucket/example.tt +7 -4
  105. data/tracks/ruby/exercises/two-bucket/two_bucket_test.rb +9 -9
  106. data/tracks/ruby/exercises/word-count/example.tt +6 -4
  107. data/tracks/ruby/exercises/word-count/word_count_test.rb +2 -3
  108. data/tracks/ruby/exercises/wordy/example.tt +5 -3
  109. data/tracks/ruby/exercises/wordy/wordy_test.rb +2 -1
  110. data/tracks/ruby/lib/acronym_cases.rb +3 -15
  111. data/tracks/ruby/lib/all_your_base_cases.rb +22 -54
  112. data/tracks/ruby/lib/alphametics_cases.rb +12 -27
  113. data/tracks/ruby/lib/anagram_cases.rb +7 -15
  114. data/tracks/ruby/lib/beer_song_cases.rb +7 -24
  115. data/tracks/ruby/lib/binary_cases.rb +5 -18
  116. data/tracks/ruby/lib/bowling_cases.rb +24 -24
  117. data/tracks/ruby/lib/bracket_push_cases.rb +6 -21
  118. data/tracks/ruby/lib/clock_cases.rb +6 -25
  119. data/tracks/ruby/lib/connect_cases.rb +2 -20
  120. data/tracks/ruby/lib/custom_set_cases.rb +14 -35
  121. data/tracks/ruby/lib/difference_of_squares_cases.rb +5 -26
  122. data/tracks/ruby/lib/dominoes_cases.rb +2 -11
  123. data/tracks/ruby/lib/generator/case_values.rb +25 -0
  124. data/tracks/ruby/lib/generator/exercise_cases.rb +11 -0
  125. data/tracks/ruby/lib/generator/files/track_files.rb +7 -2
  126. data/tracks/ruby/lib/generator/template_values.rb +12 -7
  127. data/tracks/ruby/lib/gigasecond_cases.rb +4 -18
  128. data/tracks/ruby/lib/grains_cases.rb +11 -38
  129. data/tracks/ruby/lib/hamming_cases.rb +0 -6
  130. data/tracks/ruby/lib/hello_world_cases.rb +2 -14
  131. data/tracks/ruby/lib/isogram_cases.rb +8 -16
  132. data/tracks/ruby/lib/largest_series_product_cases.rb +10 -16
  133. data/tracks/ruby/lib/leap_cases.rb +3 -16
  134. data/tracks/ruby/lib/luhn_cases.rb +0 -6
  135. data/tracks/ruby/lib/nth_prime_cases.rb +11 -13
  136. data/tracks/ruby/lib/ocr_numbers_cases.rb +0 -5
  137. data/tracks/ruby/lib/pangram_cases.rb +2 -19
  138. data/tracks/ruby/lib/pig_latin_cases.rb +0 -5
  139. data/tracks/ruby/lib/queen_attack_cases.rb +14 -37
  140. data/tracks/ruby/lib/raindrops_cases.rb +3 -15
  141. data/tracks/ruby/lib/rna_transcription_cases.rb +2 -14
  142. data/tracks/ruby/lib/roman_numerals_cases.rb +7 -10
  143. data/tracks/ruby/lib/run_length_encoding_cases.rb +4 -25
  144. data/tracks/ruby/lib/say_cases.rb +3 -14
  145. data/tracks/ruby/lib/sieve_cases.rb +1 -15
  146. data/tracks/ruby/lib/tournament_cases.rb +1 -14
  147. data/tracks/ruby/lib/transpose_cases.rb +1 -14
  148. data/tracks/ruby/lib/triangle_cases.rb +8 -27
  149. data/tracks/ruby/lib/two_bucket_cases.rb +7 -17
  150. data/tracks/ruby/lib/word_count_cases.rb +1 -13
  151. data/tracks/ruby/lib/wordy_cases.rb +4 -27
  152. data/tracks/ruby/test/fixtures/metadata/exercises/complex/canonical-data.json +45 -0
  153. data/tracks/ruby/test/fixtures/xruby/lib/beta_cases.rb +7 -0
  154. data/tracks/ruby/test/generator/case_values_test.rb +30 -0
  155. data/tracks/ruby/test/generator/files/track_files_test.rb +2 -3
  156. data/tracks/ruby/test/generator/template_values_test.rb +44 -3
  157. data/tracks/ruby/test/wordy_cases_test.rb +4 -65
  158. metadata +14 -4
  159. data/tracks/java/exercises/isogram/src/test/java/IsogramTest.java +0 -80
  160. data/tracks/ruby/test/grains_cases_test.rb +0 -103
@@ -2,7 +2,7 @@ package raindrops
2
2
 
3
3
  import "strconv"
4
4
 
5
- const testVersion = 2
5
+ const testVersion = 3
6
6
 
7
7
  func Convert(number int) string {
8
8
  s := ""
@@ -1,6 +1,6 @@
1
1
  package raindrops
2
2
 
3
- const testVersion = 2
3
+ const testVersion = 3
4
4
 
5
5
  func Convert(int) string
6
6
 
@@ -2,7 +2,7 @@ package raindrops
2
2
 
3
3
  import "testing"
4
4
 
5
- const targetTestVersion = 2
5
+ const targetTestVersion = 3
6
6
 
7
7
  func TestTestVersion(t *testing.T) {
8
8
  if testVersion != targetTestVersion {
@@ -105,6 +105,11 @@
105
105
  "difficulty": 4,
106
106
  "topics": []
107
107
  },
108
+ {
109
+ "slug": "isogram",
110
+ "difficulty": 4,
111
+ "topics": []
112
+ },
108
113
  {
109
114
  "slug": "flatten-array",
110
115
  "difficulty": 5,
@@ -314,11 +319,6 @@
314
319
  "slug": "ocr-numbers",
315
320
  "difficulty": 1,
316
321
  "topics": []
317
- },
318
- {
319
- "slug": "isogram",
320
- "difficulty": 1,
321
- "topics": []
322
322
  },
323
323
  {
324
324
  "slug": "book-store",
@@ -1,34 +1,30 @@
1
- package example;
2
-
3
1
  import java.util.HashSet;
4
2
  import java.util.Set;
3
+
5
4
  import static java.util.Arrays.stream;
6
5
  import static java.util.stream.Collectors.joining;
7
6
 
8
7
  public class IsogramChecker {
9
-
10
- public IsogramChecker(){
11
- }
12
-
13
- public boolean isIsogram(String word){
14
-
15
- Set<Character> charSet = new HashSet<>();
16
-
17
- String[] words = word.split(" ");
18
- String newWord = concat(words);
19
-
20
- words = newWord.split("-");
21
- newWord = concat(words).toLowerCase();
22
-
23
- for(int i = 0; i < newWord.length(); i++){
24
- charSet.add(newWord.charAt(i));
25
- }
26
-
27
- return charSet.size() == newWord.length();
28
- }
29
-
30
- private String concat(String[] words){
31
- return stream(words).collect(joining());
32
- }
33
-
8
+
9
+ public boolean isIsogram(String word) {
10
+
11
+ Set<Character> charSet = new HashSet<>();
12
+
13
+ String[] words = word.split(" ");
14
+ String newWord = concat(words);
15
+
16
+ words = newWord.split("-");
17
+ newWord = concat(words).toLowerCase();
18
+
19
+ for (int i = 0; i < newWord.length(); i++) {
20
+ charSet.add(newWord.charAt(i));
21
+ }
22
+
23
+ return charSet.size() == newWord.length();
24
+ }
25
+
26
+ private String concat(String[] words) {
27
+ return stream(words).collect(joining());
28
+ }
29
+
34
30
  }
@@ -0,0 +1,77 @@
1
+ import org.junit.Ignore;
2
+ import org.junit.Test;
3
+
4
+ import static org.junit.Assert.*;
5
+
6
+ public class IsogramCheckerTest {
7
+
8
+ @Test
9
+ public void testIsogram() {
10
+ IsogramChecker iso = new IsogramChecker();
11
+ assertTrue(iso.isIsogram("duplicates"));
12
+ }
13
+
14
+ @Ignore
15
+ @Test
16
+ public void testNotIsogram() {
17
+ IsogramChecker iso = new IsogramChecker();
18
+ assertFalse(iso.isIsogram("eleven"));
19
+ }
20
+
21
+ @Ignore
22
+ @Test
23
+ public void testMediumLongIsogram() {
24
+ IsogramChecker iso = new IsogramChecker();
25
+ assertTrue(iso.isIsogram("subdermatoglyphic"));
26
+ }
27
+
28
+ @Ignore
29
+ @Test
30
+ public void testCaseInsensitive() {
31
+ IsogramChecker iso = new IsogramChecker();
32
+ assertFalse(iso.isIsogram("Alphabet"));
33
+ }
34
+
35
+ @Ignore
36
+ @Test
37
+ public void testIsogramWithHyphen() {
38
+ IsogramChecker iso = new IsogramChecker();
39
+ assertTrue(iso.isIsogram("thumbscrew-japingly"));
40
+ }
41
+
42
+ @Ignore
43
+ @Test
44
+ public void testIgnoresMultipleHyphens() {
45
+ IsogramChecker iso = new IsogramChecker();
46
+ assertTrue(iso.isIsogram("Hjelmqvist-Gryb-Zock-Pfund-Wax"));
47
+ }
48
+
49
+ @Ignore
50
+ @Test
51
+ public void testWorksWithGermanLetters() {
52
+ IsogramChecker iso = new IsogramChecker();
53
+ assertTrue(iso.isIsogram("Heizölrückstoßabdämpfung"));
54
+ }
55
+
56
+ @Ignore
57
+ @Test
58
+ public void testIgnoresSpaces() {
59
+ IsogramChecker iso = new IsogramChecker();
60
+ assertFalse(iso.isIsogram("the quick brown fox"));
61
+ }
62
+
63
+ @Ignore
64
+ @Test
65
+ public void testIgnoresSpaces2() {
66
+ IsogramChecker iso = new IsogramChecker();
67
+ assertTrue(iso.isIsogram("Emily Jung Schwartzkopf"));
68
+ }
69
+
70
+ @Ignore
71
+ @Test
72
+ public void testDuplicateAccentedLetters() {
73
+ IsogramChecker iso = new IsogramChecker();
74
+ assertFalse(iso.isIsogram("éléphant"));
75
+ }
76
+
77
+ }
@@ -48,6 +48,7 @@
48
48
  "series",
49
49
  "difference-of-squares",
50
50
  "secret-handshake",
51
+ "proverb",
51
52
  "linked-list",
52
53
  "wordy",
53
54
  "flatten-array",
@@ -352,6 +353,14 @@
352
353
  "topics": [
353
354
  ]
354
355
  },
356
+ {
357
+ "slug": "proverb",
358
+ "difficulty": 1,
359
+ "topics": [
360
+ "Arrays",
361
+ "Optional values"
362
+ ]
363
+ },
355
364
  {
356
365
  "slug": "linked-list",
357
366
  "difficulty": 1,
@@ -0,0 +1,36 @@
1
+ module.exports = function(){
2
+ var last = arguments[arguments.length - 1];
3
+ var chain = Array.from(arguments);
4
+ this.options = {};
5
+
6
+ if(typeof last == "object" && last.hasOwnProperty("qualifier")){
7
+ this.options = chain.pop();
8
+ }
9
+
10
+ this.chain = chain;
11
+ this.qualifier = this.options.qualifier ? this.options.qualifier + ' ' : '';
12
+
13
+ this.toString = function(){
14
+ return this.chainOfEvents() + this.conclusion();
15
+ }.bind(this);
16
+
17
+ this.chainOfEvents = function(){
18
+ return this.causesAndEffects().map( function(entry){
19
+ return "For want of a " + entry.cause +
20
+ " the " + entry.effect + " was lost.\n";
21
+ }.bind(this) ).join('');
22
+ }.bind(this);
23
+
24
+ this.causesAndEffects = function(){
25
+ return this.chain.reduce( function(array, event, index){
26
+ if(index < this.chain.length - 1){
27
+ array.push({ cause: event, effect: this.chain[index + 1] });
28
+ }
29
+ return array;
30
+ }.bind(this), [] );
31
+ }.bind(this);
32
+
33
+ this.conclusion = function(){
34
+ return "And all for the want of a " + this.qualifier + this.chain[0] + ".";
35
+ }.bind(this);
36
+ };
@@ -0,0 +1,78 @@
1
+ var Proverb = require('./proverb');
2
+
3
+ describe('Proverb Test Suite', function() {
4
+ it('tests a single consequence', function() {
5
+ var proverb = new Proverb('nail', 'shoe');
6
+
7
+ expect(proverb.toString()).toEqual(
8
+ "For want of a nail the shoe was lost.\n" +
9
+ "And all for the want of a nail.");
10
+ });
11
+
12
+
13
+ it('tests a short chain of consequences', function() {
14
+ var proverb = new Proverb('nail', 'shoe', 'horse');
15
+
16
+ expect(proverb.toString()).toEqual(
17
+ "For want of a nail the shoe was lost.\n" +
18
+ "For want of a shoe the horse was lost.\n" +
19
+ "And all for the want of a nail.");
20
+ });
21
+
22
+ it('tests a longer chain of consequences', function() {
23
+ var proverb = new Proverb('nail', 'shoe', 'horse', 'rider');
24
+
25
+ expect(proverb.toString()).toEqual(
26
+ "For want of a nail the shoe was lost.\n" +
27
+ "For want of a shoe the horse was lost.\n" +
28
+ "For want of a horse the rider was lost.\n" +
29
+ "And all for the want of a nail.");
30
+ });
31
+
32
+
33
+ it('tests Proverb class does not hard code the rhyme dictionary',
34
+ function() {
35
+ var proverb = new Proverb('key', 'value');
36
+
37
+ expect(proverb.toString()).toEqual(
38
+ "For want of a key the value was lost.\n" +
39
+ "And all for the want of a key.");
40
+ });
41
+
42
+ it('tests the whole proveb', function() {
43
+ var proverb = new Proverb('nail', 'shoe', 'horse', 'rider',
44
+ 'message', 'battle', 'kingdom');
45
+
46
+ expect(proverb.toString()).toEqual(
47
+ "For want of a nail the shoe was lost.\n" +
48
+ "For want of a shoe the horse was lost.\n" +
49
+ "For want of a horse the rider was lost.\n" +
50
+ "For want of a rider the message was lost.\n" +
51
+ "For want of a message the battle was lost.\n" +
52
+ "For want of a battle the kingdom was lost.\n" +
53
+ "And all for the want of a nail.");
54
+ });
55
+
56
+
57
+ it('tests the use of an optional qualifier in the final consequence',
58
+ function() {
59
+ var proverb = new Proverb('nail', 'shoe', 'horse', 'rider',
60
+ 'message', 'battle', 'kingdom',
61
+ { qualifier: 'horseshoe' });
62
+
63
+ expect(proverb.toString()).toEqual(
64
+ "For want of a nail the shoe was lost.\n" +
65
+ "For want of a shoe the horse was lost.\n" +
66
+ "For want of a horse the rider was lost.\n" +
67
+ "For want of a rider the message was lost.\n" +
68
+ "For want of a message the battle was lost.\n" +
69
+ "For want of a battle the kingdom was lost.\n" +
70
+ "And all for the want of a horseshoe nail.");
71
+ });
72
+
73
+ it('tests the proverb is the same each time', function(){
74
+ var proverb = new Proverb('nail', 'shoe');
75
+
76
+ expect(proverb.toString()).toEqual(proverb.toString());
77
+ });
78
+ });
@@ -157,39 +157,6 @@ and any setup required. The base class provides a variety of assertion and
157
157
  helper methods. Beyond that, you can implement any helper methods that you need
158
158
  as private methods in your derived class. See below for more information about [the intention of workload](#workload-philosophy)
159
159
 
160
- Below this class, implement a small loop that will generate all the test cases by reading the
161
- `canonical-data.json` file, and looping through the test cases.
162
-
163
- You will need to adjust the logic to match the structure of the canonical data.
164
-
165
- For example, if there is a single top-level key named "cases", then you can loop through
166
- them as follows:
167
-
168
- ```
169
- ProblemNameCases = proc do |data|
170
- JSON.parse(data)['cases'].map.with_index do |row, i|
171
- ProblemNameCase.new(row.merge('index' => i))
172
- end
173
- end
174
- ```
175
-
176
- If there are multiple sections, then you will need to loop through the sections, and then
177
- loop through each of the cases in an inner loop:
178
-
179
- ```
180
- ProblemNameCases = proc do |data|
181
- json = JSON.parse(data)
182
- cases = []
183
- %w(section1 section2 etc).each do |section|
184
- json[section]['cases'].each do |row|
185
- row = row.merge(row.merge('index' => cases.size, 'section' => section))
186
- cases << ProblemNameCase.new(row)
187
- end
188
- end
189
- cases
190
- end
191
- ```
192
-
193
160
  Finally, you need to create a text template, `example.tt`, as the bases for the test suite.
194
161
 
195
162
  Start with the following boilerplate, and adjust as necessary. Remember, however, to strive
@@ -1 +1 @@
1
- 2
1
+ 3
@@ -3,36 +3,41 @@ gem 'minitest', '>= 5.0.0'
3
3
  require 'minitest/autorun'
4
4
  require_relative 'acronym'
5
5
 
6
- # Test data version:
7
- # 5b5e807
6
+ # Common test data version: dcfe476
8
7
  class AcronymTest < Minitest::Test
9
8
  def test_basic
10
- assert_equal 'PNG', Acronym.abbreviate('Portable Network Graphics')
9
+ # skip
10
+ assert_equal "PNG", Acronym.abbreviate('Portable Network Graphics')
11
11
  end
12
12
 
13
13
  def test_lowercase_words
14
14
  skip
15
- assert_equal 'ROR', Acronym.abbreviate('Ruby on Rails')
15
+ assert_equal "ROR", Acronym.abbreviate('Ruby on Rails')
16
16
  end
17
17
 
18
18
  def test_camelcase
19
19
  skip
20
- assert_equal 'HTML', Acronym.abbreviate('HyperText Markup Language')
20
+ assert_equal "HTML", Acronym.abbreviate('HyperText Markup Language')
21
21
  end
22
22
 
23
23
  def test_punctuation
24
24
  skip
25
- assert_equal 'FIFO', Acronym.abbreviate('First In, First Out')
25
+ assert_equal "FIFO", Acronym.abbreviate('First In, First Out')
26
26
  end
27
27
 
28
28
  def test_all_caps_words
29
29
  skip
30
- assert_equal 'PHP', Acronym.abbreviate('PHP: Hypertext Preprocessor')
30
+ assert_equal "PHP", Acronym.abbreviate('PHP: Hypertext Preprocessor')
31
+ end
32
+
33
+ def test_non_acronym_all_caps_word
34
+ skip
35
+ assert_equal "GIMP", Acronym.abbreviate('GNU Image Manipulation Program')
31
36
  end
32
37
 
33
38
  def test_hyphenated
34
39
  skip
35
- assert_equal 'CMOS', Acronym.abbreviate('Complementary metal-oxide semiconductor')
40
+ assert_equal "CMOS", Acronym.abbreviate('Complementary metal-oxide semiconductor')
36
41
  end
37
42
 
38
43
  # Problems in exercism evolve over time, as we find better ways to ask
@@ -54,6 +59,6 @@ class AcronymTest < Minitest::Test
54
59
 
55
60
  def test_bookkeeping
56
61
  skip
57
- assert_equal 2, BookKeeping::VERSION
62
+ assert_equal 3, BookKeeping::VERSION
58
63
  end
59
64
  end
@@ -1,5 +1,5 @@
1
1
  module BookKeeping
2
- VERSION = 2
2
+ VERSION = 3
3
3
  end
4
4
 
5
5
  class Acronym
@@ -4,13 +4,16 @@ require 'minitest/autorun'
4
4
  require_relative 'acronym'
5
5
 
6
6
  # Common test data version: <%= abbreviated_commit_hash %>
7
- class AcronymTest < Minitest::Test<% test_cases.each do |test_case| %>
8
- def <%= test_case.name %><% if test_case.skipped? %>
9
- skip<% end %>
10
- assert_equal '<%= test_case.expected %>', <%= test_case.assertion %>
7
+ class AcronymTest < Minitest::Test
8
+ <% test_cases.each do |test_case| %>
9
+ def <%= test_case.name %>
10
+ <%= test_case.skipped %>
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