trackler 2.1.0.21 → 2.1.0.22

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 (196) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/delphi/exercises/allergies/uAllergiesExample.pas +10 -3
  4. data/tracks/ocaml/.travis-ci.sh +3 -1
  5. data/tracks/ocaml/exercises/acronym/Makefile +1 -1
  6. data/tracks/ocaml/exercises/acronym/example.ml +1 -1
  7. data/tracks/ocaml/exercises/acronym/test.ml +2 -4
  8. data/tracks/ocaml/exercises/all-your-base/example.ml +1 -1
  9. data/tracks/ocaml/exercises/all-your-base/test.ml +1 -1
  10. data/tracks/ocaml/exercises/anagram/example.ml +1 -1
  11. data/tracks/ocaml/exercises/anagram/test.ml +1 -1
  12. data/tracks/ocaml/exercises/atbash-cipher/example.ml +1 -1
  13. data/tracks/ocaml/exercises/atbash-cipher/test.ml +1 -1
  14. data/tracks/ocaml/exercises/beer-song/example.ml +1 -1
  15. data/tracks/ocaml/exercises/beer-song/test.ml +1 -1
  16. data/tracks/ocaml/exercises/binary-search/Makefile +1 -1
  17. data/tracks/ocaml/exercises/binary-search/example.ml +5 -5
  18. data/tracks/ocaml/exercises/binary-search/test.ml +1 -1
  19. data/tracks/ocaml/exercises/bob/example.ml +1 -1
  20. data/tracks/ocaml/exercises/bob/test.ml +1 -1
  21. data/tracks/ocaml/exercises/bowling/bowling.mli +1 -1
  22. data/tracks/ocaml/exercises/bowling/example.ml +1 -1
  23. data/tracks/ocaml/exercises/bowling/test.ml +1 -1
  24. data/tracks/ocaml/exercises/bracket-push/example.ml +1 -1
  25. data/tracks/ocaml/exercises/bracket-push/test.ml +1 -1
  26. data/tracks/ocaml/exercises/change/example.ml +1 -1
  27. data/tracks/ocaml/exercises/change/test.ml +1 -1
  28. data/tracks/ocaml/exercises/connect/example.ml +1 -1
  29. data/tracks/ocaml/exercises/connect/test.ml +1 -1
  30. data/tracks/ocaml/exercises/difference-of-squares/example.ml +1 -1
  31. data/tracks/ocaml/exercises/difference-of-squares/test.ml +1 -1
  32. data/tracks/ocaml/exercises/dominoes/example.ml +1 -1
  33. data/tracks/ocaml/exercises/dominoes/test.ml +1 -1
  34. data/tracks/ocaml/exercises/etl/example.ml +1 -1
  35. data/tracks/ocaml/exercises/etl/test.ml +1 -1
  36. data/tracks/ocaml/exercises/grade-school/example.ml +1 -1
  37. data/tracks/ocaml/exercises/grade-school/grade_school.mli +1 -1
  38. data/tracks/ocaml/exercises/grade-school/test.ml +1 -1
  39. data/tracks/ocaml/exercises/hamming/example.ml +1 -1
  40. data/tracks/ocaml/exercises/hamming/test.ml +1 -1
  41. data/tracks/ocaml/exercises/hangman/example.ml +1 -1
  42. data/tracks/ocaml/exercises/hello-world/test.ml +1 -1
  43. data/tracks/ocaml/exercises/hexadecimal/example.ml +1 -1
  44. data/tracks/ocaml/exercises/hexadecimal/test.ml +1 -1
  45. data/tracks/ocaml/exercises/leap/test.ml +1 -1
  46. data/tracks/ocaml/exercises/list-ops/test.ml +1 -1
  47. data/tracks/ocaml/exercises/luhn/example.ml +1 -1
  48. data/tracks/ocaml/exercises/luhn/test.ml +1 -1
  49. data/tracks/ocaml/exercises/meetup/example.ml +1 -1
  50. data/tracks/ocaml/exercises/meetup/test.ml +1 -1
  51. data/tracks/ocaml/exercises/minesweeper/example.ml +1 -1
  52. data/tracks/ocaml/exercises/minesweeper/test.ml +1 -1
  53. data/tracks/ocaml/exercises/nucleotide-count/example.ml +1 -1
  54. data/tracks/ocaml/exercises/nucleotide-count/nucleotide_count.mli +1 -1
  55. data/tracks/ocaml/exercises/nucleotide-count/test.ml +1 -1
  56. data/tracks/ocaml/exercises/pangram/example.ml +1 -1
  57. data/tracks/ocaml/exercises/pangram/test.ml +1 -1
  58. data/tracks/ocaml/exercises/phone-number/example.ml +1 -1
  59. data/tracks/ocaml/exercises/phone-number/test.ml +1 -1
  60. data/tracks/ocaml/exercises/prime-factors/example.ml +1 -1
  61. data/tracks/ocaml/exercises/prime-factors/test.ml +1 -1
  62. data/tracks/ocaml/exercises/raindrops/example.ml +1 -1
  63. data/tracks/ocaml/exercises/raindrops/test.ml +1 -1
  64. data/tracks/ocaml/exercises/rna-transcription/example.ml +1 -1
  65. data/tracks/ocaml/exercises/rna-transcription/test.ml +1 -1
  66. data/tracks/ocaml/exercises/robot-name/example.ml +1 -1
  67. data/tracks/ocaml/exercises/robot-name/test.ml +1 -1
  68. data/tracks/ocaml/exercises/roman-numerals/test.ml +1 -1
  69. data/tracks/ocaml/exercises/run-length-encoding/example.ml +1 -1
  70. data/tracks/ocaml/exercises/run-length-encoding/test.ml +1 -1
  71. data/tracks/ocaml/exercises/say/example.ml +1 -1
  72. data/tracks/ocaml/exercises/say/test.ml +1 -1
  73. data/tracks/ocaml/exercises/space-age/example.ml +1 -1
  74. data/tracks/ocaml/exercises/space-age/test.ml +1 -1
  75. data/tracks/ocaml/exercises/triangle/example.ml +1 -1
  76. data/tracks/ocaml/exercises/triangle/test.ml +1 -1
  77. data/tracks/ocaml/exercises/word-count/example.ml +1 -1
  78. data/tracks/ocaml/exercises/word-count/test.ml +1 -1
  79. data/tracks/ocaml/exercises/word-count/word_count.mli +1 -3
  80. data/tracks/ocaml/exercises/zipper/example.ml +1 -1
  81. data/tracks/ocaml/exercises/zipper/test.ml +1 -1
  82. data/tracks/ocaml/exercises/zipper/tree.ml +1 -1
  83. data/tracks/ocaml/exercises/zipper/tree.mli +1 -1
  84. data/tracks/ocaml/exercises/zipper/zipper.mli +1 -1
  85. data/tracks/ocaml/tools/test-generator/src/canonical_data_checker.ml +1 -1
  86. data/tracks/ocaml/tools/test-generator/src/codegen.ml +1 -1
  87. data/tracks/ocaml/tools/test-generator/src/controller.ml +1 -1
  88. data/tracks/ocaml/tools/test-generator/src/debug.ml +1 -1
  89. data/tracks/ocaml/tools/test-generator/src/files.ml +1 -1
  90. data/tracks/ocaml/tools/test-generator/src/model.ml +1 -1
  91. data/tracks/ocaml/tools/test-generator/src/parser.ml +5 -5
  92. data/tracks/ocaml/tools/test-generator/src/special_cases.ml +1 -1
  93. data/tracks/ocaml/tools/test-generator/src/template.ml +1 -1
  94. data/tracks/ocaml/tools/test-generator/src/test_gen.ml +1 -1
  95. data/tracks/ocaml/tools/test-generator/src/utils.ml +2 -2
  96. data/tracks/ocaml/tools/test-generator/templates/acronym/template.ml +1 -1
  97. data/tracks/ocaml/tools/test-generator/templates/all-your-base/template.ml +1 -1
  98. data/tracks/ocaml/tools/test-generator/templates/anagram/template.ml +1 -1
  99. data/tracks/ocaml/tools/test-generator/templates/atbash-cipher/template.ml +1 -1
  100. data/tracks/ocaml/tools/test-generator/templates/beer-song/template.ml +1 -1
  101. data/tracks/ocaml/tools/test-generator/templates/binary-search/template.ml +1 -1
  102. data/tracks/ocaml/tools/test-generator/templates/bob/template.ml +1 -1
  103. data/tracks/ocaml/tools/test-generator/templates/bowling/template.ml +1 -1
  104. data/tracks/ocaml/tools/test-generator/templates/bracket-push/template.ml +1 -1
  105. data/tracks/ocaml/tools/test-generator/templates/change/template.ml +1 -1
  106. data/tracks/ocaml/tools/test-generator/templates/connect/template.ml +1 -1
  107. data/tracks/ocaml/tools/test-generator/templates/difference-of-squares/template.ml +1 -1
  108. data/tracks/ocaml/tools/test-generator/templates/dominoes/template.ml +1 -1
  109. data/tracks/ocaml/tools/test-generator/templates/etl/template.ml +1 -1
  110. data/tracks/ocaml/tools/test-generator/templates/hamming/template.ml +1 -1
  111. data/tracks/ocaml/tools/test-generator/templates/hello-world/template.ml +1 -1
  112. data/tracks/ocaml/tools/test-generator/templates/leap/template.ml +1 -1
  113. data/tracks/ocaml/tools/test-generator/templates/luhn/template.ml +1 -1
  114. data/tracks/ocaml/tools/test-generator/templates/minesweeper/template.ml +1 -1
  115. data/tracks/ocaml/tools/test-generator/templates/pangram/template.ml +1 -1
  116. data/tracks/ocaml/tools/test-generator/templates/phone-number/template.ml +1 -1
  117. data/tracks/ocaml/tools/test-generator/templates/prime-factors/template.ml +1 -1
  118. data/tracks/ocaml/tools/test-generator/templates/raindrops/template.ml +1 -1
  119. data/tracks/ocaml/tools/test-generator/templates/roman-numerals/template.ml +1 -1
  120. data/tracks/ocaml/tools/test-generator/templates/run-length-encoding/template.ml +1 -1
  121. data/tracks/ocaml/tools/test-generator/templates/say/template.ml +1 -1
  122. data/tracks/ocaml/tools/test-generator/templates/space-age/template.ml +1 -1
  123. data/tracks/ocaml/tools/test-generator/templates/triangle/template.ml +1 -1
  124. data/tracks/ocaml/tools/test-generator/templates/word-count/template.ml +1 -1
  125. data/tracks/ocaml/tools/test-generator/test/all_tests.ml +1 -1
  126. data/tracks/ocaml/tools/test-generator/test/codegen_test.ml +1 -1
  127. data/tracks/ocaml/tools/test-generator/test/model_test.ml +1 -1
  128. data/tracks/ocaml/tools/test-generator/test/parser_test.ml +1 -1
  129. data/tracks/ocaml/tools/test-generator/test/special_cases_test.ml +1 -1
  130. data/tracks/ocaml/tools/test-generator/test/template_test.ml +1 -1
  131. data/tracks/ocaml/tools/test-generator/test/utils_test.ml +1 -1
  132. data/tracks/r/.travis.yml +13 -2
  133. data/tracks/r/README.md +35 -16
  134. data/tracks/r/bin/run_lints.R +30 -0
  135. data/tracks/r/bin/run_tests.R +35 -0
  136. data/tracks/r/exercises/anagram/anagram.R +1 -1
  137. data/tracks/r/exercises/anagram/example.R +5 -5
  138. data/tracks/r/exercises/anagram/test_anagram.R +1 -15
  139. data/tracks/r/exercises/bob/bob.R +1 -1
  140. data/tracks/r/exercises/bob/example.R +2 -2
  141. data/tracks/r/exercises/bob/test_bob.R +1 -13
  142. data/tracks/r/exercises/difference-of-squares/example.R +5 -5
  143. data/tracks/r/exercises/difference-of-squares/test_difference-of-squares.R +2 -0
  144. data/tracks/r/exercises/grains/example.R +6 -6
  145. data/tracks/r/exercises/grains/grains.R +2 -2
  146. data/tracks/r/exercises/grains/test_grains.R +1 -2
  147. data/tracks/r/exercises/hamming/example.R +3 -3
  148. data/tracks/r/exercises/hamming/hamming.R +1 -1
  149. data/tracks/r/exercises/hamming/test_hamming.R +1 -1
  150. data/tracks/r/exercises/hello-world/example.R +1 -1
  151. data/tracks/r/exercises/hello-world/test_hello-world.R +1 -1
  152. data/tracks/r/exercises/isogram/example.R +4 -4
  153. data/tracks/r/exercises/isogram/isogram.R +1 -1
  154. data/tracks/r/exercises/isogram/test_isogram.R +1 -1
  155. data/tracks/r/exercises/largest-series-product/example.R +11 -11
  156. data/tracks/r/exercises/largest-series-product/largest-series-product.R +2 -2
  157. data/tracks/r/exercises/largest-series-product/test_largest-series-product.R +16 -16
  158. data/tracks/r/exercises/leap/leap.R +1 -1
  159. data/tracks/r/exercises/leap/test_leap.R +1 -1
  160. data/tracks/r/exercises/luhn/example.R +16 -10
  161. data/tracks/r/exercises/luhn/test_luhn.R +1 -1
  162. data/tracks/r/exercises/pascals-triangle/example.R +10 -10
  163. data/tracks/r/exercises/pascals-triangle/pascals-triangle.R +2 -2
  164. data/tracks/r/exercises/pascals-triangle/test_pascals-triangle.R +8 -8
  165. data/tracks/r/exercises/perfect-numbers/example.R +3 -3
  166. data/tracks/r/exercises/perfect-numbers/perfect-numbers.R +1 -1
  167. data/tracks/r/exercises/perfect-numbers/test_perfect-numbers.R +12 -12
  168. data/tracks/r/exercises/phone-number/example.R +8 -8
  169. data/tracks/r/exercises/phone-number/phone-number.R +1 -1
  170. data/tracks/r/exercises/phone-number/test_phone-number.R +11 -11
  171. data/tracks/r/exercises/prime-factors/example.R +2 -2
  172. data/tracks/r/exercises/prime-factors/prime-factors.R +1 -1
  173. data/tracks/r/exercises/prime-factors/test_prime-factors.R +1 -1
  174. data/tracks/r/exercises/raindrops/example.R +12 -11
  175. data/tracks/r/exercises/raindrops/test_raindrops.R +3 -2
  176. data/tracks/r/exercises/rna-transcription/example.R +3 -3
  177. data/tracks/r/exercises/rna-transcription/test_rna-transcription.R +1 -1
  178. data/tracks/r/exercises/rotational-cipher/example.R +7 -7
  179. data/tracks/r/exercises/rotational-cipher/test_rotational-cipher.R +3 -2
  180. data/tracks/r/exercises/scrabble-score/example.R +5 -4
  181. data/tracks/r/exercises/scrabble-score/scrabble-score.R +1 -1
  182. data/tracks/r/exercises/scrabble-score/test_scrabble-score.R +12 -12
  183. data/tracks/r/exercises/secret-handshake/example.R +6 -6
  184. data/tracks/r/exercises/secret-handshake/test_secret-handshake.R +5 -3
  185. data/tracks/r/exercises/sieve/test_sieve.R +1 -1
  186. data/tracks/r/exercises/space-age/example.R +8 -3
  187. data/tracks/r/exercises/space-age/space-age.R +1 -1
  188. data/tracks/r/exercises/space-age/test_space-age.R +1 -1
  189. data/tracks/r/exercises/sum-of-multiples/test_sum-of-multiples.R +1 -1
  190. data/tracks/r/exercises/tournament/example.R +14 -8
  191. data/tracks/r/exercises/tournament/test_tournament.R +1 -1
  192. data/tracks/r/exercises/word-count/example.R +9 -2
  193. data/tracks/r/exercises/word-count/test_word-count.R +1 -1
  194. data/tracks/r/exercises/word-count/word-count.R +1 -1
  195. data/tracks/vimscript/README.md +14 -9
  196. metadata +4 -2
@@ -1,6 +1,6 @@
1
- open Core.Std
2
1
  open OUnit2
3
2
  open Binary_search
3
+ open Core
4
4
 
5
5
  let option_to_string f = function
6
6
  | None -> "None"
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Bob
4
4
 
@@ -1,4 +1,4 @@
1
- open! Core.Std
1
+ open! Core
2
2
  open OUnit2
3
3
  open Bowling
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Bracket_push
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Change
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Connect
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Difference_of_squares
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Dominoes
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Etl
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
 
4
4
  let printer n =
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Hello_world
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Leap
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Luhn
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Minesweeper
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Pangram
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Phone_number
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Prime_factors
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Raindrops
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Roman_numerals
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Run_length_encoding
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Say
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Space_age
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Triangle
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Word_count
4
4
 
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Codegen_test
4
4
  open Model_test
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Codegen
4
4
  open Model
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Codegen
4
4
  open Model
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Parser
4
4
  open Model
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Model
4
4
  open Codegen
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Codegen
4
4
  open Template
@@ -1,4 +1,4 @@
1
- open Core.Std
1
+ open Core
2
2
  open OUnit2
3
3
  open Codegen
4
4
  open Utils
data/tracks/r/.travis.yml CHANGED
@@ -1,6 +1,17 @@
1
1
  ---
2
- language: bash
2
+ language: R
3
+ cache: packages
4
+ r:
5
+ - oldrel
6
+ - release
7
+ - devel
8
+ install:
9
+ - R -e "install.packages('testthat')"
10
+ - R -e "install.packages('jsonlite')"
11
+ - R -e "install.packages('lintr')"
12
+ - R -e "install.packages('magrittr')"
3
13
  script:
4
14
  - bin/fetch-configlet
5
15
  - bin/configlet .
6
- sudo: false
16
+ - R -e "source('bin/run_tests.R')"
17
+ - R -e "source('bin/run_lints.R')"
data/tracks/r/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # xR
2
2
 
3
+ [![Build Status](https://travis-ci.org/exercism/xr.svg?branch=master)](https://travis-ci.org/exercism/xr)
4
+ [![Gitter](https://badges.gitter.im/exercism/dev.svg)](https://gitter.im/exercism/dev?utm_source=share-link&utm_medium=link&utm_campaign=share-link)
5
+
3
6
  Exercism problems in R
4
7
 
5
8
  ## Contributing Guide
@@ -52,8 +55,19 @@ A general description of all the files and directories can be found [here](https
52
55
 
53
56
  #### Directory structure
54
57
  ```bash
58
+ ├── .gitignore
59
+ ├── .travis.yml
60
+ ├── .github
61
+ │ └── stale.yml
62
+ ├── config.json
63
+ ├── README.md
64
+ └── LICENSE
65
+ ├── img
66
+ │ └── icon.png
55
67
  ├── bin
56
- └── fetch‐configlet
68
+ ├── fetch‐configlet
69
+ │ ├── run_lints.R
70
+ │ └── run_tests.R
57
71
  ├── docs
58
72
  │ ├── ABOUT.md
59
73
  │ ├── INSTALLATION.md
@@ -62,31 +76,24 @@ A general description of all the files and directories can be found [here](https
62
76
  │ └── TESTS.md
63
77
  └── exercises
64
78
  ├── TRACK_HINTS.md
65
- └── <exercise-name>
79
+ ├── <exercise-name>
66
80
  │ ├── <exercise-name>.R
67
- └── example.R
81
+ ├── example.R
68
82
  │ └── test_<exercise-name>.R
69
- └── <exercise-name>
83
+ ├── <exercise-name>
70
84
  │ ├── <exercise-name>.R
71
- └── example.R
85
+ ├── example.R
72
86
  │ └── test_<exercise-name>.R
73
87
  └── ...
74
- └── img
75
- └── icon.png
76
- ├── .gitignore
77
- ├── .travis.yml
78
- ├── LICENSE
79
- ├── README.md
80
- └── config.json
81
88
  ```
82
89
  - `config.json`: Note that every exercise has to be registered here, with a unique name and a difficulty. The sequence order in this file determines the default order in which the exercises are fetched.
83
90
 
84
91
  #### Exercise structure
85
92
  Each exercise has the following structure:
86
- - `HINTS.md` is an optional file containing instructions and/or hints. It is used together with the respective `description.md` for the exercise from [x-common](https://github.com/exercism/x-common) to build the `README.md` file.
87
93
  - `<exercise-name>.R` usually contains an empty function declaration, as a starting point for the required solution.
88
94
  - `example.R` is the source code of the sample solution.
89
95
  - `test_<exercise-name>.R` is the [test suite](#test-suite).
96
+ - `HINTS.md` is an optional file containing instructions and/or hints. It is used together with the respective `description.md` for the exercise from [x-common](https://github.com/exercism/x-common) to build the `README.md` file.
90
97
 
91
98
  ### Writing an issue
92
99
  To report a bug you should [create an issue](https://help.github.com/articles/creating-an-issue/) [here](https://github.com/exercism/xr/issues).
@@ -104,17 +111,29 @@ The example solution doesn't have to be perfect, but should pass all of the test
104
111
  The test suite should be derived from the respective `x-common/exercises/<exercise-name>/canonical-data.json` and comply to some formatting and coding standards (to get an idea you can look at some of the existing tests).
105
112
 
106
113
  ### Running tests
107
- To run the tests for an exercise, simply run `source('test_<exercise-name>.R')` from within the exercise's directory. Note that when testing locally you'll need to (temporarily) replace the first line of `test_<exercise-name>.R` (which sources `<exercise-name>.R`) with `source('example.R')`.
114
+ To run the tests for just a single exercise, run `source('test_<exercise-name>.R')` from within the exercise's directory. Note that when testing locally you'll need to replace the first line of `test_<exercise-name>.R` (which sources `<exercise-name>.R`) with `source('example.R')`. If you do this, remember to change it back before submitting any pull requests.
115
+
116
+ Alternatively, to run tests for all exercises at once, simply run `source("bin/run_tests.R")`.
108
117
 
109
118
  The example solutions must pass the tests without failures. Additionally the tests should not run longer than a few seconds.
110
119
 
111
- In order to be accepted by Travis-CI, every exercise must be registered in `config.json`.
120
+ In order to be accepted by Travis-CI, each exercise must be registered in `config.json`.
112
121
 
113
122
  ### Style guide
114
- Given that there are a variety of R style guides in circulation, at this stage we don't enforce a particular style guide, but our preference is to have R code in this repository follow Hadley Wickham's [R style guide](http://adv-r.had.co.nz/Style.html).
123
+ There are a variety of R style guides in circulation and opinions on the topic can vary widely which does make it hard to settle on specific standards. Our preference is to have R code in this repository follow Hadley Wickham's [R style guide](http://adv-r.had.co.nz/Style.html).
115
124
 
116
125
  You are thus encouraged to run [`lintr`](https://github.com/jimhester/lintr) on your R scripts before opening a [pull request](#writing-a-pull-request) in order to check that your code adheres to this style guide before submitting it for review.
117
126
 
127
+ Note however that at the moment only the following linting rules are strictly enforced:
128
+
129
+ - line length should be less than 80 characters
130
+ - objects should not be in camelCase, snake_case is preferred
131
+ - the assignment operator <- should be used
132
+ - all commas should be followed by a space (but not preceded by one)
133
+ - no absolute paths should be used
134
+
135
+ To perform these specific checks locally, run `source("bin/run_lints.R")`.
136
+
118
137
  ## License
119
138
 
120
139
  The MIT License (MIT)
@@ -0,0 +1,30 @@
1
+ library(lintr)
2
+
3
+ linters <- list(
4
+ a = line_length_linter(80),
5
+ b = camel_case_linter,
6
+ c = assignment_linter,
7
+ d = commas_linter,
8
+ e = absolute_paths_linter
9
+ )
10
+
11
+ files <- list.files(path = "exercises", pattern = ".+\\.R$", recursive = TRUE, full.names = TRUE)
12
+ lints <- lintr:::flatten_lints(lapply(files, function(file) {
13
+ if (interactive()) {
14
+ message(".", appendLF = FALSE)
15
+ }
16
+ lint(file, linters, parse_settings = FALSE)
17
+ }))
18
+ if (interactive()) {
19
+ message()
20
+ }
21
+ lints <- lintr:::reorder_lints(lints)
22
+ class(lints) <- "lints"
23
+
24
+ has_lints <- length(lints) > 0
25
+ lint_output <- NULL
26
+ if (has_lints) {
27
+ lint_output <- paste(collapse = "\n", capture.output(print(lints)))
28
+ }
29
+
30
+ testthat::expect(!has_lints, paste(sep = "\n", "Not lint free", lint_output))
@@ -0,0 +1,35 @@
1
+ library(jsonlite)
2
+ library(testthat)
3
+ library(magrittr)
4
+
5
+ test_exercise <- function(exercise) {
6
+
7
+ solution_file <- paste0(exercise, ".R")
8
+ test_file <- paste0("test_", exercise, ".R")
9
+
10
+ file.copy(
11
+ file.path("..", "exercises", exercise, "example.R"),
12
+ solution_file
13
+ )
14
+ file.copy(
15
+ file.path("..", "exercises", exercise, test_file),
16
+ test_file
17
+ )
18
+
19
+ source(test_file)
20
+ rm(list = ls())
21
+
22
+ }
23
+
24
+ # create temp directory for testing purposes
25
+ temp_dir <- "temp"
26
+ dir.create(temp_dir)
27
+ setwd(temp_dir)
28
+
29
+ # read config and test all exercises
30
+ config <- fromJSON(file.path("..", "config.json"))
31
+ lapply(config$exercises$slug, test_exercise)
32
+
33
+ # clean up
34
+ setwd(dir = "../")
35
+ unlink("temp", recursive = TRUE)
@@ -1,3 +1,3 @@
1
- anagram <- function() {
1
+ anagram <- function(subject, candidates) {
2
2
 
3
3
  }
@@ -1,18 +1,18 @@
1
- anagram <- function(subject,candidates) {
1
+ anagram <- function(subject, candidates) {
2
2
  # subject is a string
3
3
  # candidates is a character vector
4
4
  # break subject into vector of characters
5
5
  subject <- tolower(subject)
6
6
  test_candidates <- tolower(candidates)
7
- l <- strsplit(subject,"")[[1]]
7
+ l <- strsplit(subject, "")[[1]]
8
8
  # sub out each character from l in candidates
9
9
  for (i in l) {
10
- test_candidates <- sub(i,"",test_candidates)
10
+ test_candidates <- sub(i, "", test_candidates)
11
11
  }
12
- result <- candidates[test_candidates=="" &
12
+ result <- candidates[test_candidates == "" &
13
13
  tolower(candidates) != subject &
14
14
  nchar(candidates) == length(l)]
15
- if (length(result)==0) {
15
+ if (length(result) == 0) {
16
16
  return(c())
17
17
  }
18
18
  return(result)