trackler 2.2.1.101 → 2.2.1.102

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/protein-translation/description.md +2 -2
  4. data/problem-specifications/exercises/robot-simulator/canonical-data.json +27 -27
  5. data/problem-specifications/exercises/run-length-encoding/canonical-data.json +40 -14
  6. data/problem-specifications/exercises/tournament/canonical-data.json +71 -49
  7. data/tracks/bash/CONTRIBUTING.md +5 -10
  8. data/tracks/bash/POLICIES.md +57 -0
  9. data/tracks/bash/_template/example.sh +20 -1
  10. data/tracks/bash/exercises/hello-world/hello_world.sh +22 -0
  11. data/tracks/ceylon/exercises/anagram/source/anagram/AnagramTest.ceylon +1 -9
  12. data/tracks/ceylon/exercises/rna-transcription/README.md +1 -1
  13. data/tracks/fsharp/exercises/matrix/Example.fs +16 -13
  14. data/tracks/fsharp/exercises/matrix/Matrix.fs +2 -4
  15. data/tracks/fsharp/exercises/matrix/MatrixTest.fs +26 -67
  16. data/tracks/fsharp/exercises/saddle-points/Example.fs +19 -15
  17. data/tracks/fsharp/exercises/saddle-points/SaddlePointsTest.fs +31 -31
  18. data/tracks/fsharp/exercises/sublist/SublistTest.fs +71 -41
  19. data/tracks/fsharp/exercises/tournament/TournamentTest.fs +115 -48
  20. data/tracks/fsharp/exercises/transpose/Example.fs +10 -13
  21. data/tracks/fsharp/exercises/transpose/TransposeTest.fs +150 -219
  22. data/tracks/fsharp/generators/Generators.fs +55 -0
  23. data/tracks/go/exercises/clock/clock_test.go +1 -1
  24. data/tracks/go/exercises/poker/.meta/gen.go +5 -3
  25. data/tracks/go/exercises/poker/cases_test.go +2 -2
  26. data/tracks/go/exercises/prime-factors/.meta/gen.go +5 -3
  27. data/tracks/go/exercises/prime-factors/cases_test.go +2 -2
  28. data/tracks/go/exercises/rail-fence-cipher/.meta/gen.go +9 -7
  29. data/tracks/go/exercises/rail-fence-cipher/cases_test.go +2 -2
  30. data/tracks/go/exercises/raindrops/.meta/gen.go +4 -2
  31. data/tracks/go/exercises/raindrops/cases_test.go +2 -2
  32. data/tracks/go/exercises/reverse-string/.meta/gen.go +5 -3
  33. data/tracks/go/exercises/reverse-string/cases_test.go +2 -2
  34. data/tracks/go/exercises/rna-transcription/.meta/gen.go +11 -19
  35. data/tracks/go/exercises/rna-transcription/cases_test.go +20 -18
  36. data/tracks/go/exercises/rna-transcription/rna_transcription_test.go +3 -2
  37. data/tracks/go/exercises/run-length-encoding/.meta/gen.go +15 -9
  38. data/tracks/go/exercises/run-length-encoding/cases_test.go +2 -2
  39. data/tracks/go/exercises/sieve/.meta/gen.go +5 -3
  40. data/tracks/go/exercises/sieve/cases_test.go +2 -2
  41. data/tracks/go/exercises/space-age/.meta/gen.go +7 -5
  42. data/tracks/go/exercises/space-age/cases_test.go +2 -2
  43. data/tracks/go/exercises/sublist/.meta/gen.go +7 -5
  44. data/tracks/go/exercises/sublist/cases_test.go +2 -2
  45. data/tracks/go/exercises/variable-length-quantity/.meta/gen.go +7 -5
  46. data/tracks/go/exercises/variable-length-quantity/cases_test.go +2 -2
  47. data/tracks/haskell/exercises/rna-transcription/README.md +1 -1
  48. data/tracks/haskell/exercises/rna-transcription/package.yaml +1 -1
  49. data/tracks/haskell/exercises/rna-transcription/test/Tests.hs +12 -0
  50. data/tracks/javascript/.travis.yml +1 -1
  51. data/tracks/ruby/exercises/accumulate/.meta/hints.md +6 -3
  52. data/tracks/ruby/exercises/accumulate/README.md +6 -3
  53. metadata +4 -3
  54. data/tracks/fsharp/exercises/transpose/TrinaryTest.fs +0 -26
@@ -609,6 +609,9 @@ type Markdown() =
609
609
  { base.ToTestMethod (index, canonicalDataCase) with Skip = false }
610
610
 
611
611
  override this.PropertiesWithIdentifier canonicalDataCase = this.Properties canonicalDataCase
612
+
613
+ type Matrix() =
614
+ inherit GeneratorExercise()
612
615
 
613
616
  type Meetup() =
614
617
  inherit GeneratorExercise()
@@ -1125,6 +1128,25 @@ type RunLengthEncoding() =
1125
1128
  type RomanNumerals() =
1126
1129
  inherit GeneratorExercise()
1127
1130
 
1131
+ type SaddlePoints() =
1132
+ inherit GeneratorExercise()
1133
+
1134
+ let renderSaddlePoint (input: JObject) =
1135
+ (input.Value<int>("row"), input.Value<int>("column")) |> formatTuple
1136
+
1137
+ override __.RenderInput (_, _, value) =
1138
+ value :?> JArray
1139
+ |> normalizeJArray
1140
+ |> Seq.map formatValue
1141
+ |> formatMultiLineList
1142
+
1143
+ override __.RenderExpected (_, _, value) =
1144
+ (value :?> JArray).Values<JObject>()
1145
+ |> Seq.map renderSaddlePoint
1146
+ |> formatList
1147
+
1148
+ override this.PropertiesWithIdentifier canonicalDataCase = this.PropertiesUsedAsSutParameter canonicalDataCase
1149
+
1128
1150
  type Say() =
1129
1151
  inherit GeneratorExercise()
1130
1152
 
@@ -1168,9 +1190,27 @@ type SpiralMatrix() =
1168
1190
  |> Seq.map formatValue
1169
1191
  |> formatMultiLineList
1170
1192
 
1193
+ type Sublist() =
1194
+ inherit GeneratorExercise()
1195
+
1196
+ override __.RenderExpected (_, _, value) =
1197
+ string value |> String.upperCaseFirst
1198
+
1199
+ override this.PropertiesWithIdentifier canonicalDataCase = this.PropertiesUsedAsSutParameter canonicalDataCase
1200
+
1171
1201
  type SumOfMultiples() =
1172
1202
  inherit GeneratorExercise()
1173
1203
 
1204
+ type Tournament() =
1205
+ inherit GeneratorExercise()
1206
+
1207
+ override this.PropertiesWithIdentifier canonicalDataCase = this.Properties canonicalDataCase
1208
+
1209
+ override __.RenderValue (_, _, value) =
1210
+ value :?> JArray
1211
+ |> Seq.map formatValue
1212
+ |> formatMultiLineList
1213
+
1174
1214
  type TwelveDays() =
1175
1215
  inherit GeneratorExercise()
1176
1216
 
@@ -1183,6 +1223,21 @@ type TwelveDays() =
1183
1223
  |> Seq.map formatValue
1184
1224
  |> formatMultiLineList
1185
1225
 
1226
+ type Transpose() =
1227
+ inherit GeneratorExercise()
1228
+
1229
+ override this.PropertiesWithIdentifier canonicalDataCase = this.Properties canonicalDataCase
1230
+
1231
+ override __.IdentifierTypeAnnotation (_, _, value) =
1232
+ match value :?> JArray |> Seq.isEmpty with
1233
+ | true -> Some "string list"
1234
+ | false -> None
1235
+
1236
+ override __.RenderValue (_, _, value) =
1237
+ value :?> JArray
1238
+ |> Seq.map formatValue
1239
+ |> formatMultiLineList
1240
+
1186
1241
  type Triangle() =
1187
1242
  inherit GeneratorExercise()
1188
1243
 
@@ -50,7 +50,7 @@ func TestAddMinutes(t *testing.T) {
50
50
  func TestSubtractMinutes(t *testing.T) {
51
51
  for _, a := range subtractTests {
52
52
  if got := New(a.h, a.m).Subtract(a.a); got.String() != a.want {
53
- t.Fatalf("New(%d, %d).Add(%d) = %q, want %q",
53
+ t.Fatalf("New(%d, %d).Subtract(%d) = %q, want %q",
54
54
  a.h, a.m, a.a, got, a.want)
55
55
  }
56
56
  }
@@ -26,8 +26,10 @@ func main() {
26
26
  type js struct {
27
27
  Cases []struct {
28
28
  Description string
29
- Input []string
30
- Expected []string
29
+ Input struct {
30
+ Hands []string
31
+ }
32
+ Expected []string
31
33
  }
32
34
  }
33
35
 
@@ -68,7 +70,7 @@ var validTestCases = []validTestCase {
68
70
  {{range .J.Cases}}{
69
71
  name: "{{.Description}}",
70
72
  hands: []string{
71
- {{range pokerHands .Input}} {{printf "%q" .}},
73
+ {{range pokerHands .Input.Hands}} {{printf "%q" .}},
72
74
  {{end}} },
73
75
  best: {{pokerHands .Expected | printf "%#v"}},
74
76
  },
@@ -1,8 +1,8 @@
1
1
  package poker
2
2
 
3
3
  // Source: exercism/problem-specifications
4
- // Commit: d078ba8 poker: Add canonical-data (#793)
5
- // Problem Specifications Version: 1.0.0
4
+ // Commit: 8e97630 poker: apply "input" policy
5
+ // Problem Specifications Version: 1.1.0
6
6
 
7
7
  type validTestCase struct {
8
8
  name string
@@ -30,8 +30,10 @@ type TestGroup struct {
30
30
 
31
31
  type OneCase struct {
32
32
  Description string
33
- Input int64
34
- Expected []int64
33
+ Input struct {
34
+ Value int64
35
+ }
36
+ Expected []int64
35
37
  }
36
38
 
37
39
  // template applied to above data structure generates the Go test cases
@@ -47,7 +49,7 @@ var tests = []struct {
47
49
  {{range .J.Groups}}
48
50
  {{range .Cases}} {
49
51
  "{{.Description}}",
50
- {{.Input}},
52
+ {{.Input.Value}},
51
53
  {{printf "%#v" .Expected}},
52
54
  },
53
55
  {{end}}{{end}}}
@@ -1,8 +1,8 @@
1
1
  package prime
2
2
 
3
3
  // Source: exercism/problem-specifications
4
- // Commit: bf5bb2b prime-factors: Fix canonical-data.json formatting
5
- // Problem Specifications Version: 1.0.0
4
+ // Commit: d928874 prime-factors: apply "input" policy
5
+ // Problem Specifications Version: 1.1.0
6
6
 
7
7
  var tests = []struct {
8
8
  description string
@@ -35,9 +35,11 @@ type testGroup struct {
35
35
  type oneCase struct {
36
36
  Description string
37
37
  Property string
38
- Message string `json:"msg"`
39
- Rails int
40
- Expected string
38
+ Input struct {
39
+ Message string `json:"msg"`
40
+ Rails int
41
+ }
42
+ Expected string
41
43
  }
42
44
 
43
45
  // Template to generate test cases.
@@ -59,8 +61,8 @@ type testCase struct {
59
61
  {{- range .EncodeCases }}
60
62
 
61
63
  { {{.Description | printf "%q"}},
62
- {{.Message | printf "%q"}},
63
- {{.Rails}},
64
+ {{.Input.Message | printf "%q"}},
65
+ {{.Input.Rails}},
64
66
  {{.Expected | printf "%q"}}},
65
67
  {{- end }}
66
68
  }
@@ -71,8 +73,8 @@ type testCase struct {
71
73
  {{- range .DecodeCases }}
72
74
 
73
75
  { {{.Description | printf "%q"}},
74
- {{.Message | printf "%q"}},
75
- {{.Rails}},
76
+ {{.Input.Message | printf "%q"}},
77
+ {{.Input.Rails}},
76
78
  {{.Expected | printf "%q"}}},
77
79
  {{- end }}
78
80
  }
@@ -1,8 +1,8 @@
1
1
  package railfence
2
2
 
3
3
  // Source: exercism/problem-specifications
4
- // Commit: c01f9ca rail-fence-cipher 1.0.1: Remove "test to" from all descriptions
5
- // Problem Specifications Version: 1.0.1
4
+ // Commit: 88db37b rail-fence-cipher: apply "input" policy
5
+ // Problem Specifications Version: 1.1.0
6
6
 
7
7
  type testCase struct {
8
8
  description string
@@ -21,7 +21,9 @@ func main() {
21
21
  // The JSON structure we expect to be able to unmarshal into
22
22
  type js struct {
23
23
  Cases []struct {
24
- Number int
24
+ Input struct {
25
+ Number int
26
+ }
25
27
  Expected string
26
28
  }
27
29
  }
@@ -35,6 +37,6 @@ var tests = []struct {
35
37
  input int
36
38
  expected string
37
39
  }{
38
- {{range .J.Cases}}{ {{.Number}}, "{{.Expected}}"},
40
+ {{range .J.Cases}}{ {{.Input.Number}}, "{{.Expected}}"},
39
41
  {{end}}}
40
42
  `
@@ -1,8 +1,8 @@
1
1
  package raindrops
2
2
 
3
3
  // Source: exercism/problem-specifications
4
- // Commit: 9db5371 raindrops: Fix canonical-data.json formatting
5
- // Problem Specifications Version: 1.0.0
4
+ // Commit: 99de15d raindrops: apply "input" policy
5
+ // Problem Specifications Version: 1.1.0
6
6
 
7
7
  var tests = []struct {
8
8
  input int
@@ -29,8 +29,10 @@ type js struct {
29
29
  type oneCase struct {
30
30
  Description string
31
31
  Property string
32
- Input string
33
- Expected string
32
+ Input struct {
33
+ Value string
34
+ }
35
+ Expected string
34
36
  }
35
37
 
36
38
  // Template to generate test cases.
@@ -45,7 +47,7 @@ var testCases = []struct {
45
47
  }{ {{range .J.Cases}}
46
48
  {
47
49
  description: {{printf "%q" .Description}},
48
- input: {{printf "%q" .Input}},
50
+ input: {{printf "%q" .Input.Value}},
49
51
  expected: {{printf "%q" .Expected}},
50
52
  },{{end}}
51
53
  }
@@ -1,8 +1,8 @@
1
1
  package reverse
2
2
 
3
3
  // Source: exercism/problem-specifications
4
- // Commit: ae82c90 More consistent reverse-string canonical data
5
- // Problem Specifications Version: 1.0.1
4
+ // Commit: 2f77985 reverse-string: apply "input" policy
5
+ // Problem Specifications Version: 1.1.0
6
6
 
7
7
  var testCases = []struct {
8
8
  description string
@@ -22,33 +22,25 @@ func main() {
22
22
  type js struct {
23
23
  Cases []struct {
24
24
  Description string
25
- Dna string
26
- Expected string
25
+ Input struct {
26
+ Dna string
27
+ }
28
+ Expected string
27
29
  }
28
30
  }
29
31
 
30
32
  // Template applied to above data structure generates the Go test cases.
31
- //
32
- // Note x-common test cases have some test cases that are not used here.
33
- //
34
- // It has some with invalid DNA inputs indicated with null expected values.
35
- // The current API does not have an error or ok return. It could be changed
36
- // but it's simple for now, leaving the result undefined for invalid input.
37
- // So these test cases are skipped here.
38
- //
39
- // Also the x-common test cases include some test cases in the reverse
40
- // direction, from rna to dna. These are not called for by the exercise
41
- // readme and have no biological basis and so are not converted here.
42
33
  var tmpl = `package strand
43
34
 
44
35
  {{.Header}}
45
36
 
46
37
  var rnaTests = []struct {
47
- input string
48
- expected string
38
+ description string
39
+ input string
40
+ expected string
49
41
  }{
50
- {{range .J.Cases}} {{if and .Dna .Expected}} // {{.Description}}
51
- {"{{.Dna}}", "{{.Expected}}"},
52
-
53
- {{end}}{{end}}}
42
+ {{range .J.Cases}}{ "{{.Description}}",
43
+ "{{.Input.Dna}}", "{{.Expected}}",
44
+ },
45
+ {{end}}}
54
46
  `
@@ -1,25 +1,27 @@
1
1
  package strand
2
2
 
3
3
  // Source: exercism/problem-specifications
4
- // Commit: cb1fd3a rna-transcription: rephrase negative test descriptions
5
- // Problem Specifications Version: 1.0.1
4
+ // Commit: b4c24e6 rna-transcription: Apply new "input" policy
5
+ // Problem Specifications Version: 1.2.0
6
6
 
7
7
  var rnaTests = []struct {
8
- input string
9
- expected string
8
+ description string
9
+ input string
10
+ expected string
10
11
  }{
11
- // RNA complement of cytosine is guanine
12
- {"C", "G"},
13
-
14
- // RNA complement of guanine is cytosine
15
- {"G", "C"},
16
-
17
- // RNA complement of thymine is adenine
18
- {"T", "A"},
19
-
20
- // RNA complement of adenine is uracil
21
- {"A", "U"},
22
-
23
- // RNA complement
24
- {"ACGTGGTCTTAA", "UGCACCAGAAUU"},
12
+ {"RNA complement of cytosine is guanine",
13
+ "C", "G",
14
+ },
15
+ {"RNA complement of guanine is cytosine",
16
+ "G", "C",
17
+ },
18
+ {"RNA complement of thymine is adenine",
19
+ "T", "A",
20
+ },
21
+ {"RNA complement of adenine is uracil",
22
+ "A", "U",
23
+ },
24
+ {"RNA complement",
25
+ "ACGTGGTCTTAA", "UGCACCAGAAUU",
26
+ },
25
27
  }
@@ -5,9 +5,10 @@ import "testing"
5
5
  func TestRNATranscription(t *testing.T) {
6
6
  for _, test := range rnaTests {
7
7
  if actual := ToRNA(test.input); actual != test.expected {
8
- t.Errorf("ToRNA(%s): %s, expected %s",
9
- test.input, actual, test.expected)
8
+ t.Fatalf("FAIL: %s - ToRNA(%q): %q, expected %q",
9
+ test.description, test.input, actual, test.expected)
10
10
  }
11
+ t.Logf("PASS: %s", test.description)
11
12
  }
12
13
  }
13
14
 
@@ -29,18 +29,24 @@ type testGroup struct {
29
29
  Cases []json.RawMessage `property:"RAW"`
30
30
  EncodeCases []struct {
31
31
  Description string
32
- Input string
33
- Expected string
32
+ Input struct {
33
+ String string
34
+ }
35
+ Expected string
34
36
  } `property:"encode"`
35
37
  DecodeCases []struct {
36
38
  Description string
37
- Input string
38
- Expected string
39
+ Input struct {
40
+ String string
41
+ }
42
+ Expected string
39
43
  } `property:"decode"`
40
44
  EncodeDecodeCases []struct {
41
45
  Description string
42
- Input string
43
- Expected string
46
+ Input struct {
47
+ String string
48
+ }
49
+ Expected string
44
50
  } `property:"consistency"`
45
51
  }
46
52
 
@@ -58,7 +64,7 @@ var tmpl = `package encode
58
64
  description string
59
65
  }{
60
66
  {{- range .EncodeCases }}
61
- { {{.Input | printf "%q"}}, {{.Expected | printf "%q"}}, {{.Description | printf "%q"}} },
67
+ { {{.Input.String | printf "%q"}}, {{.Expected | printf "%q"}}, {{.Description | printf "%q"}} },
62
68
  {{- end }}
63
69
  }
64
70
  {{- end }}
@@ -70,7 +76,7 @@ var tmpl = `package encode
70
76
  description string
71
77
  }{
72
78
  {{- range .DecodeCases }}
73
- { {{.Input | printf "%q"}}, {{.Expected | printf "%q"}}, {{.Description | printf "%q"}} },
79
+ { {{.Input.String | printf "%q"}}, {{.Expected | printf "%q"}}, {{.Description | printf "%q"}} },
74
80
  {{- end }}
75
81
  }
76
82
  {{- end }}
@@ -82,7 +88,7 @@ var tmpl = `package encode
82
88
  description string
83
89
  }{
84
90
  {{- range .EncodeDecodeCases }}
85
- { {{.Input | printf "%q"}}, {{.Expected | printf "%q"}}, {{.Description | printf "%q"}} },
91
+ { {{.Input.String | printf "%q"}}, {{.Expected | printf "%q"}}, {{.Description | printf "%q"}} },
86
92
  {{- end }}
87
93
  }
88
94
  {{- end }}
@@ -1,8 +1,8 @@
1
1
  package encode
2
2
 
3
3
  // Source: exercism/problem-specifications
4
- // Commit: 503a57a run-length-encoding: Fix canonical-data.json formatting
5
- // Problem Specifications Version: 1.0.0
4
+ // Commit: 1b7900e run-length-encoding: apply "input" policy
5
+ // Problem Specifications Version: 1.1.0
6
6
 
7
7
  // run-length encode a string
8
8
  var encodeTests = []struct {