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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/delphi/exercises/bowling/uBowlingExample.pas +31 -4
  4. data/tracks/delphi/exercises/bowling/uBowlingTests.pas +81 -5
  5. data/tracks/elm/config/exercise_readme.go.tmpl +29 -4
  6. data/tracks/elm/exercises/accumulate/README.md +0 -3
  7. data/tracks/elm/exercises/all-your-base/README.md +0 -1
  8. data/tracks/elm/exercises/allergies/README.md +0 -1
  9. data/tracks/elm/exercises/atbash-cipher/README.md +2 -1
  10. data/tracks/elm/exercises/etl/README.md +3 -1
  11. data/tracks/elm/exercises/grade-school/README.md +0 -1
  12. data/tracks/elm/exercises/grains/README.md +0 -1
  13. data/tracks/elm/exercises/leap/README.md +1 -1
  14. data/tracks/elm/exercises/list-ops/README.md +0 -1
  15. data/tracks/elm/exercises/nucleotide-count/README.md +8 -22
  16. data/tracks/elm/exercises/pangram/README.md +1 -1
  17. data/tracks/elm/exercises/pascals-triangle/README.md +1 -1
  18. data/tracks/elm/exercises/phone-number/README.md +4 -3
  19. data/tracks/elm/exercises/rna-transcription/README.md +2 -2
  20. data/tracks/elm/exercises/roman-numerals/README.md +1 -1
  21. data/tracks/elm/exercises/run-length-encoding/README.md +4 -4
  22. data/tracks/elm/exercises/scrabble-score/README.md +3 -1
  23. data/tracks/elm/exercises/space-age/README.md +1 -1
  24. data/tracks/elm/exercises/sublist/README.md +0 -1
  25. data/tracks/elm/exercises/sum-of-multiples/README.md +3 -6
  26. data/tracks/elm/exercises/triangle/README.md +9 -6
  27. data/tracks/elm/exercises/word-count/README.md +1 -2
  28. data/tracks/go/config.json +12 -0
  29. data/tracks/go/exercises/forth/.meta/gen.go +5 -3
  30. data/tracks/go/exercises/forth/cases_test.go +2 -2
  31. data/tracks/go/exercises/grains/.meta/gen.go +10 -8
  32. data/tracks/go/exercises/grains/cases_test.go +2 -2
  33. data/tracks/go/exercises/isogram/.meta/gen.go +5 -3
  34. data/tracks/go/exercises/isogram/cases_test.go +2 -2
  35. data/tracks/go/exercises/proverb/.meta/gen.go +51 -0
  36. data/tracks/go/exercises/proverb/README.md +41 -0
  37. data/tracks/go/exercises/proverb/cases_test.go +44 -0
  38. data/tracks/go/exercises/proverb/example.go +19 -0
  39. data/tracks/go/exercises/proverb/proverb.go +15 -0
  40. data/tracks/go/exercises/proverb/proverb_test.go +23 -0
  41. data/tracks/julia/exercises/isbn-verifier/example.jl +2 -0
  42. data/tracks/julia/exercises/isbn-verifier/runtests.jl +4 -4
  43. data/tracks/rust/exercises/two-bucket/README.md +1 -1
  44. data/tracks/scala/exercises/bracket-push/src/test/scala/BracketPushTest.scala +17 -15
  45. data/tracks/scala/exercises/change/src/test/scala/ChangeTest.scala +2 -2
  46. data/tracks/scala/exercises/collatz-conjecture/src/test/scala/CollatzConjectureTest.scala +2 -2
  47. data/tracks/scala/exercises/connect/src/test/scala/ConnectTest.scala +1 -1
  48. data/tracks/scala/exercises/crypto-square/src/test/scala/CryptoSquareTest.scala +20 -41
  49. data/tracks/scala/exercises/custom-set/src/test/scala/CustomSetTest.scala +58 -40
  50. data/tracks/scala/exercises/difference-of-squares/src/test/scala/DifferenceOfSquaresTest.scala +1 -1
  51. data/tracks/scala/testgen/src/main/scala/BracketPushTestGenerator.scala +1 -1
  52. data/tracks/scala/testgen/src/main/scala/ChangeTestGenerator.scala +3 -3
  53. data/tracks/scala/testgen/src/main/scala/CollatzConjectureTestGenerator.scala +3 -3
  54. data/tracks/scala/testgen/src/main/scala/ConnectTestGenerator.scala +6 -6
  55. data/tracks/scala/testgen/src/main/scala/CryptoSquareTestGenerator.scala +1 -1
  56. data/tracks/scala/testgen/src/main/scala/CustomSetTestGenerator.scala +32 -26
  57. data/tracks/scala/testgen/src/main/scala/DifferenceOfSquaresTestGenerator.scala +1 -1
  58. metadata +8 -3
  59. data/tracks/elm/docs/EXERCISE_README_INSERT.md +0 -28
@@ -1,6 +1,6 @@
1
1
  import org.scalatest.{Matchers, FunSuite}
2
2
 
3
- /** @version 1.1.0 */
3
+ /** @version 1.2.0 */
4
4
  class DifferenceOfSquaresTest extends FunSuite with Matchers {
5
5
 
6
6
  test("square of sum 1") {
@@ -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, fromLabeledTest("input"))
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 fromLabeledTest(argNames: String*): ToTestCaseData =
18
+ def fromLabeledTestFromInput(argNames: String*): ToTestCaseData =
19
19
  withLabeledTest { sut =>
20
20
  labeledTest =>
21
- val args = sutArgs(labeledTest.result, argNames: _*)
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
- fromLabeledTest("target", "coins"))
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 fromLabeledTest(argNames: String*): ToTestCaseData =
18
+ def fromLabeledTestFromInput(argNames: String*): ToTestCaseData =
19
19
  withLabeledTest { sut =>
20
20
  labeledTest =>
21
- val args = sutArgs(labeledTest.result, argNames: _*)
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, fromLabeledTest("number"))
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 sutArgs(parseResult: CanonicalDataParser.ParseResult, argNames: String*): String =
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 fromLabeledTest(argNames: String*): ToTestCaseData =
31
+ def fromLabeledTestFromInput(argNames: String*): ToTestCaseData =
32
32
  withLabeledTest { sut =>
33
33
  labeledTest =>
34
- val args = sutArgs(labeledTest.result, argNames: _*)
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, fromLabeledTest("board"),
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
- fromLabeledTestAlt("normalizedPlaintext" -> Seq("plaintext"), "plaintextSegments" -> Seq("plaintext"),
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 EmptyTestCase(description: String, set: List[Int], expected: Boolean)
237
- case class ContainsTestCase(description: String, set: List[Int], element: Int, expected: Boolean)
238
- case class SubsetTestCase(description: String, set1: List[Int], set2: List[Int], expected: Boolean)
239
- case class DisjointTestCase(description: String, set1: List[Int], set2: List[Int], expected: Boolean)
240
- case class EqualTestCase(description: String, set1: List[Int], set2: List[Int], expected: Boolean)
241
- case class AddTestCase(description: String, set: List[Int], element: Int, expected: List[Int])
242
- case class IntersectionTestCase(description: String, set1: List[Int], set2: List[Int], expected: List[Int])
243
- case class DifferenceTestCase(description: String, set1: List[Int], set2: List[Int], expected: List[Int])
244
- case class UnionTestCase(description: String, set1: List[Int], set2: List[Int], expected: List[Int])
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
- fromLabeledTestAlt("squareOfSum" -> Seq("number"), "sumOfSquares" -> Seq("number"),
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.106
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-16 00:00:00.000000000 Z
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!