trackler 2.2.1.106 → 2.2.1.107
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/delphi/exercises/bowling/uBowlingExample.pas +31 -4
- data/tracks/delphi/exercises/bowling/uBowlingTests.pas +81 -5
- data/tracks/elm/config/exercise_readme.go.tmpl +29 -4
- data/tracks/elm/exercises/accumulate/README.md +0 -3
- data/tracks/elm/exercises/all-your-base/README.md +0 -1
- data/tracks/elm/exercises/allergies/README.md +0 -1
- data/tracks/elm/exercises/atbash-cipher/README.md +2 -1
- data/tracks/elm/exercises/etl/README.md +3 -1
- data/tracks/elm/exercises/grade-school/README.md +0 -1
- data/tracks/elm/exercises/grains/README.md +0 -1
- data/tracks/elm/exercises/leap/README.md +1 -1
- data/tracks/elm/exercises/list-ops/README.md +0 -1
- data/tracks/elm/exercises/nucleotide-count/README.md +8 -22
- data/tracks/elm/exercises/pangram/README.md +1 -1
- data/tracks/elm/exercises/pascals-triangle/README.md +1 -1
- data/tracks/elm/exercises/phone-number/README.md +4 -3
- data/tracks/elm/exercises/rna-transcription/README.md +2 -2
- data/tracks/elm/exercises/roman-numerals/README.md +1 -1
- data/tracks/elm/exercises/run-length-encoding/README.md +4 -4
- data/tracks/elm/exercises/scrabble-score/README.md +3 -1
- data/tracks/elm/exercises/space-age/README.md +1 -1
- data/tracks/elm/exercises/sublist/README.md +0 -1
- data/tracks/elm/exercises/sum-of-multiples/README.md +3 -6
- data/tracks/elm/exercises/triangle/README.md +9 -6
- data/tracks/elm/exercises/word-count/README.md +1 -2
- data/tracks/go/config.json +12 -0
- data/tracks/go/exercises/forth/.meta/gen.go +5 -3
- data/tracks/go/exercises/forth/cases_test.go +2 -2
- data/tracks/go/exercises/grains/.meta/gen.go +10 -8
- data/tracks/go/exercises/grains/cases_test.go +2 -2
- data/tracks/go/exercises/isogram/.meta/gen.go +5 -3
- data/tracks/go/exercises/isogram/cases_test.go +2 -2
- data/tracks/go/exercises/proverb/.meta/gen.go +51 -0
- data/tracks/go/exercises/proverb/README.md +41 -0
- data/tracks/go/exercises/proverb/cases_test.go +44 -0
- data/tracks/go/exercises/proverb/example.go +19 -0
- data/tracks/go/exercises/proverb/proverb.go +15 -0
- data/tracks/go/exercises/proverb/proverb_test.go +23 -0
- data/tracks/julia/exercises/isbn-verifier/example.jl +2 -0
- data/tracks/julia/exercises/isbn-verifier/runtests.jl +4 -4
- data/tracks/rust/exercises/two-bucket/README.md +1 -1
- data/tracks/scala/exercises/bracket-push/src/test/scala/BracketPushTest.scala +17 -15
- data/tracks/scala/exercises/change/src/test/scala/ChangeTest.scala +2 -2
- data/tracks/scala/exercises/collatz-conjecture/src/test/scala/CollatzConjectureTest.scala +2 -2
- data/tracks/scala/exercises/connect/src/test/scala/ConnectTest.scala +1 -1
- data/tracks/scala/exercises/crypto-square/src/test/scala/CryptoSquareTest.scala +20 -41
- data/tracks/scala/exercises/custom-set/src/test/scala/CustomSetTest.scala +58 -40
- data/tracks/scala/exercises/difference-of-squares/src/test/scala/DifferenceOfSquaresTest.scala +1 -1
- data/tracks/scala/testgen/src/main/scala/BracketPushTestGenerator.scala +1 -1
- data/tracks/scala/testgen/src/main/scala/ChangeTestGenerator.scala +3 -3
- data/tracks/scala/testgen/src/main/scala/CollatzConjectureTestGenerator.scala +3 -3
- data/tracks/scala/testgen/src/main/scala/ConnectTestGenerator.scala +6 -6
- data/tracks/scala/testgen/src/main/scala/CryptoSquareTestGenerator.scala +1 -1
- data/tracks/scala/testgen/src/main/scala/CustomSetTestGenerator.scala +32 -26
- data/tracks/scala/testgen/src/main/scala/DifferenceOfSquaresTestGenerator.scala +1 -1
- metadata +8 -3
- data/tracks/elm/docs/EXERCISE_README_INSERT.md +0 -28
@@ -7,7 +7,7 @@ object BracketPushTestGenerator {
|
|
7
7
|
def main(args: Array[String]): Unit = {
|
8
8
|
val file = new File("src/main/resources/bracket-push.json")
|
9
9
|
|
10
|
-
val code = TestSuiteBuilder.build(file,
|
10
|
+
val code = TestSuiteBuilder.build(file, fromLabeledTestFromInput("value"))
|
11
11
|
println(s"-------------")
|
12
12
|
println(code)
|
13
13
|
println(s"-------------")
|
@@ -15,10 +15,10 @@ object ChangeTestGenerator {
|
|
15
15
|
}
|
16
16
|
}
|
17
17
|
|
18
|
-
def
|
18
|
+
def fromLabeledTestFromInput(argNames: String*): ToTestCaseData =
|
19
19
|
withLabeledTest { sut =>
|
20
20
|
labeledTest =>
|
21
|
-
val args =
|
21
|
+
val args = sutArgsFromInput(labeledTest.result, argNames: _*)
|
22
22
|
val property = labeledTest.property
|
23
23
|
val sutCall =
|
24
24
|
s"""$sut.$property($args)"""
|
@@ -28,7 +28,7 @@ object ChangeTestGenerator {
|
|
28
28
|
|
29
29
|
val code =
|
30
30
|
TestSuiteBuilder.build(file,
|
31
|
-
|
31
|
+
fromLabeledTestFromInput("target", "coins"))
|
32
32
|
|
33
33
|
println(s"-------------")
|
34
34
|
println(code)
|
@@ -15,10 +15,10 @@ object CollatzConjectureTestGenerator {
|
|
15
15
|
}
|
16
16
|
}
|
17
17
|
|
18
|
-
def
|
18
|
+
def fromLabeledTestFromInput(argNames: String*): ToTestCaseData =
|
19
19
|
withLabeledTest { sut =>
|
20
20
|
labeledTest =>
|
21
|
-
val args =
|
21
|
+
val args = sutArgsFromInput(labeledTest.result, argNames: _*)
|
22
22
|
val property = labeledTest.property
|
23
23
|
val sutCall =
|
24
24
|
s"""$sut.$property($args)"""
|
@@ -26,7 +26,7 @@ object CollatzConjectureTestGenerator {
|
|
26
26
|
TestCaseData(labeledTest.description, sutCall, expected)
|
27
27
|
}
|
28
28
|
|
29
|
-
val code = TestSuiteBuilder.build(file,
|
29
|
+
val code = TestSuiteBuilder.build(file, fromLabeledTestFromInput("number"))
|
30
30
|
|
31
31
|
println(s"-------------")
|
32
32
|
println(code)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import java.io.File
|
2
2
|
|
3
|
-
import testgen.TestSuiteBuilder._
|
3
|
+
import testgen.TestSuiteBuilder.{toString, _}
|
4
4
|
import testgen._
|
5
5
|
|
6
6
|
object ConnectTestGenerator {
|
@@ -16,8 +16,8 @@ object ConnectTestGenerator {
|
|
16
16
|
}
|
17
17
|
}
|
18
18
|
|
19
|
-
def
|
20
|
-
argNames map (name => toArgString(parseResult(name))) mkString
|
19
|
+
def sutArgsFromInput(parseResult: CanonicalDataParser.ParseResult, argNames: String*): String =
|
20
|
+
argNames map (name => toArgString(parseResult("input").asInstanceOf[Map[String, Any]](name))) mkString(", ")
|
21
21
|
|
22
22
|
def toArgString(any: Any): String = {
|
23
23
|
any match {
|
@@ -28,10 +28,10 @@ object ConnectTestGenerator {
|
|
28
28
|
}
|
29
29
|
}
|
30
30
|
|
31
|
-
def
|
31
|
+
def fromLabeledTestFromInput(argNames: String*): ToTestCaseData =
|
32
32
|
withLabeledTest { sut =>
|
33
33
|
labeledTest =>
|
34
|
-
val args =
|
34
|
+
val args = sutArgsFromInput(labeledTest.result, argNames: _*)
|
35
35
|
val property = labeledTest.property
|
36
36
|
val sutCall =
|
37
37
|
s"""$sut($args).$property"""
|
@@ -39,7 +39,7 @@ object ConnectTestGenerator {
|
|
39
39
|
TestCaseData(labeledTest.description, sutCall, expected)
|
40
40
|
}
|
41
41
|
|
42
|
-
val code = TestSuiteBuilder.build(file,
|
42
|
+
val code = TestSuiteBuilder.build(file, fromLabeledTestFromInput("board"),
|
43
43
|
Seq(),
|
44
44
|
Seq("// Filter readable board into valid input",
|
45
45
|
"private def mkBoard(lines: List[String]): List[String] =",
|
@@ -8,7 +8,7 @@ object CryptoSquareTestGenerator {
|
|
8
8
|
val file = new File("src/main/resources/crypto-square.json")
|
9
9
|
|
10
10
|
val code = TestSuiteBuilder.build(file,
|
11
|
-
|
11
|
+
fromLabeledTestAltFromInput("normalizedPlaintext" -> Seq("plaintext"), "plaintextSegments" -> Seq("plaintext"),
|
12
12
|
"encoded" -> Seq("plaintext"), "ciphertext" -> Seq("plaintext")))
|
13
13
|
println(s"-------------")
|
14
14
|
println(code)
|
@@ -4,6 +4,9 @@ import scala.io.Source
|
|
4
4
|
|
5
5
|
// Generates test suite from json test definition for the CustomSet exercise.
|
6
6
|
class CustomSetTestGenerator {
|
7
|
+
implicit val singleSetInputReader = Json.reads[SingleSetInput]
|
8
|
+
implicit val doubleSetInputReader = Json.reads[DoubleSetInput]
|
9
|
+
implicit val setWithElementInputReader = Json.reads[SetWithElementInput]
|
7
10
|
implicit val emptyTestCaseReader = Json.reads[EmptyTestCase]
|
8
11
|
implicit val containsTestCasesReader = Json.reads[ContainsTestCase]
|
9
12
|
implicit val subsetTestCasesReader = Json.reads[SubsetTestCase]
|
@@ -44,7 +47,7 @@ class CustomSetTestGenerator {
|
|
44
47
|
val emptyTestCases = (json \ "cases" \ 0 \ "cases").get.as[List[EmptyTestCase]]
|
45
48
|
|
46
49
|
implicit def testCaseToGen(tc: EmptyTestCase): TestCaseGen = {
|
47
|
-
val set = s"CustomSet.fromList(${tc.set})"
|
50
|
+
val set = s"CustomSet.fromList(${tc.input.set})"
|
48
51
|
val callSUT = s"CustomSet.empty(set)"
|
49
52
|
val expected = tc.expected.toString
|
50
53
|
val result = s"val set = $set"
|
@@ -63,8 +66,8 @@ class CustomSetTestGenerator {
|
|
63
66
|
val containsTestCases = (json \ "cases" \ 1 \ "cases").get.as[List[ContainsTestCase]]
|
64
67
|
|
65
68
|
implicit def testCaseToGen(tc: ContainsTestCase): TestCaseGen = {
|
66
|
-
val set = s"CustomSet.fromList(${tc.set})"
|
67
|
-
val callSUT = s"CustomSet.member(set, ${tc.element})"
|
69
|
+
val set = s"CustomSet.fromList(${tc.input.set})"
|
70
|
+
val callSUT = s"CustomSet.member(set, ${tc.input.element})"
|
68
71
|
val expected = tc.expected.toString
|
69
72
|
val result = s"val set = $set"
|
70
73
|
val checkResult = s"$callSUT should be ($expected)"
|
@@ -82,8 +85,8 @@ class CustomSetTestGenerator {
|
|
82
85
|
val subsetTestCases = (json \ "cases" \ 2 \ "cases").get.as[List[SubsetTestCase]]
|
83
86
|
|
84
87
|
implicit def testCaseToGen(tc: SubsetTestCase): TestCaseGen = {
|
85
|
-
val set1 = s"CustomSet.fromList(${tc.set1})"
|
86
|
-
val set2 = s"CustomSet.fromList(${tc.set2})"
|
88
|
+
val set1 = s"CustomSet.fromList(${tc.input.set1})"
|
89
|
+
val set2 = s"CustomSet.fromList(${tc.input.set2})"
|
87
90
|
val callSUT = s"CustomSet.isSubsetOf(set1, set2)"
|
88
91
|
val expected = tc.expected.toString
|
89
92
|
val result =
|
@@ -104,8 +107,8 @@ s"""val set1 = $set1
|
|
104
107
|
val disjointTestCases = (json \ "cases" \ 3 \ "cases").get.as[List[DisjointTestCase]]
|
105
108
|
|
106
109
|
implicit def testCaseToGen(tc: DisjointTestCase): TestCaseGen = {
|
107
|
-
val set1 = s"CustomSet.fromList(${tc.set1})"
|
108
|
-
val set2 = s"CustomSet.fromList(${tc.set2})"
|
110
|
+
val set1 = s"CustomSet.fromList(${tc.input.set1})"
|
111
|
+
val set2 = s"CustomSet.fromList(${tc.input.set2})"
|
109
112
|
val callSUT = s"CustomSet.isDisjointFrom(set1, set2)"
|
110
113
|
val expected = tc.expected.toString
|
111
114
|
val result =
|
@@ -126,8 +129,8 @@ s"""val set1 = $set1
|
|
126
129
|
val equalTestCases = (json \ "cases" \ 4 \ "cases").get.as[List[EqualTestCase]]
|
127
130
|
|
128
131
|
implicit def testCaseToGen(tc: EqualTestCase): TestCaseGen = {
|
129
|
-
val set1 = s"CustomSet.fromList(${tc.set1})"
|
130
|
-
val set2 = s"CustomSet.fromList(${tc.set2})"
|
132
|
+
val set1 = s"CustomSet.fromList(${tc.input.set1})"
|
133
|
+
val set2 = s"CustomSet.fromList(${tc.input.set2})"
|
131
134
|
val callSUT = s"CustomSet.isEqual(set1, set2)"
|
132
135
|
val expected = tc.expected.toString
|
133
136
|
val result =
|
@@ -148,8 +151,8 @@ s"""val set1 = $set1
|
|
148
151
|
val addTestCases = (json \ "cases" \ 5 \ "cases").get.as[List[AddTestCase]]
|
149
152
|
|
150
153
|
implicit def testCaseToGen(tc: AddTestCase): TestCaseGen = {
|
151
|
-
val set = s"CustomSet.fromList(${tc.set})"
|
152
|
-
val callSUT = s"CustomSet.insert(set, ${tc.element})"
|
154
|
+
val set = s"CustomSet.fromList(${tc.input.set})"
|
155
|
+
val callSUT = s"CustomSet.insert(set, ${tc.input.element})"
|
153
156
|
val expected = s"CustomSet.fromList(${tc.expected})"
|
154
157
|
val result =
|
155
158
|
s"""val set = $set
|
@@ -169,8 +172,8 @@ s"""val set = $set
|
|
169
172
|
val intersectionTestCases = (json \ "cases" \ 6 \ "cases").get.as[List[IntersectionTestCase]]
|
170
173
|
|
171
174
|
implicit def testCaseToGen(tc: IntersectionTestCase): TestCaseGen = {
|
172
|
-
val set1 = s"CustomSet.fromList(${tc.set1})"
|
173
|
-
val set2 = s"CustomSet.fromList(${tc.set2})"
|
175
|
+
val set1 = s"CustomSet.fromList(${tc.input.set1})"
|
176
|
+
val set2 = s"CustomSet.fromList(${tc.input.set2})"
|
174
177
|
val callSUT = s"CustomSet.intersection(set1, set2)"
|
175
178
|
val expected = s"CustomSet.fromList(${tc.expected})"
|
176
179
|
val result =
|
@@ -192,8 +195,8 @@ s"""val set1 = $set1
|
|
192
195
|
val differenceTestCases = (json \ "cases" \ 7 \ "cases").get.as[List[DifferenceTestCase]]
|
193
196
|
|
194
197
|
implicit def testCaseToGen(tc: DifferenceTestCase): TestCaseGen = {
|
195
|
-
val set1 = s"CustomSet.fromList(${tc.set1})"
|
196
|
-
val set2 = s"CustomSet.fromList(${tc.set2})"
|
198
|
+
val set1 = s"CustomSet.fromList(${tc.input.set1})"
|
199
|
+
val set2 = s"CustomSet.fromList(${tc.input.set2})"
|
197
200
|
val callSUT = s"CustomSet.difference(set1, set2)"
|
198
201
|
val expected = s"CustomSet.fromList(${tc.expected})"
|
199
202
|
val result =
|
@@ -215,8 +218,8 @@ s"""val set1 = $set1
|
|
215
218
|
val unionTestCases = (json \ "cases" \ 8 \ "cases").get.as[List[UnionTestCase]]
|
216
219
|
|
217
220
|
implicit def testCaseToGen(tc: UnionTestCase): TestCaseGen = {
|
218
|
-
val set1 = s"CustomSet.fromList(${tc.set1})"
|
219
|
-
val set2 = s"CustomSet.fromList(${tc.set2})"
|
221
|
+
val set1 = s"CustomSet.fromList(${tc.input.set1})"
|
222
|
+
val set2 = s"CustomSet.fromList(${tc.input.set2})"
|
220
223
|
val callSUT = s"CustomSet.union(set1, set2)"
|
221
224
|
val expected = s"CustomSet.fromList(${tc.expected})"
|
222
225
|
val result =
|
@@ -233,15 +236,18 @@ s"""val set1 = $set1
|
|
233
236
|
|
234
237
|
}
|
235
238
|
|
236
|
-
case class
|
237
|
-
case class
|
238
|
-
case class
|
239
|
-
case class
|
240
|
-
case class
|
241
|
-
case class
|
242
|
-
case class
|
243
|
-
case class
|
244
|
-
case class
|
239
|
+
case class SingleSetInput(set: List[Int])
|
240
|
+
case class DoubleSetInput(set1: List[Int], set2: List[Int])
|
241
|
+
case class SetWithElementInput(set: List[Int], element: Int)
|
242
|
+
case class EmptyTestCase(description: String, input: SingleSetInput, expected: Boolean)
|
243
|
+
case class ContainsTestCase(description: String, input: SetWithElementInput, expected: Boolean)
|
244
|
+
case class SubsetTestCase(description: String, input: DoubleSetInput, expected: Boolean)
|
245
|
+
case class DisjointTestCase(description: String, input: DoubleSetInput, expected: Boolean)
|
246
|
+
case class EqualTestCase(description: String, input: DoubleSetInput, expected: Boolean)
|
247
|
+
case class AddTestCase(description: String, input: SetWithElementInput, expected: List[Int])
|
248
|
+
case class IntersectionTestCase(description: String, input: DoubleSetInput, expected: List[Int])
|
249
|
+
case class DifferenceTestCase(description: String, input: DoubleSetInput, expected: List[Int])
|
250
|
+
case class UnionTestCase(description: String, input: DoubleSetInput, expected: List[Int])
|
245
251
|
|
246
252
|
|
247
253
|
object CustomSetTestGenerator {
|
@@ -8,7 +8,7 @@ object DifferenceOfSquaresTestGenerator {
|
|
8
8
|
val file = new File("src/main/resources/difference-of-squares.json")
|
9
9
|
|
10
10
|
val code = TestSuiteBuilder.build(file,
|
11
|
-
|
11
|
+
fromLabeledTestAltFromInput("squareOfSum" -> Seq("number"), "sumOfSquares" -> Seq("number"),
|
12
12
|
"differenceOfSquares" -> Seq("number")))
|
13
13
|
println(s"-------------")
|
14
14
|
println(code)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trackler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.1.
|
4
|
+
version: 2.2.1.107
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katrina Owen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|
@@ -4398,7 +4398,6 @@ files:
|
|
4398
4398
|
- tracks/elm/config/exercise_readme.go.tmpl
|
4399
4399
|
- tracks/elm/config/maintainers.json
|
4400
4400
|
- tracks/elm/docs/ABOUT.md
|
4401
|
-
- tracks/elm/docs/EXERCISE_README_INSERT.md
|
4402
4401
|
- tracks/elm/docs/INSTALLATION.md
|
4403
4402
|
- tracks/elm/docs/LEARNING.md
|
4404
4403
|
- tracks/elm/docs/RESOURCES.md
|
@@ -6198,6 +6197,12 @@ files:
|
|
6198
6197
|
- tracks/go/exercises/protein-translation/README.md
|
6199
6198
|
- tracks/go/exercises/protein-translation/example.go
|
6200
6199
|
- tracks/go/exercises/protein-translation/protein_translation_test.go
|
6200
|
+
- tracks/go/exercises/proverb/.meta/gen.go
|
6201
|
+
- tracks/go/exercises/proverb/README.md
|
6202
|
+
- tracks/go/exercises/proverb/cases_test.go
|
6203
|
+
- tracks/go/exercises/proverb/example.go
|
6204
|
+
- tracks/go/exercises/proverb/proverb.go
|
6205
|
+
- tracks/go/exercises/proverb/proverb_test.go
|
6201
6206
|
- tracks/go/exercises/pythagorean-triplet/README.md
|
6202
6207
|
- tracks/go/exercises/pythagorean-triplet/example.go
|
6203
6208
|
- tracks/go/exercises/pythagorean-triplet/pythagorean_triplet_test.go
|
@@ -1,28 +0,0 @@
|
|
1
|
-
## Elm Installation
|
2
|
-
|
3
|
-
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
4
|
-
installation and learning resources.
|
5
|
-
|
6
|
-
## Writing the Code
|
7
|
-
|
8
|
-
The first time you start an exercise, you'll need to ensure you have the
|
9
|
-
appropriate dependencies installed.
|
10
|
-
|
11
|
-
```bash
|
12
|
-
$ npm install
|
13
|
-
```
|
14
|
-
|
15
|
-
Execute the tests with:
|
16
|
-
|
17
|
-
```bash
|
18
|
-
$ npm test
|
19
|
-
```
|
20
|
-
|
21
|
-
Automatically run tests again when you save changes:
|
22
|
-
|
23
|
-
```bash
|
24
|
-
$ npm run watch
|
25
|
-
```
|
26
|
-
|
27
|
-
As you work your way through the test suite, be sure to remove the `skip <|`
|
28
|
-
calls from each test until you get them all passing!
|