trackler 2.2.1.20 → 2.2.1.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/csharp/config.json +11 -0
  4. data/tracks/csharp/exercises/Exercises.All.sln +15 -1
  5. data/tracks/csharp/exercises/Exercises.Default.sln +120 -106
  6. data/tracks/csharp/exercises/complex-numbers/ComplexNumbers.cs +53 -0
  7. data/tracks/csharp/exercises/complex-numbers/ComplexNumbers.csproj +18 -0
  8. data/tracks/csharp/exercises/complex-numbers/ComplexNumbersTest.cs +255 -0
  9. data/tracks/csharp/exercises/complex-numbers/Example.cs +78 -0
  10. data/tracks/csharp/exercises/grains/Example.cs +8 -1
  11. data/tracks/csharp/exercises/grains/GrainsTest.cs +38 -17
  12. data/tracks/csharp/generators/Exercises/ComplexNumbers.cs +119 -0
  13. data/tracks/csharp/generators/Exercises/Grains.cs +29 -0
  14. data/tracks/csharp/generators/Output/ValueFormatter.cs +2 -0
  15. data/tracks/delphi/exercises/two-fer/utwoferExample.pas +2 -5
  16. data/tracks/ecmascript/exercises/queen-attack/example.js +28 -23
  17. data/tracks/ecmascript/exercises/queen-attack/queen-attack.spec.js +10 -15
  18. data/tracks/java/config.json +1 -0
  19. data/tracks/r/exercises/perfect-numbers/example.R +1 -1
  20. data/tracks/r/exercises/perfect-numbers/perfect-numbers.R +1 -1
  21. data/tracks/r/exercises/perfect-numbers/test_perfect-numbers.R +13 -13
  22. data/tracks/ruby/docs/24pullrequests.md +1 -1
  23. data/tracks/ruby/exercises/hello-world/.meta/generator/test_template.erb +1 -1
  24. data/tracks/ruby/exercises/hello-world/hello_world_test.rb +1 -1
  25. data/tracks/ruby/test/generator/command_line/generator_optparser_test.rb +1 -1
  26. data/tracks/ruby/test/generator/command_line_test.rb +1 -1
  27. data/tracks/ruby/test/generator/files/metadata_files_test.rb +1 -1
  28. data/tracks/rust/exercises/accumulate/README.md +0 -3
  29. data/tracks/rust/exercises/beer-song/src/lib.rs +7 -0
  30. data/tracks/rust/exercises/bob/src/lib.rs +3 -0
  31. data/tracks/rust/exercises/bowling/example.rs +1 -1
  32. data/tracks/rust/exercises/difference-of-squares/src/lib.rs +11 -0
  33. data/tracks/rust/exercises/grade-school/example.rs +1 -1
  34. data/tracks/rust/exercises/leap/src/lib.rs +3 -0
  35. data/tracks/rust/exercises/proverb/src/lib.rs +3 -0
  36. data/tracks/rust/exercises/raindrops/src/lib.rs +3 -0
  37. data/tracks/rust/exercises/sum-of-multiples/src/lib.rs +3 -0
  38. data/tracks/scala/exercises/space-age/example.scala +26 -20
  39. data/tracks/scala/exercises/space-age/src/main/scala/.keep +0 -0
  40. data/tracks/scala/exercises/space-age/src/test/scala/SpaceAgeTest.scala +19 -38
  41. data/tracks/scala/exercises/sublist/src/test/scala/SublistTest.scala +36 -44
  42. data/tracks/scala/testgen/src/main/scala/SpaceAgeTestGenerator.scala +39 -0
  43. data/tracks/scala/testgen/src/main/scala/SublistTestGenerator.scala +38 -0
  44. metadata +11 -3
  45. data/tracks/scala/exercises/space-age/src/main/scala/SpaceAge.scala +0 -10
@@ -25,9 +25,6 @@ Keep your hands off that collect/map/fmap/whatchamacallit functionality
25
25
  provided by your standard library!
26
26
  Solve this one yourself using other basic tools instead.
27
27
 
28
- Lisp specific: it's perfectly fine to use `MAPCAR` or the equivalent,
29
- as this is idiomatic Lisp, not a library function.
30
-
31
28
  ## Hints
32
29
 
33
30
  We are dealing with two types of situations. One is a function pointer and
@@ -0,0 +1,7 @@
1
+ pub fn verse(n: i32) -> String {
2
+
3
+ }
4
+
5
+ pub fn sing(start: i32, end: i32) -> String {
6
+
7
+ }
@@ -0,0 +1,3 @@
1
+ pub fn reply(message: &str) -> &str {
2
+
3
+ }
@@ -104,7 +104,7 @@ impl BowlingGame {
104
104
  return Err("Game Finished. No more rolls.");
105
105
  }
106
106
 
107
- for mut frame in self.frames.iter_mut() {
107
+ for frame in self.frames.iter_mut() {
108
108
  frame.add_roll(pins)
109
109
  }
110
110
 
@@ -0,0 +1,11 @@
1
+ pub fn square_of_sum(n: usize) -> usize {
2
+
3
+ }
4
+
5
+ pub fn sum_of_squares(n: usize) -> usize {
6
+
7
+ }
8
+
9
+ pub fn difference(n: usize) -> usize {
10
+
11
+ }
@@ -10,7 +10,7 @@ impl School {
10
10
  }
11
11
 
12
12
  pub fn add(&mut self, grade: u32, student: &str) {
13
- let mut entry = self.grades.entry(grade).or_insert(Vec::new());
13
+ let entry = self.grades.entry(grade).or_insert(Vec::new());
14
14
  entry.push(student.to_string());
15
15
  entry.sort();
16
16
  }
@@ -0,0 +1,3 @@
1
+ pub fn is_leap_year(year: i32) -> bool {
2
+
3
+ }
@@ -0,0 +1,3 @@
1
+ pub fn build_proverb(list: Vec<&str>) -> String {
2
+
3
+ }
@@ -0,0 +1,3 @@
1
+ pub fn raindrops(n: usize) -> String {
2
+
3
+ }
@@ -0,0 +1,3 @@
1
+ pub fn sum_of_multiples(limit: u32, factors: &[u32]) -> u32 {
2
+
3
+ }
@@ -1,24 +1,30 @@
1
- case class SpaceAge(val seconds: Long) {
2
- lazy val onEarth: Double = round(earthYears)
3
- lazy val onMercury: Double = round(mercuryYears)
4
- lazy val onVenus: Double = round(venusYears)
5
- lazy val onMars: Double = round(marsYears)
6
- lazy val onJupiter: Double = round(jupiterYears)
7
- lazy val onSaturn: Double = round(saturnYears)
8
- lazy val onUranus: Double = round(uranusYears)
9
- lazy val onNeptune: Double = round(neptuneYears)
1
+ object SpaceAge {
2
+ private val daysToEarthAge = 365.25
3
+ private val daysToMercuryAge = 87.969
4
+ private val daysToVenusAge = 224.701
5
+ private val daysToMarsAge = 686.971
6
+ private val daysToJupiterAge = 4332.59
7
+ private val daysToSaturnAge = 10759.22
8
+ private val daysToUranusAge = 30799.095
9
+ private val daysToNeptuneAge = 60190.03
10
10
 
11
- private val minutes = seconds.toDouble / 60
12
- private val hours = minutes / 60
13
- private val days = hours / 24
14
- private val earthYears = days / 365.25
15
- private val mercuryYears = days / 87.969
16
- private val venusYears = days / 224.701
17
- private val marsYears = days / 686.971
18
- private val jupiterYears = days / 4332.59
19
- private val saturnYears = days / 10759.22
20
- private val uranusYears = days / 30799.095
21
- private val neptuneYears = days / 60190.03
11
+ private def toEarthDays(seconds: Double): Double = {
12
+ val minutes = seconds.toDouble / 60
13
+ val hours = minutes / 60
14
+ hours / 24
15
+ }
16
+
17
+ private def toPlanetAge(daysToPlanetAge: Double, seconds: Double): Double =
18
+ round(toEarthDays(seconds) / daysToPlanetAge)
22
19
 
23
20
  private def round(value: Double): Double = (value * 100).round / 100.0
21
+
22
+ def onEarth(seconds: Double): Double = toPlanetAge(daysToEarthAge, seconds)
23
+ def onMercury(seconds: Double): Double = toPlanetAge(daysToMercuryAge, seconds)
24
+ def onVenus(seconds: Double): Double = toPlanetAge(daysToVenusAge, seconds)
25
+ def onMars(seconds: Double): Double = toPlanetAge(daysToMarsAge, seconds)
26
+ def onJupiter(seconds: Double): Double = toPlanetAge(daysToJupiterAge, seconds)
27
+ def onSaturn(seconds: Double): Double = toPlanetAge(daysToSaturnAge, seconds)
28
+ def onUranus(seconds: Double): Double = toPlanetAge(daysToUranusAge, seconds)
29
+ def onNeptune(seconds: Double): Double = toPlanetAge(daysToNeptuneAge, seconds)
24
30
  }
@@ -1,63 +1,44 @@
1
- import org.scalatest._
1
+ import org.scalatest.{Matchers, FunSuite}
2
2
 
3
+ /** @version 1.0.0 */
3
4
  class SpaceAgeTest extends FunSuite with Matchers {
4
- test ("age in seconds") {
5
- val age = SpaceAge(1000000)
6
- age.seconds should be (1000000)
7
- }
8
5
 
9
- test ("age in earth years") {
10
- pending
11
- val age = SpaceAge(1000000000)
12
- age.onEarth should be (31.69)
6
+ test("age on Earth") {
7
+ SpaceAge.onEarth(1000000000) should be (31.69)
13
8
  }
14
9
 
15
- test ("age in mercury years") {
10
+ test("age on Mercury") {
16
11
  pending
17
- val age = SpaceAge(2134835688)
18
- age.onEarth should be (67.65)
19
- age.onMercury should be (280.88)
12
+ SpaceAge.onMercury(2134835688) should be (280.88)
20
13
  }
21
14
 
22
- test ("age in venus years") {
15
+ test("age on Venus") {
23
16
  pending
24
- val age = SpaceAge(189839836)
25
- age.onEarth should be (6.02)
26
- age.onVenus should be (9.78)
17
+ SpaceAge.onVenus(189839836) should be (9.78)
27
18
  }
28
19
 
29
- test ("age on mars") {
20
+ test("age on Mars") {
30
21
  pending
31
- val age = SpaceAge(2329871239L)
32
- age.onEarth should be (73.83)
33
- age.onMars should be (39.25)
22
+ SpaceAge.onMars(2.329871239E9) should be (39.25)
34
23
  }
35
24
 
36
- test ("age on jupiter") {
25
+ test("age on Jupiter") {
37
26
  pending
38
- val age = SpaceAge(901876382)
39
- age.onEarth should be (28.58)
40
- age.onJupiter should be (2.41)
27
+ SpaceAge.onJupiter(901876382) should be (2.41)
41
28
  }
42
29
 
43
- test ("age on saturn") {
30
+ test("age on Saturn") {
44
31
  pending
45
- val age = SpaceAge(3000000000L)
46
- age.onEarth should be (95.06)
47
- age.onSaturn should be (3.23)
32
+ SpaceAge.onSaturn(3.0E9) should be (3.23)
48
33
  }
49
34
 
50
- test ("age on uranus") {
35
+ test("age on Uranus") {
51
36
  pending
52
- val age = SpaceAge(3210123456L)
53
- age.onEarth should be (101.72)
54
- age.onUranus should be (1.21)
37
+ SpaceAge.onUranus(3.210123456E9) should be (1.21)
55
38
  }
56
39
 
57
- test ("age on neptune") {
40
+ test("age on Neptune") {
58
41
  pending
59
- val age = SpaceAge(8210123456L)
60
- age.onEarth should be (260.16)
61
- age.onNeptune should be (1.58)
42
+ SpaceAge.onNeptune(8.210123456E9) should be (1.58)
62
43
  }
63
- }
44
+ }
@@ -1,97 +1,89 @@
1
- import org.scalatest.{FunSuite, Matchers}
1
+ import org.scalatest.{Matchers, FunSuite}
2
2
 
3
+ /** @version 1.0.0 */
3
4
  class SublistTest extends FunSuite with Matchers {
5
+
4
6
  test("empty lists") {
5
7
  Sublist.sublist(List(), List()) should be (Sublist.Equal)
6
8
  }
7
9
 
8
- test("empty is a sublist of anything") {
10
+ test("empty list within non empty list") {
9
11
  pending
10
- Sublist.sublist(List(), List('a', 's', 'd', 'f')) should be (Sublist.Sublist)
12
+ Sublist.sublist(List(), List(1, 2, 3)) should be (Sublist.Sublist)
11
13
  }
12
14
 
13
- test("anything is a superlist of empty") {
15
+ test("non empty list contains empty list") {
14
16
  pending
15
- Sublist.sublist(List('a', 's', 'd', 'f'), List()) should be (Sublist.Superlist)
17
+ Sublist.sublist(List(1, 2, 3), List()) should be (Sublist.Superlist)
16
18
  }
17
19
 
18
- test("List(1) is not List(2)") {
20
+ test("list equals itself") {
19
21
  pending
20
- Sublist.sublist(List(1), List(2)) should be (Sublist.Unequal)
22
+ Sublist.sublist(List(1, 2, 3), List(1, 2, 3)) should be (Sublist.Equal)
21
23
  }
22
24
 
23
- test("compare larger equal lists") {
24
- pending
25
- val xs = List.fill(1000)("x")
26
- Sublist.sublist(xs, xs) should be (Sublist.Equal)
27
- }
28
-
29
- test("sublist at start") {
25
+ test("different lists") {
30
26
  pending
31
- Sublist.sublist(List(1, 2, 3), List(1, 2, 3, 4, 5)) should be (Sublist.Sublist)
27
+ Sublist.sublist(List(1, 2, 3), List(2, 3, 4)) should be (Sublist.Unequal)
32
28
  }
33
29
 
34
- test("sublist in middle") {
30
+ test("false start") {
35
31
  pending
36
- Sublist.sublist(List(4, 3, 2), List(5, 4, 3, 2, 1)) should be (Sublist.Sublist)
32
+ Sublist.sublist(List(1, 2, 5), List(0, 1, 2, 3, 1, 2, 5, 6)) should be (Sublist.Sublist)
37
33
  }
38
34
 
39
- test("sublist at end") {
35
+ test("consecutive") {
40
36
  pending
41
- Sublist.sublist(List(3, 4, 5), List(1, 2, 3, 4, 5)) should be (Sublist.Sublist)
37
+ Sublist.sublist(List(1, 1, 2), List(0, 1, 1, 1, 2, 1, 2)) should be (Sublist.Sublist)
42
38
  }
43
39
 
44
- test("partially matching sublist at start") {
40
+ test("sublist at start") {
45
41
  pending
46
- Sublist.sublist(List(1, 1, 2), List(1, 1, 1, 2)) should be (Sublist.Sublist)
42
+ Sublist.sublist(List(0, 1, 2), List(0, 1, 2, 3, 4, 5)) should be (Sublist.Sublist)
47
43
  }
48
44
 
49
- test("sublist early in huge list") {
45
+ test("sublist in middle") {
50
46
  pending
51
- val xs = List.range(1, 1000000)
52
- Sublist.sublist(List(3, 4, 5), xs) should be (Sublist.Sublist)
47
+ Sublist.sublist(List(2, 3, 4), List(0, 1, 2, 3, 4, 5)) should be (Sublist.Sublist)
53
48
  }
54
49
 
55
- test("huge sublist not in huge list") {
50
+ test("sublist at end") {
56
51
  pending
57
- val l1 = List.range(10, 1000001)
58
- val l2 = List.range(1, 1000000)
59
- Sublist.sublist(l1, l2) should be (Sublist.Unequal)
52
+ Sublist.sublist(List(3, 4, 5), List(0, 1, 2, 3, 4, 5)) should be (Sublist.Sublist)
60
53
  }
61
54
 
62
- test("superlist at start") {
55
+ test("at start of superlist") {
63
56
  pending
64
- Sublist.sublist(List(1, 2, 3, 4, 5), List(1, 2, 3)) should be (Sublist.Superlist)
57
+ Sublist.sublist(List(0, 1, 2, 3, 4, 5), List(0, 1, 2)) should be (Sublist.Superlist)
65
58
  }
66
59
 
67
- test("superlist in middle") {
60
+ test("in middle of superlist") {
68
61
  pending
69
- Sublist.sublist(List(5, 4, 3, 2, 1), List(4, 3, 2)) should be (Sublist.Superlist)
62
+ Sublist.sublist(List(0, 1, 2, 3, 4, 5), List(2, 3)) should be (Sublist.Superlist)
70
63
  }
71
64
 
72
- test("superlist at end") {
65
+ test("at end of superlist") {
73
66
  pending
74
- Sublist.sublist(List(1, 2, 3, 4, 5), List(3, 4, 5)) should be (Sublist.Superlist)
67
+ Sublist.sublist(List(0, 1, 2, 3, 4, 5), List(3, 4, 5)) should be (Sublist.Superlist)
75
68
  }
76
69
 
77
- test("partially matching superlist at start") {
70
+ test("first list missing element from second list") {
78
71
  pending
79
- Sublist.sublist(List(1, 1, 1, 2), List(1, 1, 2)) should be (Sublist.Superlist)
72
+ Sublist.sublist(List(1, 3), List(1, 2, 3)) should be (Sublist.Unequal)
80
73
  }
81
74
 
82
- test("superlist early in huge list") {
75
+ test("second list missing element from first list") {
83
76
  pending
84
- val l1 = List.range(1, 1000000)
85
- Sublist.sublist(l1, List(3, 4, 5)) should be (Sublist.Superlist)
77
+ Sublist.sublist(List(1, 2, 3), List(1, 3)) should be (Sublist.Unequal)
86
78
  }
87
79
 
88
- test("recurring values sublist") {
80
+ test("order matters to a list") {
89
81
  pending
90
- Sublist.sublist(List(1, 2, 1, 2, 3), List(1, 2, 3, 1, 2, 1, 2, 3, 2, 1)) should be (Sublist.Sublist)
82
+ Sublist.sublist(List(1, 2, 3), List(3, 2, 1)) should be (Sublist.Unequal)
91
83
  }
92
84
 
93
- test("recurring values unequal") {
85
+ test("same digits but different numbers") {
94
86
  pending
95
- Sublist.sublist(List(1, 2, 1, 2, 3), List(1, 2, 3, 1, 2, 3, 2, 3, 2, 1)) should be (Sublist.Unequal)
87
+ Sublist.sublist(List(1, 0, 1), List(10, 1)) should be (Sublist.Unequal)
96
88
  }
97
- }
89
+ }
@@ -0,0 +1,39 @@
1
+ import java.io.File
2
+
3
+ import testgen.TestSuiteBuilder._
4
+ import testgen._
5
+
6
+ object SpaceAgeTestGenerator {
7
+ def main(args: Array[String]): Unit = {
8
+ val file = new File("src/main/resources/space-age.json")
9
+
10
+ def toString(expected: CanonicalDataParser.Expected): String = {
11
+ expected match {
12
+ case Left(_) => throw new IllegalStateException()
13
+ case Right(n) => s"$n"
14
+ }
15
+ }
16
+
17
+ def sutArgs(parseResult: CanonicalDataParser.ParseResult, argNames: String*): String =
18
+ argNames map (name => TestSuiteBuilder.toString(parseResult(name))) mkString ", "
19
+
20
+ def functionName(parseResult: CanonicalDataParser.ParseResult): String =
21
+ "on" + parseResult("planet").toString
22
+
23
+ def fromLabeledTest(argNames: String*): ToTestCaseData =
24
+ withLabeledTest { sut =>
25
+ labeledTest =>
26
+ val args = sutArgs(labeledTest.result, argNames: _*)
27
+ val property = labeledTest.property
28
+ val sutCall =
29
+ s"""$sut.${functionName(labeledTest.result)}($args)"""
30
+ val expected = toString(labeledTest.expected)
31
+ TestCaseData(labeledTest.description, sutCall, expected)
32
+ }
33
+
34
+ val code = TestSuiteBuilder.build(file, fromLabeledTest("seconds"))
35
+ println(s"-------------")
36
+ println(code)
37
+ println(s"-------------")
38
+ }
39
+ }
@@ -0,0 +1,38 @@
1
+ import java.io.File
2
+
3
+ import testgen.TestSuiteBuilder._
4
+ import testgen._
5
+
6
+ object SublistTestGenerator {
7
+ def main(args: Array[String]): Unit = {
8
+ val file = new File("src/main/resources/sublist.json")
9
+
10
+ def toString(expected: CanonicalDataParser.Expected): String = {
11
+ expected match {
12
+ case Right("equal") => s"Sublist.Equal"
13
+ case Right("sublist") => s"Sublist.Sublist"
14
+ case Right("superlist") => s"Sublist.Superlist"
15
+ case Right("unequal") => s"Sublist.Unequal"
16
+ case _ => throw new IllegalStateException()
17
+ }
18
+ }
19
+
20
+ def fromLabeledTest(argNames: String*): ToTestCaseData =
21
+ withLabeledTest { sut =>
22
+ labeledTest =>
23
+ val args = sutArgs(labeledTest.result, argNames: _*)
24
+ val property = labeledTest.property
25
+ val sutCall =
26
+ s"$sut.$property($args)"
27
+ val expected = toString(labeledTest.expected)
28
+ TestCaseData(labeledTest.description, sutCall, expected)
29
+ }
30
+
31
+ val code =
32
+ TestSuiteBuilder.build(file, fromLabeledTest("listOne", "listTwo"))
33
+
34
+ println(s"-------------")
35
+ println(code)
36
+ println(s"-------------")
37
+ }
38
+ }
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.20
4
+ version: 2.2.1.21
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Owen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-29 00:00:00.000000000 Z
11
+ date: 2017-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -1871,6 +1871,10 @@ files:
1871
1871
  - tracks/csharp/exercises/collatz-conjecture/CollatzConjectureTest.cs
1872
1872
  - tracks/csharp/exercises/collatz-conjecture/Example.cs
1873
1873
  - tracks/csharp/exercises/collatz-conjecture/README.md
1874
+ - tracks/csharp/exercises/complex-numbers/ComplexNumbers.cs
1875
+ - tracks/csharp/exercises/complex-numbers/ComplexNumbers.csproj
1876
+ - tracks/csharp/exercises/complex-numbers/ComplexNumbersTest.cs
1877
+ - tracks/csharp/exercises/complex-numbers/Example.cs
1874
1878
  - tracks/csharp/exercises/connect/Connect.cs
1875
1879
  - tracks/csharp/exercises/connect/Connect.csproj
1876
1880
  - tracks/csharp/exercises/connect/ConnectTest.cs
@@ -2359,10 +2363,12 @@ files:
2359
2363
  - tracks/csharp/generators/Exercises/BookStore.cs
2360
2364
  - tracks/csharp/generators/Exercises/BracketPush.cs
2361
2365
  - tracks/csharp/generators/Exercises/CollatzConjecture.cs
2366
+ - tracks/csharp/generators/Exercises/ComplexNumbers.cs
2362
2367
  - tracks/csharp/generators/Exercises/ConvertExtensions.cs
2363
2368
  - tracks/csharp/generators/Exercises/CryptoSquare.cs
2364
2369
  - tracks/csharp/generators/Exercises/FoodChain.cs
2365
2370
  - tracks/csharp/generators/Exercises/Gigasecond.cs
2371
+ - tracks/csharp/generators/Exercises/Grains.cs
2366
2372
  - tracks/csharp/generators/Exercises/Hamming.cs
2367
2373
  - tracks/csharp/generators/Exercises/HelloWorld.cs
2368
2374
  - tracks/csharp/generators/Exercises/House.cs
@@ -11126,7 +11132,7 @@ files:
11126
11132
  - tracks/scala/exercises/space-age/README.md
11127
11133
  - tracks/scala/exercises/space-age/build.sbt
11128
11134
  - tracks/scala/exercises/space-age/example.scala
11129
- - tracks/scala/exercises/space-age/src/main/scala/SpaceAge.scala
11135
+ - tracks/scala/exercises/space-age/src/main/scala/.keep
11130
11136
  - tracks/scala/exercises/space-age/src/test/scala/SpaceAgeTest.scala
11131
11137
  - tracks/scala/exercises/spiral-matrix/README.md
11132
11138
  - tracks/scala/exercises/spiral-matrix/build.sbt
@@ -11236,7 +11242,9 @@ files:
11236
11242
  - tracks/scala/testgen/src/main/scala/SecretHandshakeTestGenerator.scala
11237
11243
  - tracks/scala/testgen/src/main/scala/SeriesTestGenerator.scala
11238
11244
  - tracks/scala/testgen/src/main/scala/SieveTestGenerator.scala
11245
+ - tracks/scala/testgen/src/main/scala/SpaceAgeTestGenerator.scala
11239
11246
  - tracks/scala/testgen/src/main/scala/SpiralMatrixTestGenerator.scala
11247
+ - tracks/scala/testgen/src/main/scala/SublistTestGenerator.scala
11240
11248
  - tracks/scala/testgen/src/main/scala/SumOfMultiplesTestGenerator.scala
11241
11249
  - tracks/scala/testgen/src/main/scala/TestBuilder.scala
11242
11250
  - tracks/scala/testgen/src/main/scala/TriangleTestGenerator.scala