trackler 2.1.0.2 → 2.1.0.3
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/common/exercises/phone-number/canonical-data.json +28 -10
- data/common/exercises/phone-number/description.md +19 -13
- data/lib/trackler/version.rb +1 -1
- data/tracks/go/exercises/bob/.meta/gen.go +1 -3
- data/tracks/go/exercises/bob/bob.go +1 -1
- data/tracks/go/exercises/bob/bob_test.go +1 -1
- data/tracks/go/exercises/bob/cases_test.go +8 -12
- data/tracks/go/exercises/bob/example.go +1 -1
- data/tracks/go/exercises/largest-series-product/.meta/gen.go +1 -3
- data/tracks/go/exercises/largest-series-product/cases_test.go +3 -4
- data/tracks/go/exercises/largest-series-product/example.go +1 -1
- data/tracks/go/exercises/largest-series-product/largest_series_product_test.go +1 -1
- data/tracks/java/exercises/accumulate/src/test/java/AccumulateTest.java +4 -4
- data/tracks/java/exercises/acronym/src/test/java/AcronymTest.java +7 -7
- data/tracks/java/exercises/all-your-base/src/test/java/BaseConverterTest.java +19 -19
- data/tracks/java/exercises/allergies/src/test/java/AllergiesTest.java +18 -18
- data/tracks/java/exercises/anagram/src/test/java/AnagramTest.java +15 -15
- data/tracks/lisp/docs/INSTALLATION.md +7 -13
- data/tracks/python/exercises/bracket-push/bracket_push_test.py +4 -1
- data/tracks/python/exercises/isogram/isogram_test.py +5 -1
- data/tracks/ruby/README.md +14 -40
- data/tracks/ruby/exercises/binary/binary_test.rb +0 -1
- data/tracks/ruby/exercises/bracket-push/bracket_push_test.rb +1 -1
- data/tracks/ruby/exercises/grains/grains_test.rb +2 -0
- data/tracks/ruby/exercises/isogram/isogram_test.rb +0 -1
- data/tracks/ruby/exercises/largest-series-product/largest_series_product_test.rb +2 -1
- data/tracks/ruby/exercises/luhn/luhn_test.rb +2 -0
- data/tracks/ruby/exercises/pangram/pangram_test.rb +0 -1
- data/tracks/ruby/exercises/queen-attack/queen_attack_test.rb +1 -1
- data/tracks/ruby/exercises/rna-transcription/rna_transcription_test.rb +1 -1
- data/tracks/ruby/exercises/run-length-encoding/run_length_encoding_test.rb +0 -1
- data/tracks/ruby/exercises/say/say_test.rb +2 -0
- data/tracks/ruby/exercises/word-count/word_count_test.rb +1 -1
- data/tracks/ruby/exercises/wordy/wordy_test.rb +2 -0
- data/tracks/ruby/lib/acronym_cases.rb +1 -1
- data/tracks/ruby/lib/all_your_base_cases.rb +1 -1
- data/tracks/ruby/lib/alphametics_cases.rb +1 -1
- data/tracks/ruby/lib/anagram_cases.rb +1 -1
- data/tracks/ruby/lib/beer_song_cases.rb +1 -1
- data/tracks/ruby/lib/binary_cases.rb +1 -1
- data/tracks/ruby/lib/bowling_cases.rb +1 -1
- data/tracks/ruby/lib/bracket_push_cases.rb +1 -1
- data/tracks/ruby/lib/clock_cases.rb +1 -1
- data/tracks/ruby/lib/connect_cases.rb +1 -1
- data/tracks/ruby/lib/custom_set_cases.rb +1 -1
- data/tracks/ruby/lib/difference_of_squares_cases.rb +1 -1
- data/tracks/ruby/lib/dominoes_cases.rb +1 -1
- data/tracks/ruby/lib/generator/files/generator_cases.rb +29 -0
- data/tracks/ruby/lib/generator/files/track_files.rb +11 -27
- data/tracks/ruby/lib/generator/template_values.rb +8 -2
- data/tracks/ruby/{exercises/anagram/example.tt → lib/generator/test_template.erb} +2 -2
- data/tracks/ruby/lib/gigasecond_cases.rb +1 -0
- data/tracks/ruby/lib/grains_cases.rb +1 -1
- data/tracks/ruby/lib/hamming_cases.rb +2 -0
- data/tracks/ruby/lib/hello_world_cases.rb +1 -1
- data/tracks/ruby/lib/isogram_cases.rb +1 -1
- data/tracks/ruby/lib/largest_series_product_cases.rb +1 -1
- data/tracks/ruby/lib/leap_cases.rb +1 -1
- data/tracks/ruby/lib/luhn_cases.rb +2 -0
- data/tracks/ruby/lib/nth_prime_cases.rb +1 -1
- data/tracks/ruby/lib/ocr_numbers_cases.rb +2 -0
- data/tracks/ruby/lib/pangram_cases.rb +1 -1
- data/tracks/ruby/lib/pig_latin_cases.rb +2 -0
- data/tracks/ruby/lib/queen_attack_cases.rb +1 -1
- data/tracks/ruby/lib/raindrops_cases.rb +1 -1
- data/tracks/ruby/lib/rna_transcription_cases.rb +1 -1
- data/tracks/ruby/lib/roman_numerals_cases.rb +1 -1
- data/tracks/ruby/lib/run_length_encoding_cases.rb +8 -6
- data/tracks/ruby/lib/say_cases.rb +1 -1
- data/tracks/ruby/lib/sieve_cases.rb +10 -3
- data/tracks/ruby/lib/tournament_cases.rb +1 -1
- data/tracks/ruby/lib/transpose_cases.rb +1 -1
- data/tracks/ruby/lib/triangle_cases.rb +1 -1
- data/tracks/ruby/lib/two_bucket_cases.rb +1 -1
- data/tracks/ruby/lib/word_count_cases.rb +12 -1
- data/tracks/ruby/lib/wordy_cases.rb +1 -1
- data/tracks/ruby/test/fixtures/xruby/lib/beta_cases.rb +1 -1
- data/tracks/ruby/{exercises/acronym/example.tt → test/fixtures/xruby/lib/generator/test_template.erb} +0 -0
- data/tracks/ruby/test/generator/files/generate_cases_test.rb +33 -0
- data/tracks/ruby/test/generator/files/track_files_test.rb +14 -28
- data/tracks/ruby/test/generator/template_values_test.rb +22 -4
- data/tracks/rust/config.json +10 -0
- data/tracks/rust/exercises/run-length-encoding/Cargo.lock +4 -0
- data/tracks/rust/exercises/run-length-encoding/Cargo.toml +6 -0
- data/tracks/rust/exercises/run-length-encoding/example.rs +45 -0
- data/tracks/rust/exercises/run-length-encoding/tests/run-length-encoding.rs +86 -0
- metadata +11 -29
- data/tracks/ruby/exercises/binary/example.tt +0 -22
- data/tracks/ruby/exercises/bracket-push/example.tt +0 -21
- data/tracks/ruby/exercises/clock/example.tt +0 -21
- data/tracks/ruby/exercises/custom-set/example.tt +0 -21
- data/tracks/ruby/exercises/grains/example.tt +0 -19
- data/tracks/ruby/exercises/hamming/example.tt +0 -21
- data/tracks/ruby/exercises/isogram/example.tt +0 -22
- data/tracks/ruby/exercises/largest-series-product/example.tt +0 -20
- data/tracks/ruby/exercises/luhn/example.tt +0 -18
- data/tracks/ruby/exercises/nth-prime/example.tt +0 -21
- data/tracks/ruby/exercises/ocr-numbers/example.tt +0 -21
- data/tracks/ruby/exercises/pangram/example.tt +0 -22
- data/tracks/ruby/exercises/pig-latin/example.tt +0 -21
- data/tracks/ruby/exercises/queen-attack/example.tt +0 -21
- data/tracks/ruby/exercises/raindrops/example.tt +0 -21
- data/tracks/ruby/exercises/rna-transcription/example.tt +0 -21
- data/tracks/ruby/exercises/roman-numerals/example.tt +0 -21
- data/tracks/ruby/exercises/run-length-encoding/example.tt +0 -24
- data/tracks/ruby/exercises/say/example.tt +0 -19
- data/tracks/ruby/exercises/sieve/example.tt +0 -22
- data/tracks/ruby/exercises/triangle/example.tt +0 -21
- data/tracks/ruby/exercises/two-bucket/example.tt +0 -21
- data/tracks/ruby/exercises/word-count/example.tt +0 -23
- data/tracks/ruby/exercises/wordy/example.tt +0 -19
- data/tracks/ruby/lib/exercise_cases.rb +0 -2
@@ -20,7 +20,7 @@ public class AllergiesTest {
|
|
20
20
|
assertEquals(false, allergies.isAllergicTo(Allergen.CATS));
|
21
21
|
}
|
22
22
|
|
23
|
-
@Ignore
|
23
|
+
@Ignore("Remove to run test")
|
24
24
|
@Test
|
25
25
|
public void allergicToEggs() {
|
26
26
|
Allergies allergies = new Allergies(1);
|
@@ -28,7 +28,7 @@ public class AllergiesTest {
|
|
28
28
|
assertEquals(true, allergies.isAllergicTo(Allergen.EGGS));
|
29
29
|
}
|
30
30
|
|
31
|
-
@Ignore
|
31
|
+
@Ignore("Remove to run test")
|
32
32
|
@Test
|
33
33
|
public void allergicToPeanuts() {
|
34
34
|
Allergies allergies = new Allergies(2);
|
@@ -36,7 +36,7 @@ public class AllergiesTest {
|
|
36
36
|
assertEquals(true, allergies.isAllergicTo(Allergen.PEANUTS));
|
37
37
|
}
|
38
38
|
|
39
|
-
@Ignore
|
39
|
+
@Ignore("Remove to run test")
|
40
40
|
@Test
|
41
41
|
public void allergicToShellfish() {
|
42
42
|
Allergies allergies = new Allergies(4);
|
@@ -44,7 +44,7 @@ public class AllergiesTest {
|
|
44
44
|
assertEquals(true, allergies.isAllergicTo(Allergen.SHELLFISH));
|
45
45
|
}
|
46
46
|
|
47
|
-
@Ignore
|
47
|
+
@Ignore("Remove to run test")
|
48
48
|
@Test
|
49
49
|
public void allergicToStrawberries() {
|
50
50
|
Allergies allergies = new Allergies(8);
|
@@ -52,7 +52,7 @@ public class AllergiesTest {
|
|
52
52
|
assertEquals(true, allergies.isAllergicTo(Allergen.STRAWBERRIES));
|
53
53
|
}
|
54
54
|
|
55
|
-
@Ignore
|
55
|
+
@Ignore("Remove to run test")
|
56
56
|
@Test
|
57
57
|
public void allergicToTomatoes() {
|
58
58
|
Allergies allergies = new Allergies(16);
|
@@ -60,7 +60,7 @@ public class AllergiesTest {
|
|
60
60
|
assertEquals(true, allergies.isAllergicTo(Allergen.TOMATOES));
|
61
61
|
}
|
62
62
|
|
63
|
-
@Ignore
|
63
|
+
@Ignore("Remove to run test")
|
64
64
|
@Test
|
65
65
|
public void allergicToChocolate() {
|
66
66
|
Allergies allergies = new Allergies(32);
|
@@ -68,7 +68,7 @@ public class AllergiesTest {
|
|
68
68
|
assertEquals(true, allergies.isAllergicTo(Allergen.CHOCOLATE));
|
69
69
|
}
|
70
70
|
|
71
|
-
@Ignore
|
71
|
+
@Ignore("Remove to run test")
|
72
72
|
@Test
|
73
73
|
public void allergicToPollen() {
|
74
74
|
Allergies allergies = new Allergies(64);
|
@@ -76,7 +76,7 @@ public class AllergiesTest {
|
|
76
76
|
assertEquals(true, allergies.isAllergicTo(Allergen.POLLEN));
|
77
77
|
}
|
78
78
|
|
79
|
-
@Ignore
|
79
|
+
@Ignore("Remove to run test")
|
80
80
|
@Test
|
81
81
|
public void allergicToCats() {
|
82
82
|
Allergies allergies = new Allergies(128);
|
@@ -84,7 +84,7 @@ public class AllergiesTest {
|
|
84
84
|
assertEquals(true, allergies.isAllergicTo(Allergen.CATS));
|
85
85
|
}
|
86
86
|
|
87
|
-
@Ignore
|
87
|
+
@Ignore("Remove to run test")
|
88
88
|
@Test
|
89
89
|
public void isAllergicToEggsInAdditionToOtherStuff() {
|
90
90
|
Allergies allergies = new Allergies(5);
|
@@ -94,7 +94,7 @@ public class AllergiesTest {
|
|
94
94
|
assertEquals(false, allergies.isAllergicTo(Allergen.STRAWBERRIES));
|
95
95
|
}
|
96
96
|
|
97
|
-
@Ignore
|
97
|
+
@Ignore("Remove to run test")
|
98
98
|
@Test
|
99
99
|
public void noAllergies() {
|
100
100
|
Allergies allergies = new Allergies(0);
|
@@ -102,7 +102,7 @@ public class AllergiesTest {
|
|
102
102
|
assertEquals(0, allergies.getList().size());
|
103
103
|
}
|
104
104
|
|
105
|
-
@Ignore
|
105
|
+
@Ignore("Remove to run test")
|
106
106
|
@Test
|
107
107
|
public void isAllergicToJustEggs() {
|
108
108
|
Allergies allergies = new Allergies(1);
|
@@ -111,7 +111,7 @@ public class AllergiesTest {
|
|
111
111
|
assertEquals(expectedAllergens, allergies.getList());
|
112
112
|
}
|
113
113
|
|
114
|
-
@Ignore
|
114
|
+
@Ignore("Remove to run test")
|
115
115
|
@Test
|
116
116
|
public void isAllergicToJustPeanuts() {
|
117
117
|
Allergies allergies = new Allergies(2);
|
@@ -120,7 +120,7 @@ public class AllergiesTest {
|
|
120
120
|
assertEquals(expectedAllergens, allergies.getList());
|
121
121
|
}
|
122
122
|
|
123
|
-
@Ignore
|
123
|
+
@Ignore("Remove to run test")
|
124
124
|
@Test
|
125
125
|
public void isAllergicToJustStrawberries() {
|
126
126
|
Allergies allergies = new Allergies(8);
|
@@ -129,7 +129,7 @@ public class AllergiesTest {
|
|
129
129
|
assertEquals(expectedAllergens, allergies.getList());
|
130
130
|
}
|
131
131
|
|
132
|
-
@Ignore
|
132
|
+
@Ignore("Remove to run test")
|
133
133
|
@Test
|
134
134
|
public void isAllergicToEggsAndPeanuts() {
|
135
135
|
Allergies allergies = new Allergies(3);
|
@@ -141,7 +141,7 @@ public class AllergiesTest {
|
|
141
141
|
assertEquals(expectedAllergens, allergies.getList());
|
142
142
|
}
|
143
143
|
|
144
|
-
@Ignore
|
144
|
+
@Ignore("Remove to run test")
|
145
145
|
@Test
|
146
146
|
public void isAllergicToEggsAndShellfish() {
|
147
147
|
Allergies allergies = new Allergies(5);
|
@@ -153,7 +153,7 @@ public class AllergiesTest {
|
|
153
153
|
assertEquals(expectedAllergens, allergies.getList());
|
154
154
|
}
|
155
155
|
|
156
|
-
@Ignore
|
156
|
+
@Ignore("Remove to run test")
|
157
157
|
@Test
|
158
158
|
public void isAllergicToLotsOfStuff() {
|
159
159
|
Allergies allergies = new Allergies(248);
|
@@ -168,7 +168,7 @@ public class AllergiesTest {
|
|
168
168
|
assertEquals(expectedAllergens, allergies.getList());
|
169
169
|
}
|
170
170
|
|
171
|
-
@Ignore
|
171
|
+
@Ignore("Remove to run test")
|
172
172
|
@Test
|
173
173
|
public void isAllergicToEverything() {
|
174
174
|
Allergies allergies = new Allergies(255);
|
@@ -186,7 +186,7 @@ public class AllergiesTest {
|
|
186
186
|
assertEquals(expectedAllergens, allergies.getList());
|
187
187
|
}
|
188
188
|
|
189
|
-
@Ignore
|
189
|
+
@Ignore("Remove to run test")
|
190
190
|
@Test
|
191
191
|
public void ignoreNonAllergenScoreParts() {
|
192
192
|
Allergies allergies = new Allergies(509);
|
@@ -16,7 +16,7 @@ public class AnagramTest {
|
|
16
16
|
assertTrue(detector.match(Arrays.asList("hello", "world", "zombies", "pants")).isEmpty());
|
17
17
|
}
|
18
18
|
|
19
|
-
@Ignore
|
19
|
+
@Ignore("Remove to run test")
|
20
20
|
@Test
|
21
21
|
public void testDetectSimpleAnagram() {
|
22
22
|
Anagram detector = new Anagram("ant");
|
@@ -25,7 +25,7 @@ public class AnagramTest {
|
|
25
25
|
assertThat(anagram.size(), is(1));
|
26
26
|
}
|
27
27
|
|
28
|
-
@Ignore
|
28
|
+
@Ignore("Remove to run test")
|
29
29
|
@Test
|
30
30
|
public void testDetectLongerAnagram() {
|
31
31
|
Anagram detector = new Anagram("listen");
|
@@ -33,7 +33,7 @@ public class AnagramTest {
|
|
33
33
|
assertThat(anagrams, hasItem("inlets"));
|
34
34
|
}
|
35
35
|
|
36
|
-
@Ignore
|
36
|
+
@Ignore("Remove to run test")
|
37
37
|
@Test
|
38
38
|
public void testDetectMultipleAnagrams() {
|
39
39
|
Anagram detector = new Anagram("master");
|
@@ -41,7 +41,7 @@ public class AnagramTest {
|
|
41
41
|
assertThat(anagrams, allOf(hasItem("maters"), hasItem("stream")));
|
42
42
|
}
|
43
43
|
|
44
|
-
@Ignore
|
44
|
+
@Ignore("Remove to run test")
|
45
45
|
@Test
|
46
46
|
public void testDetectMultipleAnagramsForLongerWord() {
|
47
47
|
Anagram detector = new Anagram("allergy");
|
@@ -49,14 +49,14 @@ public class AnagramTest {
|
|
49
49
|
assertThat(anagrams, allOf(hasItem("gallery"), hasItem("largely"), hasItem("regally")));
|
50
50
|
}
|
51
51
|
|
52
|
-
@Ignore
|
52
|
+
@Ignore("Remove to run test")
|
53
53
|
@Test
|
54
54
|
public void testDoesNotConfuseDifferentDuplicates() {
|
55
55
|
Anagram detector = new Anagram("galea");
|
56
56
|
assertTrue(detector.match(Arrays.asList("eagle")).isEmpty());
|
57
57
|
}
|
58
58
|
|
59
|
-
@Ignore
|
59
|
+
@Ignore("Remove to run test")
|
60
60
|
@Test
|
61
61
|
public void testIdenticalWordIsNotAnagram() {
|
62
62
|
Anagram detector = new Anagram("corn");
|
@@ -65,35 +65,35 @@ public class AnagramTest {
|
|
65
65
|
assertThat(anagrams.size(), is(1));
|
66
66
|
}
|
67
67
|
|
68
|
-
@Ignore
|
68
|
+
@Ignore("Remove to run test")
|
69
69
|
@Test
|
70
70
|
public void testIdenticalWordRepeatedIsNotAnagram() {
|
71
71
|
Anagram detector = new Anagram("go");
|
72
72
|
assertTrue(detector.match(Arrays.asList("go Go GO")).isEmpty());
|
73
73
|
}
|
74
74
|
|
75
|
-
@Ignore
|
75
|
+
@Ignore("Remove to run test")
|
76
76
|
@Test
|
77
77
|
public void testCapitalWordIsNotOwnAnagram() {
|
78
78
|
Anagram detector = new Anagram("BANANA");
|
79
79
|
assertTrue(detector.match(Arrays.asList("Banana")).isEmpty());
|
80
80
|
}
|
81
81
|
|
82
|
-
@Ignore
|
82
|
+
@Ignore("Remove to run test")
|
83
83
|
@Test
|
84
84
|
public void testEliminateAnagramsWithSameChecksum() {
|
85
85
|
Anagram detector = new Anagram("mass");
|
86
86
|
assertTrue(detector.match(Arrays.asList("last")).isEmpty());
|
87
87
|
}
|
88
88
|
|
89
|
-
@Ignore
|
89
|
+
@Ignore("Remove to run test")
|
90
90
|
@Test
|
91
91
|
public void testEliminateAnagramSubsets() {
|
92
92
|
Anagram detector = new Anagram("good");
|
93
93
|
assertTrue(detector.match(Arrays.asList("dog", "goody")).isEmpty());
|
94
94
|
}
|
95
95
|
|
96
|
-
@Ignore
|
96
|
+
@Ignore("Remove to run test")
|
97
97
|
@Test
|
98
98
|
public void testCaseInsensitiveWhenSubjectStartsWithUpperCaseLetter() {
|
99
99
|
Anagram detector = new Anagram("Orchestra");
|
@@ -101,7 +101,7 @@ public class AnagramTest {
|
|
101
101
|
assertThat(anagrams, hasItem("carthorse"));
|
102
102
|
}
|
103
103
|
|
104
|
-
@Ignore
|
104
|
+
@Ignore("Remove to run test")
|
105
105
|
@Test
|
106
106
|
public void testCaseInsensitiveWhenAnagramStartsWithUpperCaseLetter() {
|
107
107
|
Anagram detector = new Anagram("orchestra");
|
@@ -109,7 +109,7 @@ public class AnagramTest {
|
|
109
109
|
assertThat(anagrams, hasItem("Carthorse"));
|
110
110
|
}
|
111
111
|
|
112
|
-
@Ignore
|
112
|
+
@Ignore("Remove to run test")
|
113
113
|
@Test
|
114
114
|
public void testCaseInsensitiveWhenBothAnagramAndSubjectStartWithUpperCaseLetter() {
|
115
115
|
Anagram detector = new Anagram("Orchestra");
|
@@ -117,14 +117,14 @@ public class AnagramTest {
|
|
117
117
|
assertThat(anagrams, hasItem("Carthorse"));
|
118
118
|
}
|
119
119
|
|
120
|
-
@Ignore
|
120
|
+
@Ignore("Remove to run test")
|
121
121
|
@Test
|
122
122
|
public void testWordIsNotItsOwnAnagram() {
|
123
123
|
Anagram detector = new Anagram("banana");
|
124
124
|
assertTrue(detector.match(Arrays.asList("Banana")).isEmpty());
|
125
125
|
}
|
126
126
|
|
127
|
-
@Ignore
|
127
|
+
@Ignore("Remove to run test")
|
128
128
|
@Test
|
129
129
|
public void testAnagramMustUseAllLettersExactlyOnce() {
|
130
130
|
Anagram detector = new Anagram("tapper");
|
@@ -8,29 +8,23 @@ brew install sbcl
|
|
8
8
|
brew install clisp
|
9
9
|
```
|
10
10
|
|
11
|
-
|
12
|
-
platforms.
|
11
|
+
See their homepages for instructions for installing on other
|
12
|
+
platforms.
|
13
13
|
|
14
|
-
|
15
|
-
and download
|
16
|
-
[http://beta.quicklisp.org/quicklisp.lisp](http://beta.quicklisp.org/quicklisp.lisp).
|
14
|
+
We will use [QuickLisp](http://www.quicklisp.org/beta/#installation) for Lisp library management. To install QuickLisp:
|
17
15
|
|
18
16
|
```bash
|
19
17
|
curl -O http://beta.quicklisp.org/quicklisp.lisp
|
20
18
|
```
|
21
19
|
|
22
|
-
|
20
|
+
Now launch lisp, and copy-paste the following expressions to finish QuickLisp installation:
|
23
21
|
|
24
22
|
```lisp
|
25
|
-
(quicklisp-quickstart:install)
|
23
|
+
> (quicklisp-quickstart:install) ;; this will install quicklisp
|
24
|
+
> (ql:add-to-init-file) ;; this will add quicklisp setup to your init file (recommended)
|
26
25
|
```
|
27
26
|
|
28
|
-
|
29
|
-
start the lisp interpreter QuickLisp will be loaded, type:
|
30
|
-
|
31
|
-
```lisp
|
32
|
-
(ql:add-to-init-file)
|
33
|
-
```
|
27
|
+
See the documentation of your lisp implementation on how to load quicklisp.lisp into lisp.
|
34
28
|
|
35
29
|
Optionally load lisp-unit:
|
36
30
|
|
@@ -3,7 +3,7 @@ import unittest
|
|
3
3
|
from bracket_push import check_brackets
|
4
4
|
|
5
5
|
|
6
|
-
# test cases adapted from `x-common//canonical-data.json` @ version: 1.
|
6
|
+
# test cases adapted from `x-common//canonical-data.json` @ version: 1.1.0
|
7
7
|
|
8
8
|
class BracketPushTests(unittest.TestCase):
|
9
9
|
def test_paired_square_brackets(self):
|
@@ -18,6 +18,9 @@ class BracketPushTests(unittest.TestCase):
|
|
18
18
|
def test_wrong_ordered_brackets(self):
|
19
19
|
self.assertEqual(check_brackets("}{"), False)
|
20
20
|
|
21
|
+
def test_wrong_closing_bracket(self):
|
22
|
+
self.assertEqual(check_brackets("{]"), False)
|
23
|
+
|
21
24
|
def test_paired_with_whitespace(self):
|
22
25
|
self.assertEqual(check_brackets("{ }"), True)
|
23
26
|
|
@@ -1,8 +1,9 @@
|
|
1
1
|
import unittest
|
2
|
+
|
2
3
|
from isogram import is_isogram
|
3
4
|
|
4
5
|
|
5
|
-
# test cases adapted from `x-common//canonical-data.json` @ version: 1.
|
6
|
+
# test cases adapted from `x-common//canonical-data.json` @ version: 1.1.0
|
6
7
|
|
7
8
|
class TestIsogram(unittest.TestCase):
|
8
9
|
|
@@ -30,6 +31,9 @@ class TestIsogram(unittest.TestCase):
|
|
30
31
|
def test_made_up_name_that_is_an_isogram(self):
|
31
32
|
self.assertTrue(is_isogram("Emily Jung Schwartzkopf"))
|
32
33
|
|
34
|
+
def test_duplicated_character_in_the_middle(self):
|
35
|
+
self.assertFalse(is_isogram("accentor"))
|
36
|
+
|
33
37
|
|
34
38
|
if __name__ == '__main__':
|
35
39
|
unittest.main()
|
data/tracks/ruby/README.md
CHANGED
@@ -64,7 +64,7 @@ Note that flags which have an attached value, like above, must take the form
|
|
64
64
|
|
65
65
|
### Generated Test Suites
|
66
66
|
|
67
|
-
If you find
|
67
|
+
If you find a `<problem_name>_cases.rb` file in `lib/`, then the test suite is
|
68
68
|
generated from shared data, which can be found in the exercise definition in the [x-common][]
|
69
69
|
repository.
|
70
70
|
|
@@ -94,7 +94,8 @@ bin/generate $PROBLEM
|
|
94
94
|
|
95
95
|
#### Changing a Generated Exercise
|
96
96
|
|
97
|
-
|
97
|
+
Do not edit `$PROBLEM/$PROBLEM_test.rb`. Any changes you make will be overwritten when
|
98
|
+
the file is generated the next time.
|
98
99
|
|
99
100
|
There are two reasons why a test suite might change:
|
100
101
|
|
@@ -114,23 +115,14 @@ the exercise, which lives in the x-common repository.
|
|
114
115
|
This change will need to be submitted as a pull request to the x-common repository. This pull
|
115
116
|
request needs to be merged before you can regenerate the exercise.
|
116
117
|
|
117
|
-
Changes that don't have to do directly with the test inputs and outputs
|
118
|
-
|
119
|
-
`exercises/$PROBLEM/example.tt`. Then you can regenerate the exercise with
|
118
|
+
Changes that don't have to do directly with the test inputs and outputs should
|
119
|
+
be made to `lib/$PROBLEM_cases.rb`. Then you can regenerate the exercise with
|
120
120
|
`bin/generate $PROBLEM`.
|
121
121
|
|
122
122
|
#### Implementing a Generator
|
123
123
|
|
124
|
-
You will need to
|
125
|
-
|
126
|
-
1. `lib/$PROBLEM_cases.rb` - the logic for turning the data into tests.
|
127
|
-
1. `exercises/$PROBLEM/example.tt` - the Erb template for the test file, `$PROBLEM_test.rb`.
|
128
|
-
1. `exercises/$PROBLEM/.meta/` - metadata directory, currently contains version file
|
129
|
-
|
130
|
-
You will not need to touch the top-level script, `bin/generate`.
|
131
|
-
|
132
|
-
The `bin/generate` command relies on some common logic implemented in `lib/generator.rb`.
|
133
|
-
You probably won't need to touch that, either.
|
124
|
+
You will need to write code to produce the code that goes inside the test methods. Your
|
125
|
+
code will live in `lib/$PROBLEM_cases.rb`.
|
134
126
|
|
135
127
|
`lib/$PROBLEM_cases.rb` contains a derived class of `ExerciseCase` (in `lib/generator/exercise_cases.rb`)
|
136
128
|
which wraps the JSON for a single test case. The default version looks something like this:
|
@@ -149,7 +141,7 @@ end
|
|
149
141
|
Instead of `ProblemName` use the CamelCased name of the actual problem. This is important, since
|
150
142
|
the generator script will infer the name of the class from the argument that is passed.
|
151
143
|
|
152
|
-
This class must provide the methods used by `
|
144
|
+
This class must provide the methods used by `lib/generator/test_template.erb`. The base class provides methods
|
153
145
|
for the default template for everything except `workload`.
|
154
146
|
|
155
147
|
`workload` generates the code for the body of a test, including the assertion
|
@@ -157,34 +149,16 @@ and any setup required. The base class provides a variety of assertion and
|
|
157
149
|
helper methods. Beyond that, you can implement any helper methods that you need
|
158
150
|
as private methods in your derived class. See below for more information about [the intention of workload](#workload-philosophy)
|
159
151
|
|
160
|
-
|
152
|
+
If you really must add additional logic to the view template, you can use a custom
|
153
|
+
template. Copy `lib/generator/test_template.erb` to your exercise directory, name it
|
154
|
+
`exercise.tt`, and customize.
|
161
155
|
|
162
|
-
|
163
|
-
to keep logic out of views.
|
156
|
+
You will not need to touch the top-level script, `bin/generate`.
|
164
157
|
|
165
|
-
|
166
|
-
|
167
|
-
gem 'minitest', '>= 5.0.0'
|
168
|
-
require 'minitest/autorun'
|
169
|
-
require_relative '$PROBLEM'
|
170
|
-
|
171
|
-
# Common test data version: <%= abbreviated_commit_hash %>
|
172
|
-
class ProblemNameTest < Minitest::Test
|
173
|
-
<% test_cases.each do |test_case| %>
|
174
|
-
def <%= test_case.name %>
|
175
|
-
<%= test_case.skipped %>
|
176
|
-
<%= test_case.workload %>
|
177
|
-
end
|
158
|
+
The `bin/generate` command relies on some common logic implemented in `lib/generator.rb`.
|
159
|
+
You won't need to touch that, either.
|
178
160
|
|
179
|
-
<% end %>
|
180
|
-
<%= IO.read(XRUBY_LIB + '/bookkeeping.md') %>
|
181
161
|
|
182
|
-
def test_bookkeeping
|
183
|
-
skip
|
184
|
-
assert_equal <%= version %>, BookKeeping::VERSION
|
185
|
-
end
|
186
|
-
end
|
187
|
-
```
|
188
162
|
### Workload philosophy.
|
189
163
|
|
190
164
|
Prioritize educational value over expert comprehension and make sure that
|