trackler 2.1.0.1 → 2.1.0.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.
- 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
data/tracks/java/config.json
CHANGED
|
@@ -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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
+
});
|
data/tracks/ruby/README.md
CHANGED
|
@@ -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
|
-
|
|
1
|
+
3
|
|
@@ -3,36 +3,41 @@ gem 'minitest', '>= 5.0.0'
|
|
|
3
3
|
require 'minitest/autorun'
|
|
4
4
|
require_relative 'acronym'
|
|
5
5
|
|
|
6
|
-
#
|
|
7
|
-
# 5b5e807
|
|
6
|
+
# Common test data version: dcfe476
|
|
8
7
|
class AcronymTest < Minitest::Test
|
|
9
8
|
def test_basic
|
|
10
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
62
|
+
assert_equal 3, BookKeeping::VERSION
|
|
58
63
|
end
|
|
59
64
|
end
|
|
@@ -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
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|