trackler 2.1.0.27 → 2.1.0.28

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. checksums.yaml +4 -4
  2. data/common/CONTRIBUTING.md +9 -349
  3. data/common/exercises/forth/canonical-data.json +1 -7
  4. data/lib/trackler/version.rb +1 -1
  5. data/tracks/bash/config.json +5 -0
  6. data/tracks/bash/exercises/anagram/anagram_tests.sh +99 -0
  7. data/tracks/bash/exercises/anagram/example.sh +23 -0
  8. data/tracks/delphi/config.json +8 -1
  9. data/tracks/delphi/exercises/two-fer/twofer.dpr +60 -0
  10. data/tracks/delphi/exercises/two-fer/utwoferExample.pas +17 -0
  11. data/tracks/delphi/exercises/two-fer/utwoferTest.pas +71 -0
  12. data/tracks/dlang/README.md +9 -5
  13. data/tracks/dlang/bin/test-exercise +14 -5
  14. data/tracks/dlang/docs/INSTALLATION.md +24 -0
  15. data/tracks/dlang/docs/TESTS.md +6 -6
  16. data/tracks/dlang/exercises/bob/dub.sdl +2 -0
  17. data/tracks/dlang/exercises/bob/{bob_example.d → example/bob.d} +0 -5
  18. data/tracks/dlang/exercises/bob/{bob.d → source/bob.d} +0 -5
  19. data/tracks/dlang/exercises/circular-buffer/dub.sdl +2 -0
  20. data/tracks/dlang/exercises/circular-buffer/{circular_buffer_example.d → example/circular_buffer.d} +0 -5
  21. data/tracks/dlang/exercises/circular-buffer/{circular_buffer.d → source/circular_buffer.d} +0 -5
  22. data/tracks/dlang/exercises/crypto-square/dub.sdl +2 -0
  23. data/tracks/dlang/exercises/crypto-square/{crypto_square_example.d → example/crypto_square.d} +0 -5
  24. data/tracks/dlang/exercises/crypto-square/{crypto_square.d → source/crypto_square.d} +0 -5
  25. data/tracks/dlang/exercises/difference-of-squares/dub.sdl +2 -0
  26. data/tracks/dlang/exercises/difference-of-squares/{difference_of_squares_example.d → example/difference_of_squares.d} +0 -2
  27. data/tracks/dlang/exercises/difference-of-squares/{difference_of_squares.d → source/difference_of_squares.d} +0 -2
  28. data/tracks/dlang/exercises/etl/dub.sdl +2 -0
  29. data/tracks/dlang/exercises/etl/{etl_example.d → example/etl.d} +0 -5
  30. data/tracks/dlang/exercises/etl/{etl.d → source/etl.d} +0 -5
  31. data/tracks/dlang/exercises/gigasecond/dub.sdl +2 -0
  32. data/tracks/dlang/exercises/gigasecond/{gigasecond_example.d → example/gigasecond.d} +0 -2
  33. data/tracks/dlang/exercises/gigasecond/{gigasecond.d → source/gigasecond.d} +0 -2
  34. data/tracks/dlang/exercises/hamming/dub.sdl +2 -0
  35. data/tracks/dlang/exercises/hamming/{hamming_example.d → example/hamming.d} +0 -5
  36. data/tracks/dlang/exercises/hamming/{hamming.d → source/hamming.d} +0 -5
  37. data/tracks/dlang/exercises/hello-world/dub.sdl +2 -0
  38. data/tracks/dlang/exercises/hello-world/{hello_world_example.d → example/hello_world.d} +0 -2
  39. data/tracks/dlang/exercises/hello-world/{hello_world.d → source/hello_world.d} +0 -0
  40. data/tracks/dlang/exercises/leap/dub.sdl +2 -0
  41. data/tracks/dlang/exercises/leap/{leap_example.d → example/leap.d} +0 -2
  42. data/tracks/dlang/exercises/leap/{leap.d → source/leap.d} +0 -2
  43. data/tracks/dlang/exercises/nucleotide-count/dub.sdl +2 -0
  44. data/tracks/dlang/exercises/nucleotide-count/{nucleotide_count_example.d → example/nucleotide_count.d} +0 -4
  45. data/tracks/dlang/exercises/nucleotide-count/{nucleotide_count.d → source/nucleotide_count.d} +0 -4
  46. data/tracks/dlang/exercises/pangram/dub.sdl +2 -0
  47. data/tracks/dlang/exercises/pangram/{pangram_example.d → example/pangram.d} +0 -2
  48. data/tracks/dlang/exercises/pangram/{pangram.d → source/pangram.d} +0 -2
  49. data/tracks/dlang/exercises/raindrops/dub.sdl +2 -0
  50. data/tracks/dlang/exercises/raindrops/{raindrops_example.d → example/raindrops.d} +0 -2
  51. data/tracks/dlang/exercises/raindrops/{raindrops.d → source/raindrops.d} +0 -2
  52. data/tracks/dlang/exercises/react/dub.sdl +2 -0
  53. data/tracks/dlang/exercises/react/{react_example.d → example/react.d} +0 -2
  54. data/tracks/dlang/exercises/react/{react.d → source/react.d} +0 -2
  55. data/tracks/dlang/exercises/rna-transcription/dub.sdl +2 -0
  56. data/tracks/dlang/exercises/rna-transcription/{rna_transcription_example.d → example/rna_transcription.d} +0 -2
  57. data/tracks/dlang/exercises/rna-transcription/{rna_transcription.d → source/rna_transcription.d} +0 -2
  58. data/tracks/dlang/exercises/robot-name/dub.sdl +2 -0
  59. data/tracks/dlang/exercises/robot-name/{robot_name_example.d → example/robot_name.d} +0 -5
  60. data/tracks/dlang/exercises/robot-name/{robot_name.d → source/robot_name.d} +0 -4
  61. data/tracks/dlang/exercises/roman-numerals/dub.sdl +2 -0
  62. data/tracks/dlang/exercises/roman-numerals/{roman_numerals_example.d → example/roman_numerals.d} +0 -4
  63. data/tracks/dlang/exercises/roman-numerals/{roman_numerals.d → source/roman_numerals.d} +0 -4
  64. data/tracks/dlang/exercises/series/dub.sdl +2 -0
  65. data/tracks/dlang/exercises/series/{series_example.d → example/series.d} +0 -5
  66. data/tracks/dlang/exercises/series/{series.d → source/series.d} +0 -5
  67. data/tracks/dlang/exercises/triangle/dub.sdl +2 -0
  68. data/tracks/dlang/exercises/triangle/{triangle_example.d → example/triangle.d} +0 -5
  69. data/tracks/dlang/exercises/triangle/{triangle.d → source/triangle.d} +0 -5
  70. data/tracks/elisp/.github/stale.yml +0 -0
  71. data/tracks/elisp/exercises/grains/grains-test.el +12 -12
  72. data/tracks/elisp/exercises/robot-name/robot-name-test.el +8 -19
  73. data/tracks/elisp/exercises/word-count/word-count-test.el +27 -27
  74. data/tracks/fortran/Makefile +3 -2
  75. data/tracks/fortran/config.json +21 -2
  76. data/tracks/fortran/exercises/difference-of-squares/difference_of_squares.fun +42 -0
  77. data/tracks/fortran/exercises/difference-of-squares/example.f90 +35 -0
  78. data/tracks/fortran/exercises/{hello_world → hello-world}/example.f90 +0 -0
  79. data/tracks/fortran/exercises/{hello_world → hello-world}/hello_world.fun +0 -0
  80. data/tracks/fortran/exercises/raindrops/example.f90 +26 -0
  81. data/tracks/fortran/exercises/raindrops/raindrops.fun +78 -0
  82. data/tracks/fortran/exercises/rna-transcription/example.f90 +27 -0
  83. data/tracks/fortran/exercises/rna-transcription/rna_transcription.fun +38 -0
  84. data/tracks/go/exercises/acronym/.meta/gen.go +51 -0
  85. data/tracks/go/exercises/acronym/acronym_test.go +1 -15
  86. data/tracks/go/exercises/acronym/cases_test.go +37 -0
  87. data/tracks/go/exercises/acronym/example.go +1 -1
  88. data/tracks/go/exercises/secret-handshake/.meta/gen.go +49 -0
  89. data/tracks/go/exercises/secret-handshake/cases_test.go +24 -0
  90. data/tracks/go/exercises/secret-handshake/example.go +1 -1
  91. data/tracks/go/exercises/secret-handshake/secret_handshake_test.go +1 -17
  92. data/tracks/java/config.json +23 -23
  93. data/tracks/java/exercises/book-store/src/example/java/{Bookstore.java → BookStore.java} +5 -12
  94. data/tracks/java/exercises/book-store/src/test/java/BookStoreTest.java +113 -0
  95. data/tracks/java/exercises/saddle-points/src/example/java/Matrix.java +5 -4
  96. data/tracks/java/exercises/saddle-points/src/example/java/MatrixCoordinate.java +5 -5
  97. data/tracks/java/exercises/saddle-points/src/main/java/MatrixCoordinate.java +5 -5
  98. data/tracks/java/exercises/saddle-points/src/test/java/MatrixTest.java +10 -10
  99. data/tracks/purescript/config.json +7 -0
  100. data/tracks/purescript/exercises/hamming/bower.json +16 -0
  101. data/tracks/purescript/exercises/hamming/examples/src/Hamming.purs +14 -0
  102. data/tracks/purescript/exercises/hamming/test/Main.purs +46 -0
  103. data/tracks/scala/config.json +7 -0
  104. data/tracks/scala/exercises/bob/example.scala +3 -3
  105. data/tracks/scala/exercises/bob/src/main/scala/Bob.scala +2 -2
  106. data/tracks/scala/exercises/bob/src/test/scala/BobTest.scala +83 -53
  107. data/tracks/scala/exercises/book-store/build.sbt +3 -0
  108. data/tracks/scala/exercises/book-store/example.scala +49 -0
  109. data/tracks/scala/exercises/book-store/src/main/scala/.keep +0 -0
  110. data/tracks/scala/exercises/book-store/src/test/scala/BookStoreTest.scala +70 -0
  111. data/tracks/scala/exercises/difference-of-squares/example.scala +3 -3
  112. data/tracks/scala/exercises/difference-of-squares/src/main/scala/DifferenceOfSquares.scala +8 -0
  113. data/tracks/scala/exercises/difference-of-squares/src/test/scala/DifferenceOfSquaresTest.scala +49 -0
  114. data/tracks/scala/exercises/leap/example.scala +4 -3
  115. data/tracks/scala/exercises/leap/src/main/scala/Leap.scala +2 -2
  116. data/tracks/scala/exercises/leap/src/test/scala/LeapTest.scala +12 -20
  117. data/tracks/scala/exercises/raindrops/src/test/scala/RaindropsTest.scala +46 -35
  118. data/tracks/scala/testgen/src/main/scala/BobTestGenerator.scala +15 -0
  119. data/tracks/scala/testgen/src/main/scala/BookStoreTestGenerator.scala +15 -0
  120. data/tracks/scala/testgen/src/main/scala/DifferenceOfSquaresTestGenerator.scala +17 -0
  121. data/tracks/scala/testgen/src/main/scala/LeapTestGenerator.scala +15 -0
  122. data/tracks/scala/testgen/src/main/scala/RaindropsTestGenerator.scala +15 -0
  123. data/tracks/vimscript/config.json +5 -0
  124. data/tracks/vimscript/exercises/triangle/example.vim +28 -0
  125. data/tracks/vimscript/exercises/triangle/triangle.vader +92 -0
  126. data/tracks/vimscript/exercises/triangle/triangle.vim +24 -0
  127. metadata +93 -44
  128. data/tracks/java/exercises/book-store/src/test/java/BookstoreTest.java +0 -119
  129. data/tracks/scala/exercises/difference-of-squares/src/main/scala/Squares.scala +0 -8
  130. data/tracks/scala/exercises/difference-of-squares/src/test/scala/SquaresTest.scala +0 -56
@@ -19,8 +19,3 @@ static if (allTestsEnabled)
19
19
  }
20
20
 
21
21
  }
22
-
23
- void main ()
24
- {
25
- }
26
-
@@ -0,0 +1,2 @@
1
+ name "hello-world"
2
+ buildRequirements "disallowDeprecations"
@@ -12,5 +12,3 @@ unittest {
12
12
  assert(hello("Bob") == "Hello, Bob!");
13
13
  assert(hello("") == "Hello, !");
14
14
  }
15
-
16
- void main () {}
@@ -0,0 +1,2 @@
1
+ name "leap"
2
+ buildRequirements "disallowDeprecations"
@@ -11,5 +11,3 @@ unittest {
11
11
  assert(!is_leap(2100));
12
12
  assert(is_leap(2000));
13
13
  }
14
-
15
- void main() {}
@@ -4,5 +4,3 @@ unittest {
4
4
  assert(!is_leap(2100));
5
5
  assert(is_leap(2000));
6
6
  }
7
-
8
- void main() {}
@@ -0,0 +1,2 @@
1
+ name "nucleotide-count"
2
+ buildRequirements "disallowDeprecations"
@@ -145,7 +145,3 @@ bool aaEqual (const ulong[char] lhs, const ulong[char] rhs)
145
145
  }
146
146
 
147
147
  }
148
-
149
- void main ()
150
- {
151
- }
@@ -0,0 +1,2 @@
1
+ name "pangram"
2
+ buildRequirements "disallowDeprecations"
@@ -34,5 +34,3 @@ unittest
34
34
  // pangram with non-ascii characters
35
35
  assert(isPangram("Victor jagt zwölf Boxkämpfer quer über den großen Sylter Deich"));
36
36
  }
37
-
38
- void main() {}
@@ -23,5 +23,3 @@ unittest
23
23
  assert(isPangram("Victor jagt zwölf Boxkämpfer quer über den großen Sylter Deich"));
24
24
  }
25
25
  }
26
-
27
- void main () {}
@@ -0,0 +1,2 @@
1
+ name "raindrops"
2
+ buildRequirements "disallowDeprecations"
@@ -51,5 +51,3 @@ unittest {
51
51
  assert(convert(52) == "52");
52
52
  assert(convert(105) == "PlingPlangPlong");
53
53
  }
54
-
55
- void main () {}
@@ -20,5 +20,3 @@ static if (allTestsEnabled) {
20
20
  }
21
21
 
22
22
  }
23
-
24
- void main() {}
@@ -0,0 +1,2 @@
1
+ name "react"
2
+ buildRequirements "disallowDeprecations"
@@ -207,5 +207,3 @@ static if (allTestsEnabled) {
207
207
  }
208
208
 
209
209
  }
210
-
211
- void main() {}
@@ -0,0 +1,2 @@
1
+ name "rna-transcription"
2
+ buildRequirements "disallowDeprecations"
@@ -33,5 +33,3 @@ unittest {
33
33
  assertThrown(dnaComplement("XXX"));
34
34
  assertThrown(dnaComplement("ACGTXXXCTTAA"));
35
35
  }
36
-
37
- void main () {}
@@ -19,5 +19,3 @@ static if (allTestsEnabled) {
19
19
  }
20
20
 
21
21
  }
22
-
23
- void main() {}
@@ -0,0 +1,2 @@
1
+ name "robot-name"
2
+ buildRequirements "disallowDeprecations"
@@ -74,7 +74,3 @@ static if (allTestsEnabled)
74
74
  }
75
75
 
76
76
  }
77
-
78
- void main ()
79
- {
80
- }
@@ -0,0 +1,2 @@
1
+ name "roman-numerals"
2
+ buildRequirements "disallowDeprecations"
@@ -0,0 +1,2 @@
1
+ name "series"
2
+ buildRequirements "disallowDeprecations"
@@ -109,8 +109,3 @@ static if (allTestsEnabled)
109
109
  }
110
110
 
111
111
  }
112
-
113
- void main ()
114
- {
115
- }
116
-
@@ -0,0 +1,2 @@
1
+ name "triangle"
2
+ buildRequirements "disallowDeprecations"
@@ -84,8 +84,3 @@ static if (allTestsEnabled)
84
84
  }
85
85
 
86
86
  }
87
-
88
- void main ()
89
- {
90
- }
91
-
File without changes
@@ -7,32 +7,32 @@
7
7
  (load-file "grains.el")
8
8
 
9
9
  (ert-deftest square-1 ()
10
- (should (equal 1 (square 1))))
10
+ (should (= 1 (square 1))))
11
11
 
12
12
  (ert-deftest square-2 ()
13
- (should (equal 2 (square 2))))
13
+ (should (= 2 (square 2))))
14
14
 
15
15
  (ert-deftest square-3 ()
16
- (should (equal 4 (square 3))))
16
+ (should (= 4 (square 3))))
17
17
 
18
18
  (ert-deftest square-4 ()
19
- (should (equal 8 (square 4))))
19
+ (should (= 8 (square 4))))
20
20
 
21
21
  (ert-deftest square-16 ()
22
- (should (equal 32768
23
- (square 16))))
22
+ (should (= 32768
23
+ (square 16))))
24
24
 
25
25
  (ert-deftest square-32 ()
26
- (should (equal 2147483648
27
- (square 32))))
26
+ (should (= 2147483648
27
+ (square 32))))
28
28
 
29
29
  (ert-deftest square-64 ()
30
- (should (equal 9223372036854775808
31
- (square 64))))
30
+ (should (= 9223372036854775808
31
+ (square 64))))
32
32
 
33
33
  (ert-deftest total-grains ()
34
- (should (equal 18446744073709551615
35
- (total))))
34
+ (should (= 18446744073709551615
35
+ (total))))
36
36
 
37
37
  (provide 'grains-test.el)
38
38
  ;;; grains-test.el ends here.
@@ -6,33 +6,22 @@
6
6
 
7
7
  ;;; Code:
8
8
 
9
- (require 'cl)
9
+ (require 'rx)
10
10
 
11
11
  (load-file "robot-name.el")
12
12
 
13
- (defun is-upper-alpha-p (c)
14
- "Test if char C is an uppercase alpha char."
15
- (let ((c (string-to-char c))
16
- (A (string-to-char "A"))
17
- (Z (string-to-char "Z")))
18
- (<= A c Z)))
19
-
20
- (defun is-digit-p (d)
21
- "Test if D is an integer from 0-9."
22
- (when (string-match "[[:digit:]]" d)
23
- (let ((d (string-to-char d)))
24
- (<= ?0 d ?9))))
25
-
26
13
  (defvar *robbie* (build-robot))
27
14
  (defvar *clutz* (build-robot))
28
15
 
16
+ (defvar robot-name-re
17
+ (rx string-start
18
+ (= 2 upper-case)
19
+ (= 3 digit)
20
+ string-end))
21
+
29
22
  (ert-deftest name-matches-expected-pattern ()
30
23
  (let ((name (robot-name *robbie*)))
31
- (should (= (length name) 5))
32
- (should (every 'is-upper-alpha-p
33
- (split-string-and-unquote (substring name 0 2) "")))
34
- (should (every 'is-digit-p
35
- (split-string-and-unquote (substring name 2 5) "")))))
24
+ (should (string-match-p robot-name-re name))))
36
25
 
37
26
  (ert-deftest name-is-persistent ()
38
27
  "Test that robot name is persistent."
@@ -13,51 +13,51 @@
13
13
 
14
14
 
15
15
  (ert-deftest no-words-test ()
16
- (should (equal (word-count "")
17
- nil)))
16
+ (should (equal-assoc (word-count "")
17
+ nil)))
18
18
 
19
19
 
20
20
  (ert-deftest count-one-word-test ()
21
- (should (equal (word-count "word")
22
- '(("word" . 1)))))
21
+ (should (equal-assoc (word-count "word")
22
+ '(("word" . 1)))))
23
23
 
24
24
 
25
25
  (ert-deftest count-one-of-each-word-test ()
26
- (should (equal (word-count "one of each")
27
- '(("each" . 1)
28
- ("of" . 1)
29
- ("one" . 1)))))
26
+ (should (equal-assoc (word-count "one of each")
27
+ '(("each" . 1)
28
+ ("of" . 1)
29
+ ("one" . 1)))))
30
30
 
31
31
 
32
32
  (ert-deftest multiple-occurrences-of-a-word-test ()
33
- (should (equal (word-count "one fish two fish red fish blue fish")
34
- '(("blue" . 1)
35
- ("red" . 1)
36
- ("two" . 1)
37
- ("fish" . 4)
38
- ("one" . 1)))))
33
+ (should (equal-assoc (word-count "one fish two fish red fish blue fish")
34
+ '(("blue" . 1)
35
+ ("red" . 1)
36
+ ("two" . 1)
37
+ ("fish" . 4)
38
+ ("one" . 1)))))
39
39
 
40
40
 
41
41
  (ert-deftest ignore-punctuation-test ()
42
- (should (equal (word-count "car : carpet as java : javascript!!&@$%^&")
43
- '(("javascript" . 1)
44
- ("java" . 1)
45
- ("as" . 1)
46
- ("carpet" . 1)
47
- ("car" . 1)))))
42
+ (should (equal-assoc (word-count "car : carpet as java : javascript!!&@$%^&")
43
+ '(("javascript" . 1)
44
+ ("java" . 1)
45
+ ("as" . 1)
46
+ ("carpet" . 1)
47
+ ("car" . 1)))))
48
48
 
49
49
 
50
50
  (ert-deftest include-numbers-test ()
51
- (should (equal (word-count "testing, 1, 2 testing")
52
- '(("2" . 1)
53
- ("1" . 1)
54
- ("testing" . 2)))))
51
+ (should (equal-assoc (word-count "testing, 1, 2 testing")
52
+ '(("2" . 1)
53
+ ("1" . 1)
54
+ ("testing" . 2)))))
55
55
 
56
56
 
57
57
  (ert-deftest normalize-case-test ()
58
- (should (equal (word-count "go Go GO Stop stop")
59
- '(("stop" . 2)
60
- ("go" . 3)))))
58
+ (should (equal-assoc (word-count "go Go GO Stop stop")
59
+ '(("stop" . 2)
60
+ ("go" . 3)))))
61
61
 
62
62
 
63
63
  (provide 'word-count)
@@ -11,7 +11,8 @@ OUTDIR := $(shell mktemp -d "$(TMPDIR)/$(ASSIGNMENT).XXXXXXXXXX")
11
11
  FILEEXT := "f90"
12
12
  TESTEXT := "fun"
13
13
  EXAMPLE := "example.$(FILEEXT)"
14
- TSTFILE := "$(ASSIGNMENT).$(TESTEXT)"
14
+ TESTNAME := $(shell echo $(ASSIGNMENT) | sed -e "s/-/_/g")
15
+ TSTFILE := "$(TESTNAME).$(TESTEXT)"
15
16
 
16
17
  # compiler flags
17
18
  export FSFLAG := "-I"
@@ -31,7 +32,7 @@ install-test: ## install test dependency: funit
31
32
  test-assignment: ## run single test using ASSIGNMENTS: test-assignment ASSIGNMENT=wordy
32
33
  @echo "running tests for: $(ASSIGNMENT)"
33
34
  @cat ./exercises/$(ASSIGNMENT)/$(TSTFILE) | sed 's/Xtest/test/' > $(OUTDIR)/$(TSTFILE)
34
- @cp ./exercises/$(ASSIGNMENT)/$(EXAMPLE) $(OUTDIR)/$(ASSIGNMENT).$(FILEEXT)
35
+ @cp ./exercises/$(ASSIGNMENT)/$(EXAMPLE) $(OUTDIR)/$(TESTNAME).$(FILEEXT)
35
36
  @cd $(OUTDIR) && funit
36
37
 
37
38
  test: ## run all tests
@@ -3,10 +3,11 @@
3
3
  "language": "Fortran",
4
4
  "repository": "https://github.com/exercism/xfortran",
5
5
  "active": false,
6
- "test_pattern": "TODO",
6
+ "test_pattern": ".*\\.fun",
7
+ "solution_pattern": "example.f90",
7
8
  "exercises": [
8
9
  {
9
- "slug": "hello_world",
10
+ "slug": "hello-world",
10
11
  "difficulty": 1,
11
12
  "topics": [
12
13
  ]
@@ -22,6 +23,24 @@
22
23
  "difficulty": 1,
23
24
  "topics": [
24
25
  ]
26
+ },
27
+ {
28
+ "slug": "rna-transcription",
29
+ "difficulty": 1,
30
+ "topics": [
31
+ ]
32
+ },
33
+ {
34
+ "slug": "raindrops",
35
+ "difficulty": 1,
36
+ "topics": [
37
+ ]
38
+ },
39
+ {
40
+ "slug": "difference-of-squares",
41
+ "difficulty": 1,
42
+ "topics": [
43
+ ]
25
44
  }
26
45
  ],
27
46
  "deprecated": [