trackler 2.2.1.49 → 2.2.1.50

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 (170) hide show
  1. checksums.yaml +4 -4
  2. data/bin/verify-configs +1 -1
  3. data/lib/trackler/version.rb +1 -1
  4. data/problem-specifications/exercises/kindergarten-garden/canonical-data.json +0 -37
  5. data/tracks/c/exercises/allergies/test/test_allergies.c +41 -41
  6. data/tracks/common-lisp/config.json +266 -252
  7. data/tracks/common-lisp/config/maintainers.json +23 -23
  8. data/tracks/common-lisp/exercises/allergies/README.md +0 -1
  9. data/tracks/common-lisp/exercises/atbash-cipher/README.md +2 -1
  10. data/tracks/common-lisp/exercises/beer-song/README.md +1 -1
  11. data/tracks/common-lisp/exercises/binary/README.md +2 -0
  12. data/tracks/common-lisp/exercises/collatz-conjecture/README.md +4 -8
  13. data/tracks/common-lisp/exercises/crypto-square/README.md +4 -4
  14. data/tracks/common-lisp/exercises/etl/README.md +2 -0
  15. data/tracks/common-lisp/exercises/grade-school/README.md +0 -1
  16. data/tracks/common-lisp/exercises/grains/README.md +0 -1
  17. data/tracks/common-lisp/exercises/leap/README.md +1 -1
  18. data/tracks/common-lisp/exercises/meetup/README.md +1 -2
  19. data/tracks/common-lisp/exercises/nucleotide-count/README.md +8 -22
  20. data/tracks/common-lisp/exercises/pascals-triangle/README.md +1 -1
  21. data/tracks/common-lisp/exercises/perfect-numbers/README.md +3 -4
  22. data/tracks/common-lisp/exercises/phone-number/README.md +3 -2
  23. data/tracks/common-lisp/exercises/roman-numerals/README.md +1 -1
  24. data/tracks/common-lisp/exercises/scrabble-score/README.md +3 -1
  25. data/tracks/common-lisp/exercises/space-age/README.md +2 -1
  26. data/tracks/common-lisp/exercises/sublist/README.md +65 -0
  27. data/tracks/common-lisp/exercises/sublist/example.lisp +24 -0
  28. data/tracks/common-lisp/exercises/sublist/sublist-test.lisp +87 -0
  29. data/tracks/common-lisp/exercises/sublist/sublist.lisp +8 -0
  30. data/tracks/common-lisp/exercises/triangle/README.md +9 -6
  31. data/tracks/common-lisp/exercises/trinary/README.md +1 -1
  32. data/tracks/common-lisp/exercises/word-count/README.md +1 -2
  33. data/tracks/ecmascript/config.json +30 -0
  34. data/tracks/ecmascript/exercises/bowling/README.md +80 -0
  35. data/tracks/ecmascript/exercises/bowling/bowling.spec.js +159 -0
  36. data/tracks/ecmascript/exercises/bowling/example.js +67 -0
  37. data/tracks/ecmascript/exercises/bowling/package.json +71 -0
  38. data/tracks/ecmascript/exercises/two-fer/README.md +47 -0
  39. data/tracks/ecmascript/exercises/two-fer/example.js +4 -0
  40. data/tracks/ecmascript/exercises/two-fer/package.json +69 -0
  41. data/tracks/ecmascript/exercises/two-fer/two-fer.spec.js +18 -0
  42. data/tracks/fsharp/exercises/pascals-triangle/Example.fs +12 -8
  43. data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangle.fs +2 -2
  44. data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangleTest.fs +15 -12
  45. data/tracks/fsharp/generators/Generators.fs +19 -0
  46. data/tracks/fsharp/generators/Templates/_AssertThrows.liquid +1 -0
  47. data/tracks/java/docs/ABOUT.md +13 -31
  48. data/tracks/java/exercises/bracket-push/.meta/version +1 -1
  49. data/tracks/java/exercises/bracket-push/src/test/java/BracketCheckerTest.java +7 -1
  50. data/tracks/java/exercises/collatz-conjecture/.meta/version +1 -1
  51. data/tracks/java/exercises/etl/README.md +1 -1
  52. data/tracks/java/exercises/ocr-numbers/README.md +1 -1
  53. data/tracks/java/exercises/pascals-triangle/README.md +1 -1
  54. data/tracks/java/exercises/perfect-numbers/.meta/version +1 -1
  55. data/tracks/java/exercises/rna-transcription/README.md +1 -1
  56. data/tracks/java/exercises/secret-handshake/.meta/version +1 -1
  57. data/tracks/java/exercises/secret-handshake/src/test/java/HandshakeCalculatorTest.java +1 -9
  58. data/tracks/java/scripts/canonical_data_check.sh +104 -0
  59. data/tracks/javascript/exercises/twelve-days/example.js +23 -25
  60. data/tracks/julia/.travis.yml +1 -0
  61. data/tracks/kotlin/exercises/all-your-base/.meta/version +1 -0
  62. data/tracks/kotlin/exercises/all-your-base/src/test/kotlin/BaseConverterTest.kt +0 -3
  63. data/tracks/kotlin/exercises/change/.meta/version +1 -0
  64. data/tracks/kotlin/exercises/change/src/test/kotlin/ChangeCalculatorTest.kt +0 -3
  65. data/tracks/kotlin/exercises/clock/.meta/version +1 -0
  66. data/tracks/kotlin/exercises/clock/src/test/kotlin/ClockAddTest.kt +1 -4
  67. data/tracks/kotlin/exercises/clock/src/test/kotlin/ClockCreationTest.kt +1 -4
  68. data/tracks/kotlin/exercises/clock/src/test/kotlin/ClockEqualTest.kt +1 -4
  69. data/tracks/kotlin/exercises/collatz-conjecture/.meta/version +1 -0
  70. data/tracks/kotlin/exercises/collatz-conjecture/src/test/kotlin/CollatzCalculatorTest.kt +0 -3
  71. data/tracks/kotlin/exercises/complex-numbers/.meta/version +1 -0
  72. data/tracks/kotlin/exercises/complex-numbers/src/test/kotlin/ComplexNumberTest.kt +0 -3
  73. data/tracks/kotlin/exercises/diamond/.meta/version +1 -0
  74. data/tracks/kotlin/exercises/diamond/src/test/kotlin/DiamondPrinterTest.kt +0 -3
  75. data/tracks/kotlin/exercises/etl/README.md +1 -1
  76. data/tracks/kotlin/exercises/forth/.meta/version +1 -0
  77. data/tracks/kotlin/exercises/forth/src/test/kotlin/ForthEvaluatorTest.kt +0 -3
  78. data/tracks/kotlin/exercises/grains/.meta/version +1 -0
  79. data/tracks/kotlin/exercises/grains/src/test/kotlin/BoardTest.kt +0 -3
  80. data/tracks/kotlin/exercises/hamming/.meta/version +1 -0
  81. data/tracks/kotlin/exercises/hamming/src/test/kotlin/HammingTest.kt +0 -3
  82. data/tracks/kotlin/exercises/list-ops/.meta/version +1 -0
  83. data/tracks/kotlin/exercises/list-ops/src/test/kotlin/ListExtensionsTest.kt +0 -3
  84. data/tracks/kotlin/exercises/meetup/.meta/version +1 -0
  85. data/tracks/kotlin/exercises/meetup/src/test/kotlin/MeetupTest.kt +0 -3
  86. data/tracks/kotlin/exercises/minesweeper/.meta/version +1 -0
  87. data/tracks/kotlin/exercises/minesweeper/src/test/kotlin/MinesweeperBoardTest.kt +0 -3
  88. data/tracks/kotlin/exercises/pangram/.meta/version +1 -0
  89. data/tracks/kotlin/exercises/pangram/src/test/kotlin/PangramTest.kt +0 -3
  90. data/tracks/kotlin/exercises/pascals-triangle/README.md +1 -1
  91. data/tracks/kotlin/exercises/prime-factors/.meta/version +1 -0
  92. data/tracks/kotlin/exercises/prime-factors/src/test/kotlin/PrimeFactorCalculatorTest.kt +0 -3
  93. data/tracks/kotlin/exercises/rna-transcription/.meta/version +1 -0
  94. data/tracks/kotlin/exercises/rna-transcription/README.md +1 -1
  95. data/tracks/kotlin/exercises/rna-transcription/src/test/kotlin/RnaTranscriptionTest.kt +0 -3
  96. data/tracks/kotlin/exercises/robot-simulator/.meta/version +1 -0
  97. data/tracks/kotlin/exercises/robot-simulator/src/test/kotlin/RobotTest.kt +0 -3
  98. data/tracks/kotlin/exercises/rotational-cipher/.meta/version +1 -0
  99. data/tracks/kotlin/exercises/rotational-cipher/src/test/kotlin/RotationalCipherTest.kt +0 -3
  100. data/tracks/kotlin/exercises/saddle-points/.meta/version +1 -0
  101. data/tracks/kotlin/exercises/saddle-points/src/test/kotlin/MatrixTest.kt +0 -3
  102. data/tracks/kotlin/exercises/say/.meta/version +1 -0
  103. data/tracks/kotlin/exercises/say/src/test/kotlin/NumberSpellerTest.kt +0 -3
  104. data/tracks/kotlin/exercises/secret-handshake/.meta/version +1 -0
  105. data/tracks/kotlin/exercises/secret-handshake/src/test/kotlin/HandshakeCalculatorTest.kt +0 -3
  106. data/tracks/kotlin/exercises/spiral-matrix/.meta/version +1 -0
  107. data/tracks/kotlin/exercises/spiral-matrix/src/test/kotlin/SpiralMatrixTest.kt +0 -3
  108. data/tracks/kotlin/exercises/sublist/.meta/version +1 -0
  109. data/tracks/kotlin/exercises/sublist/src/test/kotlin/SublistTest.kt +0 -3
  110. data/tracks/kotlin/scripts/canonical_data_check.sh +104 -0
  111. data/tracks/perl6/exercises/accumulate/accumulate.t +2 -3
  112. data/tracks/perl6/exercises/all-your-base/all-your-base.t +17 -18
  113. data/tracks/perl6/exercises/allergies/allergies.t +17 -18
  114. data/tracks/perl6/exercises/anagram/anagram.t +17 -18
  115. data/tracks/perl6/exercises/atbash-cipher/atbash-cipher.t +17 -18
  116. data/tracks/perl6/exercises/bob/bob.t +20 -22
  117. data/tracks/perl6/exercises/bob/example.yaml +1 -2
  118. data/tracks/perl6/exercises/clock/clock.t +17 -18
  119. data/tracks/perl6/exercises/flatten-array/flatten-array.t +17 -18
  120. data/tracks/perl6/exercises/grade-school/grade-school.t +2 -3
  121. data/tracks/perl6/exercises/grains/grains.t +17 -18
  122. data/tracks/perl6/exercises/hello-world/example.yaml +1 -2
  123. data/tracks/perl6/exercises/hello-world/hello-world.t +20 -22
  124. data/tracks/perl6/exercises/leap/leap.t +17 -18
  125. data/tracks/perl6/exercises/linked-list/linked-list.t +2 -3
  126. data/tracks/perl6/exercises/luhn/luhn.t +17 -18
  127. data/tracks/perl6/exercises/phone-number/phone-number.t +17 -18
  128. data/tracks/perl6/exercises/raindrops/raindrops.t +17 -18
  129. data/tracks/perl6/exercises/rna-transcription/rna-transcription.t +17 -18
  130. data/tracks/perl6/exercises/robot-name/robot-name.t +2 -3
  131. data/tracks/perl6/exercises/scrabble-score/scrabble-score.t +17 -18
  132. data/tracks/perl6/exercises/space-age/space-age.t +17 -18
  133. data/tracks/perl6/exercises/word-count/word-count.t +17 -18
  134. data/tracks/perl6/exercises/wordy/wordy.t +17 -18
  135. data/tracks/perl6/templates/test.mustache +9 -10
  136. data/tracks/purescript/config.json +11 -0
  137. data/tracks/purescript/exercises/rna-transcription/README.md +25 -0
  138. data/tracks/purescript/exercises/rna-transcription/bower.json +26 -0
  139. data/tracks/purescript/exercises/rna-transcription/examples/src/RNATranscription.purs +18 -0
  140. data/tracks/purescript/exercises/rna-transcription/src/RNATranscription.purs +3 -0
  141. data/tracks/purescript/exercises/rna-transcription/test/Main.purs +48 -0
  142. data/tracks/python/exercises/variable-length-quantity/example.py +6 -6
  143. data/tracks/python/exercises/variable-length-quantity/variable_length_quantity.py +2 -2
  144. data/tracks/ruby/config.json +6 -0
  145. data/tracks/ruby/exercises/complex-numbers/.meta/.version +1 -0
  146. data/tracks/ruby/exercises/complex-numbers/.meta/generator/complex_numbers_case.rb +44 -0
  147. data/tracks/ruby/exercises/complex-numbers/.meta/solutions/complex_numbers.rb +49 -0
  148. data/tracks/ruby/exercises/complex-numbers/README.md +64 -0
  149. data/tracks/ruby/exercises/complex-numbers/complex_numbers_test.rb +207 -0
  150. data/tracks/ruby/exercises/crypto-square/.meta/.version +1 -0
  151. data/tracks/ruby/exercises/crypto-square/.meta/generator/crypto_square_case.rb +19 -0
  152. data/tracks/ruby/exercises/crypto-square/.meta/solutions/crypto_square.rb +20 -15
  153. data/tracks/ruby/exercises/crypto-square/README.md +10 -8
  154. data/tracks/ruby/exercises/crypto-square/crypto_square_test.rb +45 -81
  155. data/tracks/ruby/exercises/flatten-array/.meta/.version +1 -0
  156. data/tracks/ruby/exercises/flatten-array/.meta/generator/flatten_array_case.rb +11 -0
  157. data/tracks/ruby/exercises/flatten-array/.meta/solutions/flatten_array.rb +5 -2
  158. data/tracks/ruby/exercises/flatten-array/flatten_array_test.rb +32 -7
  159. data/tracks/ruby/exercises/hamming/hamming_test.rb +3 -3
  160. data/tracks/ruby/exercises/isogram/isogram_test.rb +4 -4
  161. data/tracks/ruby/exercises/leap/leap_test.rb +2 -2
  162. data/tracks/ruby/exercises/pig-latin/.meta/.version +1 -1
  163. data/tracks/ruby/exercises/pig-latin/.meta/solutions/pig_latin.rb +2 -2
  164. data/tracks/ruby/exercises/pig-latin/pig_latin_test.rb +17 -7
  165. data/tracks/ruby/exercises/queen-attack/.meta/generator/queen_attack_case.rb +1 -1
  166. data/tracks/ruby/exercises/queen-attack/queen_attack_test.rb +7 -7
  167. data/tracks/ruby/exercises/sum-of-multiples/.meta/.version +1 -1
  168. data/tracks/ruby/exercises/sum-of-multiples/.meta/solutions/sum_of_multiples.rb +1 -1
  169. data/tracks/ruby/exercises/sum-of-multiples/sum_of_multiples_test.rb +7 -2
  170. metadata +53 -2
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -2,9 +2,6 @@ import org.junit.Ignore
2
2
  import org.junit.Test
3
3
  import kotlin.test.assertEquals
4
4
 
5
- /*
6
- * version: 1.0.0
7
- */
8
5
  class ListExtensionsTest {
9
6
 
10
7
  @Test
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -4,9 +4,6 @@ import java.time.DayOfWeek
4
4
  import java.time.LocalDate
5
5
  import kotlin.test.assertEquals
6
6
 
7
- /*
8
- * version: 1.0.0
9
- */
10
7
  class MeetupTest {
11
8
 
12
9
  @Test
@@ -4,9 +4,6 @@ import org.junit.Test
4
4
  import org.junit.rules.ExpectedException
5
5
  import kotlin.test.assertEquals
6
6
 
7
- /*
8
- * version: 1.0.0
9
- */
10
7
  class MinesweeperBoardTest {
11
8
 
12
9
  /*
@@ -0,0 +1 @@
1
+ 1.1.0
@@ -3,9 +3,6 @@ import org.junit.Ignore
3
3
  import kotlin.test.assertFalse
4
4
  import kotlin.test.assertTrue
5
5
 
6
- /*
7
- * version: 1.1.0
8
- */
9
6
  class PangramTest {
10
7
 
11
8
  @Test
@@ -1,4 +1,4 @@
1
- # Pascals Triangle
1
+ # Pascal's Triangle
2
2
 
3
3
  Compute Pascal's triangle up to a given number of rows.
4
4
 
@@ -2,9 +2,6 @@ import org.junit.Ignore
2
2
  import org.junit.Test
3
3
  import kotlin.test.assertEquals
4
4
 
5
- /*
6
- * version: 1.0.0
7
- */
8
5
  class PrimeFactorCalculatorTest {
9
6
 
10
7
  @Test
@@ -1,4 +1,4 @@
1
- # Rna Transcription
1
+ # RNA Transcription
2
2
 
3
3
  Given a DNA strand, return its RNA complement (per RNA transcription).
4
4
 
@@ -2,9 +2,6 @@ import org.junit.Test
2
2
  import org.junit.Ignore
3
3
  import kotlin.test.assertEquals
4
4
 
5
- /*
6
- * version: 1.0.1
7
- */
8
5
  class RnaTranscriptionTest {
9
6
 
10
7
  /*
@@ -2,9 +2,6 @@ import org.junit.Ignore
2
2
  import org.junit.Test
3
3
  import kotlin.test.assertEquals
4
4
 
5
- /*
6
- * version: 1.0.0
7
- */
8
5
  class RobotTest {
9
6
 
10
7
  @Test
@@ -2,9 +2,6 @@ import org.junit.Ignore
2
2
  import org.junit.Test
3
3
  import kotlin.test.assertEquals
4
4
 
5
- /*
6
- * version: 1.0.0
7
- */
8
5
  class RotationalCipherTest {
9
6
 
10
7
  @Test
@@ -3,9 +3,6 @@ import org.junit.Test
3
3
  import java.util.Collections.emptySet
4
4
  import kotlin.test.assertEquals
5
5
 
6
- /*
7
- * version: 1.1.0
8
- */
9
6
  class MatrixTest {
10
7
 
11
8
  @Test
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -5,9 +5,6 @@ import org.junit.rules.ExpectedException
5
5
  import java.math.BigInteger
6
6
  import kotlin.test.assertEquals
7
7
 
8
- /*
9
- * version: 1.0.0
10
- */
11
8
  class NumberSpellerTest {
12
9
 
13
10
  @Rule
@@ -2,9 +2,6 @@ import org.junit.Ignore
2
2
  import org.junit.Test
3
3
  import kotlin.test.assertEquals
4
4
 
5
- /*
6
- * version: 1.1.0
7
- */
8
5
  class HandshakeCalculatorTest {
9
6
 
10
7
  @Test
@@ -2,9 +2,6 @@ import org.junit.Assert.assertArrayEquals
2
2
  import org.junit.Ignore
3
3
  import org.junit.Test
4
4
 
5
- /*
6
- * version: 1.0.0
7
- */
8
5
  class SpiralMatrixTest {
9
6
 
10
7
  @Test
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -2,9 +2,6 @@ import org.junit.Ignore
2
2
  import org.junit.Test
3
3
  import kotlin.test.assertEquals
4
4
 
5
- /*
6
- * version: 1.0.0
7
- */
8
5
  class SublistTest {
9
6
 
10
7
  @Test
@@ -0,0 +1,104 @@
1
+ #!/usr/bin/env bash
2
+
3
+ print_usage() {
4
+ echo "Usage: ./canonical_data_check.sh -t path/to/track -s path/to/problem/specifications"
5
+ }
6
+
7
+ # Execution begins
8
+
9
+ command -v jq >/dev/null 2>&1 || {
10
+ echo >&2 "This script requires jq but it's not installed. Aborting."
11
+ exit 1
12
+ }
13
+
14
+ num_args=$#
15
+
16
+ if [ $num_args -eq 0 ]
17
+ then
18
+ print_usage
19
+ exit 0
20
+ fi
21
+
22
+ path_to_track=
23
+ path_to_problem_specifications=
24
+
25
+ while getopts ":t:s:" option
26
+ do
27
+ case "$option" in
28
+ "t")
29
+ path_to_track="$OPTARG"
30
+ ;;
31
+ "s")
32
+ path_to_problem_specifications="$OPTARG"
33
+ ;;
34
+ *)
35
+ echo "Unrecognized option. Aborting."
36
+ print_usage
37
+ exit 1
38
+ ;;
39
+ esac
40
+ done
41
+
42
+ if [ -z "$path_to_track" ]
43
+ then
44
+ echo "Path to track missing."
45
+ print_usage
46
+ exit 1
47
+ fi
48
+
49
+ if [ -z "$path_to_problem_specifications" ]
50
+ then
51
+ echo "Path to problem specifications missing."
52
+ print_usage
53
+ exit 1
54
+ fi
55
+
56
+ config_file_path="$path_to_track/config.json"
57
+
58
+ if ! [ -f "$config_file_path" ]
59
+ then
60
+ echo "Config file not found at $config_file_path."
61
+ exit 1
62
+ fi
63
+
64
+ track_exercise_slugs=$(jq '.exercises[] | select(has("deprecated") | not) | .slug' $config_file_path | tr -d "\"")
65
+
66
+ for slug in $track_exercise_slugs
67
+ do
68
+ canonical_data_folder_path="$path_to_problem_specifications/exercises/$slug"
69
+
70
+ if ! [ -d "$canonical_data_folder_path" ]
71
+ then
72
+ echo "Canonical data folder $canonical_data_folder_path not found. Aborting."
73
+ exit 1
74
+ fi
75
+
76
+ canonical_data_file_path="$canonical_data_folder_path/canonical-data.json"
77
+
78
+ if ! [ -f "$canonical_data_file_path" ]
79
+ then
80
+ # echo "$slug: no canonical data found."
81
+ continue
82
+ fi
83
+
84
+ canonical_data_version=$(jq '.version' $canonical_data_file_path | tr -d "\"")
85
+
86
+ track_exercise_version_file_path="$path_to_track/exercises/$slug/.meta/version"
87
+
88
+ if ! [ -f "$track_exercise_version_file_path" ]
89
+ then
90
+ echo "$slug: needs update or version file (v$canonical_data_version)."
91
+ continue
92
+ fi
93
+
94
+ track_data_version=$(cat $track_exercise_version_file_path)
95
+
96
+ if [ "$track_data_version" = "$canonical_data_version" ]
97
+ then
98
+ # echo "$slug: up-to-date."
99
+ continue
100
+ else
101
+ echo "$slug: needs update (v$track_data_version -> v$canonical_data_version)."
102
+ fi
103
+
104
+ done
@@ -38,6 +38,5 @@ is-deeply accumulate(['a', 'b', 'c' ], sub ($inp) { [ accumulate( [1, 2, 3], sub
38
38
  is-deeply accumulate(['the', 'quick', 'brown', 'fox'], sub { @_[0].flip }),
39
39
  ['eht', 'kciuq', 'nworb', 'xof'],
40
40
  'reverse strings';
41
- INIT {
42
- $module = 'Example' if %*ENV<EXERCISM>;
43
- }
41
+
42
+ INIT { $module = 'Example' if %*ENV<EXERCISM> }
@@ -21,7 +21,7 @@ if ::($exercise).^ver !~~ $version {
21
21
 
22
22
  require ::($module) <&convert-base>;
23
23
 
24
- my $c-data;
24
+ my $c-data = from-json $=pod.pop.contents;
25
25
 
26
26
  for @($c-data<cases>) -> $case {
27
27
  if $case<expected> ~~ Array:D { test }
@@ -44,21 +44,8 @@ for @($c-data<cases>) -> $case {
44
44
  sub call-convert-base { convert-base(|$case<input_base input_digits output_base>) }
45
45
  }
46
46
 
47
- unless %*ENV<EXERCISM> {
48
- skip-rest 'exercism tests';
49
- exit;
50
- }
51
-
52
- subtest 'canonical-data' => {
53
- (my $c-data-file = "$dir/../../problem-specifications/exercises/{
54
- $dir.IO.resolve.basename
55
- }/canonical-data.json".IO.resolve) ~~ :f ??
56
- is-deeply $c-data, EVAL('from-json $c-data-file.slurp'), 'match problem-specifications' !!
57
- flunk 'problem-specifications file not found';
58
- }
59
-
60
- INIT {
61
- $c-data := from-json q:to/END/;
47
+ =head2 Canonical Data
48
+ =begin code
62
49
 
63
50
  {
64
51
  "exercise": "all-your-base",
@@ -255,7 +242,19 @@ $c-data := from-json q:to/END/;
255
242
  ]
256
243
  }
257
244
 
258
- END
245
+ =end code
259
246
 
260
- $module = 'Example' if %*ENV<EXERCISM>;
247
+ unless %*ENV<EXERCISM> {
248
+ skip-rest 'exercism tests';
249
+ exit;
250
+ }
251
+
252
+ subtest 'canonical-data' => {
253
+ (my $c-data-file = "$dir/../../problem-specifications/exercises/{
254
+ $dir.IO.resolve.basename
255
+ }/canonical-data.json".IO.resolve) ~~ :f ??
256
+ is-deeply $c-data, EVAL('from-json $c-data-file.slurp'), 'match problem-specifications' !!
257
+ flunk 'problem-specifications file not found';
261
258
  }
259
+
260
+ INIT { $module = 'Example' if %*ENV<EXERCISM> }
@@ -21,7 +21,7 @@ if ::($exercise).^ver !~~ $version {
21
21
 
22
22
  require ::($module) <&allergic-to &list-allergies>;
23
23
 
24
- my $c-data;
24
+ my $c-data = from-json $=pod.pop.contents;
25
25
  for $c-data<cases>.values -> %case-set {
26
26
 
27
27
  subtest 'allergic-to' => {
@@ -40,21 +40,8 @@ for $c-data<cases>.values -> %case-set {
40
40
 
41
41
  }
42
42
 
43
- unless %*ENV<EXERCISM> {
44
- skip-rest 'exercism tests';
45
- exit;
46
- }
47
-
48
- subtest 'canonical-data' => {
49
- (my $c-data-file = "$dir/../../problem-specifications/exercises/{
50
- $dir.IO.resolve.basename
51
- }/canonical-data.json".IO.resolve) ~~ :f ??
52
- is-deeply $c-data, EVAL('from-json $c-data-file.slurp'), 'match problem-specifications' !!
53
- flunk 'problem-specifications file not found';
54
- }
55
-
56
- INIT {
57
- $c-data := from-json q:to/END/;
43
+ =head2 Canonical Data
44
+ =begin code
58
45
 
59
46
  {
60
47
  "exercise": "allergies",
@@ -206,7 +193,19 @@ $c-data := from-json q:to/END/;
206
193
  ]
207
194
  }
208
195
 
209
- END
196
+ =end code
210
197
 
211
- $module = 'Example' if %*ENV<EXERCISM>;
198
+ unless %*ENV<EXERCISM> {
199
+ skip-rest 'exercism tests';
200
+ exit;
201
+ }
202
+
203
+ subtest 'canonical-data' => {
204
+ (my $c-data-file = "$dir/../../problem-specifications/exercises/{
205
+ $dir.IO.resolve.basename
206
+ }/canonical-data.json".IO.resolve) ~~ :f ??
207
+ is-deeply $c-data, EVAL('from-json $c-data-file.slurp'), 'match problem-specifications' !!
208
+ flunk 'problem-specifications file not found';
212
209
  }
210
+
211
+ INIT { $module = 'Example' if %*ENV<EXERCISM> }
@@ -21,24 +21,11 @@ if ::($exercise).^ver !~~ $version {
21
21
 
22
22
  require ::($module) <&match-anagrams>;
23
23
 
24
- my $c-data;
24
+ my $c-data = from-json $=pod.pop.contents;
25
25
  is match-anagrams(|.<subject candidates>), |.<expected description> for @($c-data<cases>);
26
26
 
27
- unless %*ENV<EXERCISM> {
28
- skip-rest 'exercism tests';
29
- exit;
30
- }
31
-
32
- subtest 'canonical-data' => {
33
- (my $c-data-file = "$dir/../../problem-specifications/exercises/{
34
- $dir.IO.resolve.basename
35
- }/canonical-data.json".IO.resolve) ~~ :f ??
36
- is-deeply $c-data, EVAL('from-json $c-data-file.slurp'), 'match problem-specifications' !!
37
- flunk 'problem-specifications file not found';
38
- }
39
-
40
- INIT {
41
- $c-data := from-json q:to/END/;
27
+ =head2 Canonical Data
28
+ =begin code
42
29
 
43
30
  {
44
31
  "exercise": "anagram",
@@ -171,7 +158,19 @@ $c-data := from-json q:to/END/;
171
158
  ]
172
159
  }
173
160
 
174
- END
161
+ =end code
175
162
 
176
- $module = 'Example' if %*ENV<EXERCISM>;
163
+ unless %*ENV<EXERCISM> {
164
+ skip-rest 'exercism tests';
165
+ exit;
166
+ }
167
+
168
+ subtest 'canonical-data' => {
169
+ (my $c-data-file = "$dir/../../problem-specifications/exercises/{
170
+ $dir.IO.resolve.basename
171
+ }/canonical-data.json".IO.resolve) ~~ :f ??
172
+ is-deeply $c-data, EVAL('from-json $c-data-file.slurp'), 'match problem-specifications' !!
173
+ flunk 'problem-specifications file not found';
177
174
  }
175
+
176
+ INIT { $module = 'Example' if %*ENV<EXERCISM> }