trackler 2.2.1.41 → 2.2.1.42

Sign up to get free protection for your applications and to get access to all the features.
Files changed (289) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +0 -3
  3. data/lib/trackler/version.rb +1 -1
  4. data/problem-specifications/exercises/change/metadata.yml +0 -3
  5. data/tracks/c/exercises/allergies/src/allergies.h +12 -12
  6. data/tracks/c/exercises/allergies/src/example.c +4 -4
  7. data/tracks/c/exercises/allergies/src/example.h +14 -14
  8. data/tracks/c/exercises/allergies/test/test_allergies.c +45 -45
  9. data/tracks/cfml/config.json +139 -193
  10. data/tracks/cfml/config/maintainers.json +11 -11
  11. data/tracks/csharp/exercises/etl/Etl.cs +1 -1
  12. data/tracks/csharp/exercises/etl/EtlTest.cs +102 -0
  13. data/tracks/csharp/exercises/etl/Example.cs +1 -1
  14. data/tracks/csharp/exercises/pascals-triangle/Example.cs +10 -1
  15. data/tracks/csharp/exercises/pascals-triangle/PascalsTriangle.cs +1 -0
  16. data/tracks/csharp/exercises/pascals-triangle/PascalsTriangleTest.cs +17 -50
  17. data/tracks/csharp/exercises/saddle-points/SaddlePointsTest.cs +75 -0
  18. data/tracks/csharp/generators/Exercises/Etl.cs +61 -0
  19. data/tracks/csharp/generators/Exercises/PascalsTriangle.cs +28 -0
  20. data/tracks/csharp/generators/Exercises/SaddlePoints.cs +50 -0
  21. data/tracks/csharp/generators/Output/ValueFormatter.cs +29 -0
  22. data/tracks/java/config.json +40 -5
  23. data/tracks/java/exercises/triangle/.meta/src/reference/java/Triangle.java +11 -10
  24. data/tracks/java/exercises/triangle/src/main/java/Triangle.java +9 -1
  25. data/tracks/java/exercises/triangle/src/test/java/TriangleTest.java +12 -12
  26. data/tracks/python/exercises/phone-number/phone_number.py +1 -1
  27. data/tracks/python/exercises/rna-transcription/rna_transcription.py +1 -1
  28. data/tracks/python/exercises/run-length-encoding/run_length_encoding.py +2 -2
  29. data/tracks/python/exercises/saddle-points/saddle_points.py +1 -1
  30. data/tracks/rust/exercises/etl/README.md +1 -1
  31. data/tracks/rust/exercises/ocr-numbers/README.md +1 -1
  32. data/tracks/rust/exercises/pascals-triangle/README.md +1 -1
  33. data/tracks/rust/exercises/rna-transcription/README.md +1 -1
  34. data/tracks/scala/exercises/meetup/src/test/scala/MeetupTest.scala +118 -93
  35. data/tracks/scala/testgen/src/main/scala/MeetupTestGenerator.scala +48 -0
  36. data/tracks/scala/testgen/src/main/scala/testgen/CanonicalDataParser.scala +1 -1
  37. data/tracks/typescript/config.json +13 -0
  38. data/tracks/typescript/exercises/bob/bob.ts +7 -0
  39. data/tracks/typescript/exercises/hello-world/hello-world.ts +7 -0
  40. data/tracks/typescript/exercises/leap/leap.ts +5 -0
  41. data/tracks/typescript/exercises/pangram/pangram.ts +11 -0
  42. data/tracks/typescript/exercises/prime-factors/README.md +73 -0
  43. data/tracks/typescript/exercises/prime-factors/package.json +36 -0
  44. data/tracks/typescript/exercises/prime-factors/prime-factors.example.ts +14 -0
  45. data/tracks/typescript/exercises/prime-factors/prime-factors.test.ts +25 -0
  46. data/tracks/{coldfusion/exercises/acronym/.meta/HINTS.md → typescript/exercises/prime-factors/prime-factors.ts} +0 -0
  47. data/tracks/typescript/exercises/prime-factors/tsconfig.json +22 -0
  48. data/tracks/typescript/exercises/prime-factors/tslint.json +127 -0
  49. data/tracks/typescript/exercises/prime-factors/yarn.lock +2305 -0
  50. data/tracks/typescript/exercises/rna-transcription/rna-transcription.ts +7 -0
  51. metadata +16 -242
  52. data/tracks/coldfusion/.gitignore +0 -5
  53. data/tracks/coldfusion/.travis.yml +0 -18
  54. data/tracks/coldfusion/CONTRIBUTING.md +0 -10
  55. data/tracks/coldfusion/LICENSE +0 -21
  56. data/tracks/coldfusion/README.md +0 -92
  57. data/tracks/coldfusion/bin/fetch-configlet +0 -32
  58. data/tracks/coldfusion/config.json +0 -223
  59. data/tracks/coldfusion/config/exercise_readme.go.tmpl +0 -16
  60. data/tracks/coldfusion/config/maintainers.json +0 -13
  61. data/tracks/coldfusion/docs/ABOUT.md +0 -10
  62. data/tracks/coldfusion/docs/EXERCISE_README_INSERT.md +0 -15
  63. data/tracks/coldfusion/docs/INSTALLATION.md +0 -35
  64. data/tracks/coldfusion/docs/LEARNING.md +0 -37
  65. data/tracks/coldfusion/docs/RESOURCES.md +0 -29
  66. data/tracks/coldfusion/docs/SNIPPET.txt +0 -8
  67. data/tracks/coldfusion/docs/TESTS.md +0 -13
  68. data/tracks/coldfusion/exercises/acronym/Acronym.cfc +0 -13
  69. data/tracks/coldfusion/exercises/acronym/AcronymTest.cfc +0 -43
  70. data/tracks/coldfusion/exercises/acronym/Solution.cfc +0 -22
  71. data/tracks/coldfusion/exercises/acronym/SolutionTest.cfc +0 -7
  72. data/tracks/coldfusion/exercises/acronym/TestRunner.cfc +0 -103
  73. data/tracks/coldfusion/exercises/acronym/box.json +0 -8
  74. data/tracks/coldfusion/exercises/acronym/index.cfm +0 -37
  75. data/tracks/coldfusion/exercises/atbash-cipher/.meta/HINTS.md +0 -0
  76. data/tracks/coldfusion/exercises/atbash-cipher/AtbashCipher.cfc +0 -14
  77. data/tracks/coldfusion/exercises/atbash-cipher/AtbashCipherTest.cfc +0 -71
  78. data/tracks/coldfusion/exercises/atbash-cipher/Solution.cfc +0 -56
  79. data/tracks/coldfusion/exercises/atbash-cipher/SolutionTest.cfc +0 -7
  80. data/tracks/coldfusion/exercises/atbash-cipher/TestRunner.cfc +0 -103
  81. data/tracks/coldfusion/exercises/atbash-cipher/box.json +0 -8
  82. data/tracks/coldfusion/exercises/atbash-cipher/index.cfm +0 -37
  83. data/tracks/coldfusion/exercises/bob/.meta/HINTS.md +0 -0
  84. data/tracks/coldfusion/exercises/bob/Bob.cfc +0 -13
  85. data/tracks/coldfusion/exercises/bob/BobTest.cfc +0 -115
  86. data/tracks/coldfusion/exercises/bob/Solution.cfc +0 -27
  87. data/tracks/coldfusion/exercises/bob/SolutionTest.cfc +0 -7
  88. data/tracks/coldfusion/exercises/bob/TestRunner.cfc +0 -103
  89. data/tracks/coldfusion/exercises/bob/box.json +0 -8
  90. data/tracks/coldfusion/exercises/bob/index.cfm +0 -37
  91. data/tracks/coldfusion/exercises/diamond/.meta/HINTS.md +0 -0
  92. data/tracks/coldfusion/exercises/diamond/Diamond.cfc +0 -13
  93. data/tracks/coldfusion/exercises/diamond/DiamondTest.cfc +0 -35
  94. data/tracks/coldfusion/exercises/diamond/Solution.cfc +0 -35
  95. data/tracks/coldfusion/exercises/diamond/SolutionTest.cfc +0 -7
  96. data/tracks/coldfusion/exercises/diamond/TestRunner.cfc +0 -103
  97. data/tracks/coldfusion/exercises/diamond/box.json +0 -8
  98. data/tracks/coldfusion/exercises/diamond/index.cfm +0 -37
  99. data/tracks/coldfusion/exercises/difference-of-squares/.meta/HINTS.md +0 -0
  100. data/tracks/coldfusion/exercises/difference-of-squares/DifferenceOfSquares.cfc +0 -18
  101. data/tracks/coldfusion/exercises/difference-of-squares/DifferenceOfSquaresTest.cfc +0 -63
  102. data/tracks/coldfusion/exercises/difference-of-squares/Solution.cfc +0 -28
  103. data/tracks/coldfusion/exercises/difference-of-squares/SolutionTest.cfc +0 -7
  104. data/tracks/coldfusion/exercises/difference-of-squares/TestRunner.cfc +0 -103
  105. data/tracks/coldfusion/exercises/difference-of-squares/box.json +0 -8
  106. data/tracks/coldfusion/exercises/difference-of-squares/index.cfm +0 -37
  107. data/tracks/coldfusion/exercises/flatten-array/.meta/HINTS.md +0 -0
  108. data/tracks/coldfusion/exercises/flatten-array/FlattenArray.cfc +0 -13
  109. data/tracks/coldfusion/exercises/flatten-array/FlattenArrayTest.cfc +0 -42
  110. data/tracks/coldfusion/exercises/flatten-array/Solution.cfc +0 -26
  111. data/tracks/coldfusion/exercises/flatten-array/SolutionTest.cfc +0 -7
  112. data/tracks/coldfusion/exercises/flatten-array/TestRunner.cfc +0 -103
  113. data/tracks/coldfusion/exercises/flatten-array/box.json +0 -8
  114. data/tracks/coldfusion/exercises/flatten-array/index.cfm +0 -37
  115. data/tracks/coldfusion/exercises/gigasecond/.meta/HINTS.md +0 -0
  116. data/tracks/coldfusion/exercises/gigasecond/Gigasecond.cfc +0 -13
  117. data/tracks/coldfusion/exercises/gigasecond/GigasecondTest.cfc +0 -39
  118. data/tracks/coldfusion/exercises/gigasecond/Solution.cfc +0 -16
  119. data/tracks/coldfusion/exercises/gigasecond/SolutionTest.cfc +0 -7
  120. data/tracks/coldfusion/exercises/gigasecond/TestRunner.cfc +0 -103
  121. data/tracks/coldfusion/exercises/gigasecond/box.json +0 -8
  122. data/tracks/coldfusion/exercises/gigasecond/index.cfm +0 -37
  123. data/tracks/coldfusion/exercises/grains/.meta/HINTS.md +0 -0
  124. data/tracks/coldfusion/exercises/grains/Grains.cfc +0 -14
  125. data/tracks/coldfusion/exercises/grains/GrainsTest.cfc +0 -63
  126. data/tracks/coldfusion/exercises/grains/Solution.cfc +0 -22
  127. data/tracks/coldfusion/exercises/grains/SolutionTest.cfc +0 -7
  128. data/tracks/coldfusion/exercises/grains/TestRunner.cfc +0 -103
  129. data/tracks/coldfusion/exercises/grains/box.json +0 -8
  130. data/tracks/coldfusion/exercises/grains/index.cfm +0 -37
  131. data/tracks/coldfusion/exercises/hamming/.meta/HINTS.md +0 -0
  132. data/tracks/coldfusion/exercises/hamming/Hamming.cfc +0 -13
  133. data/tracks/coldfusion/exercises/hamming/HammingTest.cfc +0 -75
  134. data/tracks/coldfusion/exercises/hamming/Solution.cfc +0 -25
  135. data/tracks/coldfusion/exercises/hamming/SolutionTest.cfc +0 -7
  136. data/tracks/coldfusion/exercises/hamming/TestRunner.cfc +0 -103
  137. data/tracks/coldfusion/exercises/hamming/box.json +0 -8
  138. data/tracks/coldfusion/exercises/hamming/index.cfm +0 -37
  139. data/tracks/coldfusion/exercises/hello-world/HelloWorld.cfc +0 -13
  140. data/tracks/coldfusion/exercises/hello-world/HelloWorldTest.cfc +0 -18
  141. data/tracks/coldfusion/exercises/hello-world/Solution.cfc +0 -13
  142. data/tracks/coldfusion/exercises/hello-world/SolutionTest.cfc +0 -7
  143. data/tracks/coldfusion/exercises/hello-world/TestRunner.cfc +0 -103
  144. data/tracks/coldfusion/exercises/hello-world/box.json +0 -8
  145. data/tracks/coldfusion/exercises/hello-world/index.cfm +0 -37
  146. data/tracks/coldfusion/exercises/isogram/.meta/HINTS.md +0 -0
  147. data/tracks/coldfusion/exercises/isogram/Isogram.cfc +0 -13
  148. data/tracks/coldfusion/exercises/isogram/IsogramTest.cfc +0 -55
  149. data/tracks/coldfusion/exercises/isogram/Solution.cfc +0 -23
  150. data/tracks/coldfusion/exercises/isogram/SolutionTest.cfc +0 -7
  151. data/tracks/coldfusion/exercises/isogram/TestRunner.cfc +0 -103
  152. data/tracks/coldfusion/exercises/isogram/box.json +0 -8
  153. data/tracks/coldfusion/exercises/isogram/index.cfm +0 -37
  154. data/tracks/coldfusion/exercises/largest-series-product/.meta/HINTS.md +0 -0
  155. data/tracks/coldfusion/exercises/largest-series-product/LargestSeriesProduct.cfc +0 -13
  156. data/tracks/coldfusion/exercises/largest-series-product/LargestSeriesProductTest.cfc +0 -75
  157. data/tracks/coldfusion/exercises/largest-series-product/Solution.cfc +0 -41
  158. data/tracks/coldfusion/exercises/largest-series-product/SolutionTest.cfc +0 -7
  159. data/tracks/coldfusion/exercises/largest-series-product/TestRunner.cfc +0 -103
  160. data/tracks/coldfusion/exercises/largest-series-product/box.json +0 -8
  161. data/tracks/coldfusion/exercises/largest-series-product/index.cfm +0 -37
  162. data/tracks/coldfusion/exercises/leap/Leap.cfc +0 -15
  163. data/tracks/coldfusion/exercises/leap/LeapTest.cfc +0 -39
  164. data/tracks/coldfusion/exercises/leap/README.md +0 -33
  165. data/tracks/coldfusion/exercises/leap/Solution.cfc +0 -19
  166. data/tracks/coldfusion/exercises/leap/SolutionTest.cfc +0 -7
  167. data/tracks/coldfusion/exercises/leap/TestRunner.cfc +0 -103
  168. data/tracks/coldfusion/exercises/leap/box.json +0 -8
  169. data/tracks/coldfusion/exercises/leap/index.cfm +0 -37
  170. data/tracks/coldfusion/exercises/luhn/.meta/HINTS.md +0 -0
  171. data/tracks/coldfusion/exercises/luhn/Luhn.cfc +0 -13
  172. data/tracks/coldfusion/exercises/luhn/LuhnTest.cfc +0 -67
  173. data/tracks/coldfusion/exercises/luhn/Solution.cfc +0 -38
  174. data/tracks/coldfusion/exercises/luhn/SolutionTest.cfc +0 -7
  175. data/tracks/coldfusion/exercises/luhn/TestRunner.cfc +0 -103
  176. data/tracks/coldfusion/exercises/luhn/box.json +0 -8
  177. data/tracks/coldfusion/exercises/luhn/index.cfm +0 -37
  178. data/tracks/coldfusion/exercises/nth-prime/.meta/HINTS.md +0 -0
  179. data/tracks/coldfusion/exercises/nth-prime/NthPrime.cfc +0 -13
  180. data/tracks/coldfusion/exercises/nth-prime/NthPrimeTest.cfc +0 -35
  181. data/tracks/coldfusion/exercises/nth-prime/Solution.cfc +0 -33
  182. data/tracks/coldfusion/exercises/nth-prime/SolutionTest.cfc +0 -7
  183. data/tracks/coldfusion/exercises/nth-prime/TestRunner.cfc +0 -103
  184. data/tracks/coldfusion/exercises/nth-prime/box.json +0 -8
  185. data/tracks/coldfusion/exercises/nth-prime/index.cfm +0 -37
  186. data/tracks/coldfusion/exercises/pangram/.meta/HINTS.md +0 -0
  187. data/tracks/coldfusion/exercises/pangram/Pangram.cfc +0 -13
  188. data/tracks/coldfusion/exercises/pangram/PangramTest.cfc +0 -55
  189. data/tracks/coldfusion/exercises/pangram/Solution.cfc +0 -21
  190. data/tracks/coldfusion/exercises/pangram/SolutionTest.cfc +0 -7
  191. data/tracks/coldfusion/exercises/pangram/TestRunner.cfc +0 -103
  192. data/tracks/coldfusion/exercises/pangram/box.json +0 -8
  193. data/tracks/coldfusion/exercises/pangram/index.cfm +0 -37
  194. data/tracks/coldfusion/exercises/pig-latin/.meta/HINTS.md +0 -0
  195. data/tracks/coldfusion/exercises/pig-latin/PigLatin.cfc +0 -13
  196. data/tracks/coldfusion/exercises/pig-latin/PigLatinTest.cfc +0 -115
  197. data/tracks/coldfusion/exercises/pig-latin/Solution.cfc +0 -30
  198. data/tracks/coldfusion/exercises/pig-latin/SolutionTest.cfc +0 -7
  199. data/tracks/coldfusion/exercises/pig-latin/TestRunner.cfc +0 -103
  200. data/tracks/coldfusion/exercises/pig-latin/box.json +0 -8
  201. data/tracks/coldfusion/exercises/pig-latin/index.cfm +0 -37
  202. data/tracks/coldfusion/exercises/raindrops/.meta/HINTS.md +0 -0
  203. data/tracks/coldfusion/exercises/raindrops/Raindrops.cfc +0 -13
  204. data/tracks/coldfusion/exercises/raindrops/RaindropsTest.cfc +0 -87
  205. data/tracks/coldfusion/exercises/raindrops/Solution.cfc +0 -33
  206. data/tracks/coldfusion/exercises/raindrops/SolutionTest.cfc +0 -7
  207. data/tracks/coldfusion/exercises/raindrops/TestRunner.cfc +0 -103
  208. data/tracks/coldfusion/exercises/raindrops/box.json +0 -8
  209. data/tracks/coldfusion/exercises/raindrops/index.cfm +0 -37
  210. data/tracks/coldfusion/exercises/rna-transcription/.meta/HINTS.md +0 -0
  211. data/tracks/coldfusion/exercises/rna-transcription/RnaTranscription.cfc +0 -13
  212. data/tracks/coldfusion/exercises/rna-transcription/RnaTranscriptionTest.cfc +0 -47
  213. data/tracks/coldfusion/exercises/rna-transcription/Solution.cfc +0 -35
  214. data/tracks/coldfusion/exercises/rna-transcription/SolutionTest.cfc +0 -7
  215. data/tracks/coldfusion/exercises/rna-transcription/TestRunner.cfc +0 -103
  216. data/tracks/coldfusion/exercises/rna-transcription/box.json +0 -8
  217. data/tracks/coldfusion/exercises/rna-transcription/index.cfm +0 -37
  218. data/tracks/coldfusion/exercises/saddle-points/.meta/HINTS.md +0 -0
  219. data/tracks/coldfusion/exercises/saddle-points/SaddlePoints.cfc +0 -13
  220. data/tracks/coldfusion/exercises/saddle-points/SaddlePointsTest.cfc +0 -35
  221. data/tracks/coldfusion/exercises/saddle-points/Solution.cfc +0 -59
  222. data/tracks/coldfusion/exercises/saddle-points/SolutionTest.cfc +0 -7
  223. data/tracks/coldfusion/exercises/saddle-points/TestRunner.cfc +0 -103
  224. data/tracks/coldfusion/exercises/saddle-points/box.json +0 -8
  225. data/tracks/coldfusion/exercises/saddle-points/index.cfm +0 -37
  226. data/tracks/coldfusion/exercises/scrabble-score/.meta/HINTS.md +0 -0
  227. data/tracks/coldfusion/exercises/scrabble-score/ScrabbleScore.cfc +0 -13
  228. data/tracks/coldfusion/exercises/scrabble-score/ScrabbleScoreTest.cfc +0 -59
  229. data/tracks/coldfusion/exercises/scrabble-score/Solution.cfc +0 -50
  230. data/tracks/coldfusion/exercises/scrabble-score/SolutionTest.cfc +0 -7
  231. data/tracks/coldfusion/exercises/scrabble-score/TestRunner.cfc +0 -103
  232. data/tracks/coldfusion/exercises/scrabble-score/box.json +0 -8
  233. data/tracks/coldfusion/exercises/scrabble-score/index.cfm +0 -37
  234. data/tracks/coldfusion/exercises/secret-handshake/.meta/HINTS.md +0 -0
  235. data/tracks/coldfusion/exercises/secret-handshake/SecretHandshake.cfc +0 -13
  236. data/tracks/coldfusion/exercises/secret-handshake/SecretHandshakeTest.cfc +0 -63
  237. data/tracks/coldfusion/exercises/secret-handshake/Solution.cfc +0 -31
  238. data/tracks/coldfusion/exercises/secret-handshake/SolutionTest.cfc +0 -7
  239. data/tracks/coldfusion/exercises/secret-handshake/TestRunner.cfc +0 -103
  240. data/tracks/coldfusion/exercises/secret-handshake/box.json +0 -8
  241. data/tracks/coldfusion/exercises/secret-handshake/index.cfm +0 -37
  242. data/tracks/coldfusion/exercises/space-age/.meta/HINTS.md +0 -0
  243. data/tracks/coldfusion/exercises/space-age/Solution.cfc +0 -28
  244. data/tracks/coldfusion/exercises/space-age/SolutionTest.cfc +0 -7
  245. data/tracks/coldfusion/exercises/space-age/SpaceAge.cfc +0 -13
  246. data/tracks/coldfusion/exercises/space-age/SpaceAgeTest.cfc +0 -47
  247. data/tracks/coldfusion/exercises/space-age/TestRunner.cfc +0 -103
  248. data/tracks/coldfusion/exercises/space-age/box.json +0 -8
  249. data/tracks/coldfusion/exercises/space-age/index.cfm +0 -37
  250. data/tracks/coldfusion/exercises/sum-of-multiples/.meta/HINTS.md +0 -0
  251. data/tracks/coldfusion/exercises/sum-of-multiples/Solution.cfc +0 -27
  252. data/tracks/coldfusion/exercises/sum-of-multiples/SolutionTest.cfc +0 -7
  253. data/tracks/coldfusion/exercises/sum-of-multiples/SumOfMultiples.cfc +0 -13
  254. data/tracks/coldfusion/exercises/sum-of-multiples/SumOfMultiplesTest.cfc +0 -63
  255. data/tracks/coldfusion/exercises/sum-of-multiples/TestRunner.cfc +0 -103
  256. data/tracks/coldfusion/exercises/sum-of-multiples/box.json +0 -8
  257. data/tracks/coldfusion/exercises/sum-of-multiples/index.cfm +0 -37
  258. data/tracks/coldfusion/exercises/triangle/.meta/HINTS.md +0 -0
  259. data/tracks/coldfusion/exercises/triangle/Solution.cfc +0 -53
  260. data/tracks/coldfusion/exercises/triangle/SolutionTest.cfc +0 -7
  261. data/tracks/coldfusion/exercises/triangle/TestRunner.cfc +0 -103
  262. data/tracks/coldfusion/exercises/triangle/Triangle.cfc +0 -18
  263. data/tracks/coldfusion/exercises/triangle/TriangleTest.cfc +0 -95
  264. data/tracks/coldfusion/exercises/triangle/box.json +0 -8
  265. data/tracks/coldfusion/exercises/triangle/index.cfm +0 -37
  266. data/tracks/coldfusion/exercises/word-count/.meta/HINTS.md +0 -0
  267. data/tracks/coldfusion/exercises/word-count/Solution.cfc +0 -22
  268. data/tracks/coldfusion/exercises/word-count/SolutionTest.cfc +0 -7
  269. data/tracks/coldfusion/exercises/word-count/TestRunner.cfc +0 -103
  270. data/tracks/coldfusion/exercises/word-count/WordCount.cfc +0 -13
  271. data/tracks/coldfusion/exercises/word-count/WordCountTest.cfc +0 -55
  272. data/tracks/coldfusion/exercises/word-count/box.json +0 -8
  273. data/tracks/coldfusion/exercises/word-count/index.cfm +0 -37
  274. data/tracks/coldfusion/img/icon.png +0 -0
  275. data/tracks/coldfusion/tasks/GenerateTests.cfc +0 -179
  276. data/tracks/coldfusion/tasks/ScaffoldExercise.cfc +0 -85
  277. data/tracks/coldfusion/tasks/TestAllSolutions.cfc +0 -24
  278. data/tracks/coldfusion/tasks/exercise_template/.meta/HINTS.md +0 -0
  279. data/tracks/coldfusion/tasks/exercise_template/@@name@@.cfc +0 -13
  280. data/tracks/coldfusion/tasks/exercise_template/@@name@@Test.cfc +0 -15
  281. data/tracks/coldfusion/tasks/exercise_template/Solution.cfc +0 -6
  282. data/tracks/coldfusion/tasks/exercise_template/SolutionTest.cfc +0 -7
  283. data/tracks/coldfusion/tasks/exercise_template/TestRunner.cfc +0 -103
  284. data/tracks/coldfusion/tasks/exercise_template/box.json +0 -8
  285. data/tracks/coldfusion/tasks/exercise_template/index.cfm +0 -37
  286. data/tracks/csharp/exercises/etl/ETLTest.cs +0 -51
  287. data/tracks/csharp/exercises/saddle-points/SaddlePointTest.cs +0 -68
  288. data/tracks/java/exercises/triangle/.meta/src/reference/java/TriangleKind.java +0 -5
  289. data/tracks/java/exercises/triangle/src/main/java/TriangleKind.java +0 -5
@@ -0,0 +1,50 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+ using Generators.Input;
4
+ using Newtonsoft.Json.Linq;
5
+
6
+ namespace Generators.Exercises
7
+ {
8
+ public class SaddlePoints : Exercise
9
+ {
10
+ protected override void UpdateCanonicalData(CanonicalData canonicalData)
11
+ {
12
+ foreach (var canonicalDataCase in canonicalData.Cases)
13
+ {
14
+ canonicalDataCase.TestedMethodType = TestedMethodType.Instance;
15
+ canonicalDataCase.Property = "Calculate";
16
+ canonicalDataCase.SetConstructorInputParameters("input");
17
+ canonicalDataCase.UseVariablesForConstructorParameters = true;
18
+ canonicalDataCase.UseVariablesForInput = true;
19
+ canonicalDataCase.UseVariableForTested = true;
20
+ canonicalDataCase.UseVariableForExpected = true;
21
+
22
+ canonicalDataCase.Properties["input"] = (canonicalDataCase.Properties["input"] as JArray).ToObject<int[,]>();
23
+
24
+ var array = canonicalDataCase.Expected as Array;
25
+
26
+ if (array != null)
27
+ {
28
+ canonicalDataCase.Expected = ToTupleCollection(array);
29
+ }
30
+ }
31
+ }
32
+
33
+ protected override HashSet<string> AddAdditionalNamespaces()
34
+ {
35
+ return new HashSet<string>
36
+ {
37
+ typeof(System.String).Namespace
38
+ };
39
+ }
40
+
41
+ private IEnumerable<Tuple<string, object>> ToTupleCollection(Array array)
42
+ {
43
+ for (int x = 0; x < array.GetLength(0); x++)
44
+ {
45
+ var current = ((Array)array).GetValue(x) as Dictionary<string, object>;
46
+ yield return new Tuple<string, object>(current["row"].ToString(), current["column"].ToString());
47
+ }
48
+ }
49
+ }
50
+ }
@@ -22,6 +22,14 @@ public static object Format(object val)
22
22
  return $"{enumeration.GetType().Name}.{enumeration}";
23
23
  case JArray jArray:
24
24
  return $"new[] {{ {string.Join(", ", jArray.Select(Format))} }}";
25
+ case int[,] multidimensionalArray:
26
+ return multidimensionalArray.GetLength(0) > 1
27
+ ? $"new[,]\r\n{{\r\n {string.Join(",\r\n ", Enumerable.Range(0, multidimensionalArray.GetUpperBound(0) + 1).Select(x => multidimensionalArray.SliceRow(x).ToNestedArray()))}\r\n}}"
28
+ : "new int[,] { }";
29
+ case IEnumerable<Tuple<string, object>> tuples:
30
+ return $"new[] {{ {string.Join(", ", tuples.Select(Format))} }}";
31
+ case Tuple<string, object> tuple:
32
+ return $"Tuple.Create({tuple.Item1}, {tuple.Item2})";
25
33
  case string str:
26
34
  return str.FormatString();
27
35
  case IEnumerable<int> ints:
@@ -89,5 +97,26 @@ private static IEnumerable<string> AddTrailingSemicolon(this IEnumerable<string>
89
97
  array[array.Length - 1] += ";";
90
98
  return array;
91
99
  }
100
+
101
+ private static IEnumerable<T> SliceRow<T>(this T[,] array, int row)
102
+ {
103
+ for (var i = array.GetLowerBound(1); i <= array.GetUpperBound(1); i++)
104
+ {
105
+ yield return array[row, i];
106
+ }
107
+ }
108
+
109
+ private static IEnumerable<T> SliceColumn<T>(this T[,] array, int column)
110
+ {
111
+ for (var i = array.GetLowerBound(0); i <= array.GetUpperBound(0); i++)
112
+ {
113
+ yield return array[i, column];
114
+ }
115
+ }
116
+
117
+ private static string ToNestedArray<T>(this IEnumerable<T> enumerable)
118
+ {
119
+ return enumerable.Any() ? $"{{ {string.Join(", ", enumerable)} }}" : string.Empty;
120
+ }
92
121
  }
93
122
  }
@@ -100,7 +100,13 @@
100
100
  "core": true,
101
101
  "difficulty": 3,
102
102
  "slug": "scrabble-score",
103
- "topics": null,
103
+ "topics": [
104
+ "games",
105
+ "loops",
106
+ "pattern_matching",
107
+ "strings",
108
+ "transforming"
109
+ ],
104
110
  "unlocked_by": null,
105
111
  "uuid": "afae9f2d-8baf-4bd7-8d7c-d486337f7c97"
106
112
  },
@@ -133,7 +139,16 @@
133
139
  "core": true,
134
140
  "difficulty": 3,
135
141
  "slug": "secret-handshake",
136
- "topics": null,
142
+ "topics": [
143
+ "loops",
144
+ "conditionals",
145
+ "integers",
146
+ "mathematics",
147
+ "transforming",
148
+ "cryptography",
149
+ "enumerations",
150
+ "bitwise_operations"
151
+ ],
137
152
  "unlocked_by": null,
138
153
  "uuid": "71c7c174-7e2c-43c2-bdd6-7515fcb12a91"
139
154
  },
@@ -149,7 +164,13 @@
149
164
  "core": false,
150
165
  "difficulty": 4,
151
166
  "slug": "sum-of-multiples",
152
- "topics": null,
167
+ "topics": [
168
+ "loops",
169
+ "integers",
170
+ "arrays",
171
+ "conditionals",
172
+ "mathematics"
173
+ ],
153
174
  "unlocked_by": "difference-of-squares",
154
175
  "uuid": "2f244afc-3e7b-4f89-92af-e2b427f4ef35"
155
176
  },
@@ -399,7 +420,14 @@
399
420
  "core": false,
400
421
  "difficulty": 5,
401
422
  "slug": "pascals-triangle",
402
- "topics": null,
423
+ "topics": [
424
+ "arrays",
425
+ "matrices",
426
+ "algorithms",
427
+ "mathematics",
428
+ "exception_handling",
429
+ "integers"
430
+ ],
403
431
  "unlocked_by": "matrix",
404
432
  "uuid": "d2a76905-1c8c-4b03-b4f7-4fbff19329f3"
405
433
  },
@@ -460,7 +488,14 @@
460
488
  "core": false,
461
489
  "difficulty": 6,
462
490
  "slug": "transpose",
463
- "topics": null,
491
+ "topics": [
492
+ "loops",
493
+ "arrays",
494
+ "lists",
495
+ "matrices",
496
+ "strings",
497
+ "text_formatting"
498
+ ],
464
499
  "unlocked_by": "matrix",
465
500
  "uuid": "57b76837-4610-466f-9373-d5c2697625f1"
466
501
  },
@@ -6,6 +6,7 @@ class Triangle {
6
6
  private double side1;
7
7
  private double side2;
8
8
  private double side3;
9
+ private int uniqueSides;
9
10
 
10
11
  Triangle(double side1, double side2, double side3) throws TriangleException {
11
12
  this.side1 = side1;
@@ -15,20 +16,20 @@ class Triangle {
15
16
  if (allSidesAreZero() || hasImpossibleSides() || violatesTriangleInequality()) {
16
17
  throw new TriangleException();
17
18
  }
18
- }
19
19
 
20
- TriangleKind getKind() {
21
- int uniqueSides = getNumberOfUniqueSides();
20
+ this.uniqueSides = getNumberOfUniqueSides();
21
+ }
22
22
 
23
- if (uniqueSides == 1) {
24
- return TriangleKind.EQUILATERAL;
25
- }
23
+ boolean isEquilateral() {
24
+ return uniqueSides == 1;
25
+ }
26
26
 
27
- if (uniqueSides == 2) {
28
- return TriangleKind.ISOSCELES;
29
- }
27
+ boolean isIsosceles() {
28
+ return uniqueSides == 2;
29
+ }
30
30
 
31
- return TriangleKind.SCALENE;
31
+ boolean isScalene() {
32
+ return uniqueSides == 3;
32
33
  }
33
34
 
34
35
  private boolean allSidesAreZero() {
@@ -4,7 +4,15 @@ class Triangle {
4
4
  throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
5
5
  }
6
6
 
7
- TriangleKind getKind() {
7
+ boolean isEquilateral() {
8
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
9
+ }
10
+
11
+ boolean isIsosceles() {
12
+ throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
13
+ }
14
+
15
+ boolean isScalene() {
8
16
  throw new UnsupportedOperationException("Delete this statement and write your own implementation.");
9
17
  }
10
18
 
@@ -3,7 +3,7 @@ import org.junit.Ignore;
3
3
  import org.junit.Rule;
4
4
  import org.junit.rules.ExpectedException;
5
5
 
6
- import static org.junit.Assert.assertEquals;
6
+ import static org.junit.Assert.assertTrue;
7
7
 
8
8
  public class TriangleTest {
9
9
 
@@ -14,7 +14,7 @@ public class TriangleTest {
14
14
  public void equilateralTrianglesHaveEqualSides() throws TriangleException {
15
15
  Triangle triangle = new Triangle(2, 2, 2);
16
16
 
17
- assertEquals(TriangleKind.EQUILATERAL, triangle.getKind());
17
+ assertTrue(triangle.isEquilateral());
18
18
  }
19
19
 
20
20
  @Ignore("Remove to run test")
@@ -22,7 +22,7 @@ public class TriangleTest {
22
22
  public void largerEquilateralTrianglesAlsoHaveEqualSides() throws TriangleException {
23
23
  Triangle triangle = new Triangle(10, 10, 10);
24
24
 
25
- assertEquals(TriangleKind.EQUILATERAL, triangle.getKind());
25
+ assertTrue(triangle.isEquilateral());
26
26
  }
27
27
 
28
28
  @Ignore("Remove to run test")
@@ -30,7 +30,7 @@ public class TriangleTest {
30
30
  public void isoscelesTrianglesHaveLastTwoSidesEqual() throws TriangleException {
31
31
  Triangle triangle = new Triangle(3, 4, 4);
32
32
 
33
- assertEquals(TriangleKind.ISOSCELES, triangle.getKind());
33
+ assertTrue(triangle.isIsosceles());
34
34
  }
35
35
 
36
36
  @Ignore("Remove to run test")
@@ -38,7 +38,7 @@ public class TriangleTest {
38
38
  public void isoscelesTrianglesHaveFirstAndLastSidesEqual() throws TriangleException {
39
39
  Triangle triangle = new Triangle(4, 3, 4);
40
40
 
41
- assertEquals(TriangleKind.ISOSCELES, triangle.getKind());
41
+ assertTrue(triangle.isIsosceles());
42
42
  }
43
43
 
44
44
  @Ignore("Remove to run test")
@@ -46,7 +46,7 @@ public class TriangleTest {
46
46
  public void isoscelesTrianglesHaveTwoFirstSidesEqual() throws TriangleException {
47
47
  Triangle triangle = new Triangle(4, 4, 3);
48
48
 
49
- assertEquals(TriangleKind.ISOSCELES, triangle.getKind());
49
+ assertTrue(triangle.isIsosceles());
50
50
  }
51
51
 
52
52
  @Ignore("Remove to run test")
@@ -54,7 +54,7 @@ public class TriangleTest {
54
54
  public void isoscelesTrianglesHaveInFactExactlyTwoSidesEqual() throws TriangleException {
55
55
  Triangle triangle = new Triangle(10, 10, 2);
56
56
 
57
- assertEquals(TriangleKind.ISOSCELES, triangle.getKind());
57
+ assertTrue(triangle.isIsosceles());
58
58
  }
59
59
 
60
60
  @Ignore("Remove to run test")
@@ -62,7 +62,7 @@ public class TriangleTest {
62
62
  public void scaleneTrianglesHaveNoEqualSides() throws TriangleException {
63
63
  Triangle triangle = new Triangle(3, 4, 5);
64
64
 
65
- assertEquals(TriangleKind.SCALENE, triangle.getKind());
65
+ assertTrue(triangle.isScalene());
66
66
  }
67
67
 
68
68
  @Ignore("Remove to run test")
@@ -70,7 +70,7 @@ public class TriangleTest {
70
70
  public void scaleneTrianglesHaveNoEqualSidesAtLargerScaleEither() throws TriangleException {
71
71
  Triangle triangle = new Triangle(10, 11, 12);
72
72
 
73
- assertEquals(TriangleKind.SCALENE, triangle.getKind());
73
+ assertTrue(triangle.isScalene());
74
74
  }
75
75
 
76
76
  @Ignore("Remove to run test")
@@ -78,7 +78,7 @@ public class TriangleTest {
78
78
  public void scaleneTrianglesHaveNoEqualSidesInDescendingOrderEither() throws TriangleException {
79
79
  Triangle triangle = new Triangle(5, 4, 2);
80
80
 
81
- assertEquals(TriangleKind.SCALENE, triangle.getKind());
81
+ assertTrue(triangle.isScalene());
82
82
  }
83
83
 
84
84
  @Ignore("Remove to run test")
@@ -86,7 +86,7 @@ public class TriangleTest {
86
86
  public void verySmallTrianglesAreLegal() throws TriangleException {
87
87
  Triangle triangle = new Triangle(0.4, 0.6, 0.3);
88
88
 
89
- assertEquals(TriangleKind.SCALENE, triangle.getKind());
89
+ assertTrue(triangle.isScalene());
90
90
  }
91
91
 
92
92
  @Ignore("Remove to run test")
@@ -114,7 +114,7 @@ public class TriangleTest {
114
114
  @Test
115
115
  public void trianglesViolatingTriangleInequalityAreIllegal2() throws TriangleException {
116
116
  expectedException.expect(TriangleException.class);
117
- new Triangle(2, 4, 2);
117
+ new Triangle(2, 5, 2);
118
118
  }
119
119
 
120
120
  @Ignore("Remove to run test")
@@ -1,3 +1,3 @@
1
1
  class Phone(object):
2
- def __init__(self):
2
+ def __init__(self, phone_number):
3
3
  pass
@@ -1,2 +1,2 @@
1
- def to_rna():
1
+ def to_rna(dna_strand):
2
2
  pass
@@ -1,6 +1,6 @@
1
- def decode():
1
+ def decode(string):
2
2
  pass
3
3
 
4
4
 
5
- def encode():
5
+ def encode(string):
6
6
  pass
@@ -1,2 +1,2 @@
1
- def saddle_points():
1
+ def saddle_points(matrix):
2
2
  pass
@@ -1,4 +1,4 @@
1
- # Etl
1
+ # ETL
2
2
 
3
3
  We are going to do the `Transform` step of an Extract-Transform-Load.
4
4
 
@@ -1,4 +1,4 @@
1
- # Ocr Numbers
1
+ # OCR Numbers
2
2
 
3
3
  Given a 3 x 4 grid of pipes, underscores, and spaces, determine which number is
4
4
  represented, or whether it is garbled.
@@ -1,4 +1,4 @@
1
- # Pascals Triangle
1
+ # Pascal's Triangle
2
2
 
3
3
  Compute Pascal's triangle up to a given number of rows.
4
4
 
@@ -1,4 +1,4 @@
1
- # Rna Transcription
1
+ # RNA Transcription
2
2
 
3
3
  Given a DNA strand, return its RNA complement (per RNA transcription).
4
4
 
@@ -1,550 +1,575 @@
1
1
  import java.time.LocalDate
2
- import org.scalatest._
2
+ import org.scalatest.{Matchers, FunSuite}
3
3
 
4
+ /** @version 1.0.0 */
4
5
  class MeetupTest extends FunSuite with Matchers {
5
- //Note: Java uses 0-indexed months for GregorianCalendar
6
- test("monteenth of may 2013") {
6
+
7
+ test("monteenth of May 2013") {
7
8
  Meetup(5, 2013).day(Meetup.Mon, Schedule.Teenth) should be(
8
9
  LocalDate.of(2013, 5, 13))
9
10
  }
10
11
 
11
- test("monteenth of august 2013") {
12
+ test("monteenth of August 2013") {
12
13
  pending
13
14
  Meetup(8, 2013).day(Meetup.Mon, Schedule.Teenth) should be(
14
15
  LocalDate.of(2013, 8, 19))
15
16
  }
16
17
 
17
- test("monteenth of september 2013") {
18
+ test("monteenth of September 2013") {
18
19
  pending
19
20
  Meetup(9, 2013).day(Meetup.Mon, Schedule.Teenth) should be(
20
21
  LocalDate.of(2013, 9, 16))
21
22
  }
22
23
 
23
- test("tuesteenth of march 2013") {
24
+ test("tuesteenth of March 2013") {
24
25
  pending
25
26
  Meetup(3, 2013).day(Meetup.Tue, Schedule.Teenth) should be(
26
27
  LocalDate.of(2013, 3, 19))
27
28
  }
28
29
 
29
- test("tuesteenth of april 2013") {
30
+ test("tuesteenth of April 2013") {
30
31
  pending
31
32
  Meetup(4, 2013).day(Meetup.Tue, Schedule.Teenth) should be(
32
33
  LocalDate.of(2013, 4, 16))
33
34
  }
34
35
 
35
- test("tuesteenth of august 2013") {
36
+ test("tuesteenth of August 2013") {
36
37
  pending
37
38
  Meetup(8, 2013).day(Meetup.Tue, Schedule.Teenth) should be(
38
39
  LocalDate.of(2013, 8, 13))
39
40
  }
40
41
 
41
- test("wednesteenth of january 2013") {
42
+ test("wednesteenth of January 2013") {
42
43
  pending
43
44
  Meetup(1, 2013).day(Meetup.Wed, Schedule.Teenth) should be(
44
45
  LocalDate.of(2013, 1, 16))
45
46
  }
46
47
 
47
- test("wednesteenth of february 2013") {
48
+ test("wednesteenth of February 2013") {
48
49
  pending
49
50
  Meetup(2, 2013).day(Meetup.Wed, Schedule.Teenth) should be(
50
51
  LocalDate.of(2013, 2, 13))
51
52
  }
52
53
 
53
- test("wednesteenth of june 2013") {
54
+ test("wednesteenth of June 2013") {
54
55
  pending
55
56
  Meetup(6, 2013).day(Meetup.Wed, Schedule.Teenth) should be(
56
57
  LocalDate.of(2013, 6, 19))
57
58
  }
58
59
 
59
- test("thursteenth of may 2013") {
60
+ test("thursteenth of May 2013") {
60
61
  pending
61
62
  Meetup(5, 2013).day(Meetup.Thu, Schedule.Teenth) should be(
62
63
  LocalDate.of(2013, 5, 16))
63
64
  }
64
65
 
65
- test("thursteenth of june 2013") {
66
+ test("thursteenth of June 2013") {
66
67
  pending
67
68
  Meetup(6, 2013).day(Meetup.Thu, Schedule.Teenth) should be(
68
69
  LocalDate.of(2013, 6, 13))
69
70
  }
70
71
 
71
- test("thursteenth of september 2013") {
72
+ test("thursteenth of September 2013") {
72
73
  pending
73
74
  Meetup(9, 2013).day(Meetup.Thu, Schedule.Teenth) should be(
74
75
  LocalDate.of(2013, 9, 19))
75
76
  }
76
77
 
77
- test("friteenth of april 2013") {
78
+ test("friteenth of April 2013") {
78
79
  pending
79
80
  Meetup(4, 2013).day(Meetup.Fri, Schedule.Teenth) should be(
80
81
  LocalDate.of(2013, 4, 19))
81
82
  }
82
83
 
83
- test("friteenth of august 2013") {
84
+ test("friteenth of August 2013") {
84
85
  pending
85
86
  Meetup(8, 2013).day(Meetup.Fri, Schedule.Teenth) should be(
86
87
  LocalDate.of(2013, 8, 16))
87
88
  }
88
89
 
89
- test("friteenth of september 2013") {
90
+ test("friteenth of September 2013") {
90
91
  pending
91
92
  Meetup(9, 2013).day(Meetup.Fri, Schedule.Teenth) should be(
92
93
  LocalDate.of(2013, 9, 13))
93
94
  }
94
95
 
95
- test("saturteenth of february 2013") {
96
+ test("saturteenth of February 2013") {
96
97
  pending
97
98
  Meetup(2, 2013).day(Meetup.Sat, Schedule.Teenth) should be(
98
99
  LocalDate.of(2013, 2, 16))
99
100
  }
100
101
 
101
- test("saturteenth of april 2013") {
102
+ test("saturteenth of April 2013") {
102
103
  pending
103
104
  Meetup(4, 2013).day(Meetup.Sat, Schedule.Teenth) should be(
104
105
  LocalDate.of(2013, 4, 13))
105
106
  }
106
107
 
107
- test("saturteenth of october 2013") {
108
+ test("saturteenth of October 2013") {
108
109
  pending
109
110
  Meetup(10, 2013).day(Meetup.Sat, Schedule.Teenth) should be(
110
111
  LocalDate.of(2013, 10, 19))
111
112
  }
112
113
 
113
- test("sunteenth of may 2013") {
114
+ test("sunteenth of May 2013") {
114
115
  pending
115
116
  Meetup(5, 2013).day(Meetup.Sun, Schedule.Teenth) should be(
116
117
  LocalDate.of(2013, 5, 19))
117
118
  }
118
119
 
119
- test("sunteenth of june 2013") {
120
+ test("sunteenth of June 2013") {
120
121
  pending
121
122
  Meetup(6, 2013).day(Meetup.Sun, Schedule.Teenth) should be(
122
123
  LocalDate.of(2013, 6, 16))
123
124
  }
124
125
 
125
- test("sunteenth of october 2013") {
126
+ test("sunteenth of October 2013") {
126
127
  pending
127
128
  Meetup(10, 2013).day(Meetup.Sun, Schedule.Teenth) should be(
128
129
  LocalDate.of(2013, 10, 13))
129
130
  }
130
131
 
131
- test("first monday of march 2013") {
132
+ test("first Monday of March 2013") {
132
133
  pending
133
134
  Meetup(3, 2013).day(Meetup.Mon, Schedule.First) should be(
134
135
  LocalDate.of(2013, 3, 4))
135
136
  }
136
137
 
137
- test("first monday of april 2013") {
138
+ test("first Monday of April 2013") {
138
139
  pending
139
140
  Meetup(4, 2013).day(Meetup.Mon, Schedule.First) should be(
140
141
  LocalDate.of(2013, 4, 1))
141
142
  }
142
143
 
143
- test("first tuesday of may 2013") {
144
+ test("first Tuesday of May 2013") {
144
145
  pending
145
146
  Meetup(5, 2013).day(Meetup.Tue, Schedule.First) should be(
146
147
  LocalDate.of(2013, 5, 7))
147
148
  }
148
149
 
149
- test("first tuesday of june 2013") {
150
+ test("first Tuesday of June 2013") {
150
151
  pending
151
152
  Meetup(6, 2013).day(Meetup.Tue, Schedule.First) should be(
152
153
  LocalDate.of(2013, 6, 4))
153
154
  }
154
155
 
155
- test("first wednesday of july 2013") {
156
+ test("first Wednesday of July 2013") {
156
157
  pending
157
158
  Meetup(7, 2013).day(Meetup.Wed, Schedule.First) should be(
158
159
  LocalDate.of(2013, 7, 3))
159
160
  }
160
161
 
161
- test("first wednesday of august 2013") {
162
+ test("first Wednesday of August 2013") {
162
163
  pending
163
164
  Meetup(8, 2013).day(Meetup.Wed, Schedule.First) should be(
164
165
  LocalDate.of(2013, 8, 7))
165
166
  }
166
167
 
167
- test("first thursday of september 2013") {
168
+ test("first Thursday of September 2013") {
168
169
  pending
169
170
  Meetup(9, 2013).day(Meetup.Thu, Schedule.First) should be(
170
171
  LocalDate.of(2013, 9, 5))
171
172
  }
172
173
 
173
- test("first thursday of october 2013") {
174
+ test("first Thursday of October 2013") {
174
175
  pending
175
176
  Meetup(10, 2013).day(Meetup.Thu, Schedule.First) should be(
176
177
  LocalDate.of(2013, 10, 3))
177
178
  }
178
179
 
179
- test("first friday of november 2013") {
180
+ test("first Friday of November 2013") {
180
181
  pending
181
182
  Meetup(11, 2013).day(Meetup.Fri, Schedule.First) should be(
182
183
  LocalDate.of(2013, 11, 1))
183
184
  }
184
185
 
185
- test("first friday of december 2013") {
186
+ test("first Friday of December 2013") {
186
187
  pending
187
188
  Meetup(12, 2013).day(Meetup.Fri, Schedule.First) should be(
188
189
  LocalDate.of(2013, 12, 6))
189
190
  }
190
191
 
191
- test("first saturday of january 2013") {
192
+ test("first Saturday of January 2013") {
192
193
  pending
193
194
  Meetup(1, 2013).day(Meetup.Sat, Schedule.First) should be(
194
195
  LocalDate.of(2013, 1, 5))
195
196
  }
196
197
 
197
- test("first saturday of february 2013") {
198
+ test("first Saturday of February 2013") {
198
199
  pending
199
200
  Meetup(2, 2013).day(Meetup.Sat, Schedule.First) should be(
200
201
  LocalDate.of(2013, 2, 2))
201
202
  }
202
203
 
203
- test("first sunday of march 2013") {
204
+ test("first Sunday of March 2013") {
204
205
  pending
205
206
  Meetup(3, 2013).day(Meetup.Sun, Schedule.First) should be(
206
207
  LocalDate.of(2013, 3, 3))
207
208
  }
208
209
 
209
- test("first sunday of april 2013") {
210
+ test("first Sunday of April 2013") {
210
211
  pending
211
212
  Meetup(4, 2013).day(Meetup.Sun, Schedule.First) should be(
212
213
  LocalDate.of(2013, 4, 7))
213
214
  }
214
215
 
215
- test("second monday of march 2013") {
216
+ test("second Monday of March 2013") {
216
217
  pending
217
218
  Meetup(3, 2013).day(Meetup.Mon, Schedule.Second) should be(
218
219
  LocalDate.of(2013, 3, 11))
219
220
  }
220
221
 
221
- test("second monday of april 2013") {
222
+ test("second Monday of April 2013") {
222
223
  pending
223
224
  Meetup(4, 2013).day(Meetup.Mon, Schedule.Second) should be(
224
225
  LocalDate.of(2013, 4, 8))
225
226
  }
226
227
 
227
- test("second tuesday of may 2013") {
228
+ test("second Tuesday of May 2013") {
228
229
  pending
229
230
  Meetup(5, 2013).day(Meetup.Tue, Schedule.Second) should be(
230
231
  LocalDate.of(2013, 5, 14))
231
232
  }
232
233
 
233
- test("second tuesday of june 2013") {
234
+ test("second Tuesday of June 2013") {
234
235
  pending
235
236
  Meetup(6, 2013).day(Meetup.Tue, Schedule.Second) should be(
236
237
  LocalDate.of(2013, 6, 11))
237
238
  }
238
239
 
239
- test("second wednesday of july 2013") {
240
+ test("second Wednesday of July 2013") {
240
241
  pending
241
242
  Meetup(7, 2013).day(Meetup.Wed, Schedule.Second) should be(
242
243
  LocalDate.of(2013, 7, 10))
243
244
  }
244
245
 
245
- test("second wednesday of august 2013") {
246
+ test("second Wednesday of August 2013") {
246
247
  pending
247
248
  Meetup(8, 2013).day(Meetup.Wed, Schedule.Second) should be(
248
249
  LocalDate.of(2013, 8, 14))
249
250
  }
250
251
 
251
- test("second thursday of september 2013") {
252
+ test("second Thursday of September 2013") {
252
253
  pending
253
254
  Meetup(9, 2013).day(Meetup.Thu, Schedule.Second) should be(
254
255
  LocalDate.of(2013, 9, 12))
255
256
  }
256
257
 
257
- test("second thursday of october 2013") {
258
+ test("second Thursday of October 2013") {
258
259
  pending
259
260
  Meetup(10, 2013).day(Meetup.Thu, Schedule.Second) should be(
260
261
  LocalDate.of(2013, 10, 10))
261
262
  }
262
263
 
263
- test("second friday of november 2013") {
264
+ test("second Friday of November 2013") {
264
265
  pending
265
266
  Meetup(11, 2013).day(Meetup.Fri, Schedule.Second) should be(
266
267
  LocalDate.of(2013, 11, 8))
267
268
  }
268
269
 
269
- test("second friday of december 2013") {
270
+ test("second Friday of December 2013") {
270
271
  pending
271
272
  Meetup(12, 2013).day(Meetup.Fri, Schedule.Second) should be(
272
273
  LocalDate.of(2013, 12, 13))
273
274
  }
274
275
 
275
- test("second saturday of january 2013") {
276
+ test("second Saturday of January 2013") {
276
277
  pending
277
278
  Meetup(1, 2013).day(Meetup.Sat, Schedule.Second) should be(
278
279
  LocalDate.of(2013, 1, 12))
279
280
  }
280
281
 
281
- test("second saturday of february 2013") {
282
+ test("second Saturday of February 2013") {
282
283
  pending
283
284
  Meetup(2, 2013).day(Meetup.Sat, Schedule.Second) should be(
284
285
  LocalDate.of(2013, 2, 9))
285
286
  }
286
287
 
287
- test("second sunday of march 2013") {
288
+ test("second Sunday of March 2013") {
288
289
  pending
289
290
  Meetup(3, 2013).day(Meetup.Sun, Schedule.Second) should be(
290
291
  LocalDate.of(2013, 3, 10))
291
292
  }
292
293
 
293
- test("second sunday of april 2013") {
294
+ test("second Sunday of April 2013") {
294
295
  pending
295
296
  Meetup(4, 2013).day(Meetup.Sun, Schedule.Second) should be(
296
297
  LocalDate.of(2013, 4, 14))
297
298
  }
298
299
 
299
- test("third monday of march 2013") {
300
+ test("third Monday of March 2013") {
300
301
  pending
301
302
  Meetup(3, 2013).day(Meetup.Mon, Schedule.Third) should be(
302
303
  LocalDate.of(2013, 3, 18))
303
304
  }
304
305
 
305
- test("third monday of april 2013") {
306
+ test("third Monday of April 2013") {
306
307
  pending
307
308
  Meetup(4, 2013).day(Meetup.Mon, Schedule.Third) should be(
308
309
  LocalDate.of(2013, 4, 15))
309
310
  }
310
311
 
311
- test("third tuesday of may 2013") {
312
+ test("third Tuesday of May 2013") {
312
313
  pending
313
314
  Meetup(5, 2013).day(Meetup.Tue, Schedule.Third) should be(
314
315
  LocalDate.of(2013, 5, 21))
315
316
  }
316
317
 
317
- test("third tuesday of june 2013") {
318
+ test("third Tuesday of June 2013") {
318
319
  pending
319
320
  Meetup(6, 2013).day(Meetup.Tue, Schedule.Third) should be(
320
321
  LocalDate.of(2013, 6, 18))
321
322
  }
322
323
 
323
- test("third wednesday of july 2013") {
324
+ test("third Wednesday of July 2013") {
324
325
  pending
325
326
  Meetup(7, 2013).day(Meetup.Wed, Schedule.Third) should be(
326
327
  LocalDate.of(2013, 7, 17))
327
328
  }
328
329
 
329
- test("third wednesday of august 2013") {
330
+ test("third Wednesday of August 2013") {
330
331
  pending
331
332
  Meetup(8, 2013).day(Meetup.Wed, Schedule.Third) should be(
332
333
  LocalDate.of(2013, 8, 21))
333
334
  }
334
335
 
335
- test("third thursday of september 2013") {
336
+ test("third Thursday of September 2013") {
336
337
  pending
337
338
  Meetup(9, 2013).day(Meetup.Thu, Schedule.Third) should be(
338
339
  LocalDate.of(2013, 9, 19))
339
340
  }
340
341
 
341
- test("third thursday of october 2013") {
342
+ test("third Thursday of October 2013") {
342
343
  pending
343
344
  Meetup(10, 2013).day(Meetup.Thu, Schedule.Third) should be(
344
345
  LocalDate.of(2013, 10, 17))
345
346
  }
346
347
 
347
- test("third friday of november 2013") {
348
+ test("third Friday of November 2013") {
348
349
  pending
349
350
  Meetup(11, 2013).day(Meetup.Fri, Schedule.Third) should be(
350
351
  LocalDate.of(2013, 11, 15))
351
352
  }
352
353
 
353
- test("third friday of december 2013") {
354
+ test("third Friday of December 2013") {
354
355
  pending
355
356
  Meetup(12, 2013).day(Meetup.Fri, Schedule.Third) should be(
356
357
  LocalDate.of(2013, 12, 20))
357
358
  }
358
359
 
359
- test("third saturday of january 2013") {
360
+ test("third Saturday of January 2013") {
360
361
  pending
361
362
  Meetup(1, 2013).day(Meetup.Sat, Schedule.Third) should be(
362
363
  LocalDate.of(2013, 1, 19))
363
364
  }
364
365
 
365
- test("third saturday of february 2013") {
366
+ test("third Saturday of February 2013") {
366
367
  pending
367
368
  Meetup(2, 2013).day(Meetup.Sat, Schedule.Third) should be(
368
369
  LocalDate.of(2013, 2, 16))
369
370
  }
370
371
 
371
- test("third sunday of march 2013") {
372
+ test("third Sunday of March 2013") {
372
373
  pending
373
374
  Meetup(3, 2013).day(Meetup.Sun, Schedule.Third) should be(
374
375
  LocalDate.of(2013, 3, 17))
375
376
  }
376
377
 
377
- test("third sunday of april 2013") {
378
+ test("third Sunday of April 2013") {
378
379
  pending
379
380
  Meetup(4, 2013).day(Meetup.Sun, Schedule.Third) should be(
380
381
  LocalDate.of(2013, 4, 21))
381
382
  }
382
383
 
383
- test("fourth monday of march 2013") {
384
+ test("fourth Monday of March 2013") {
384
385
  pending
385
386
  Meetup(3, 2013).day(Meetup.Mon, Schedule.Fourth) should be(
386
387
  LocalDate.of(2013, 3, 25))
387
388
  }
388
389
 
389
- test("fourth monday of april 2013") {
390
+ test("fourth Monday of April 2013") {
390
391
  pending
391
392
  Meetup(4, 2013).day(Meetup.Mon, Schedule.Fourth) should be(
392
393
  LocalDate.of(2013, 4, 22))
393
394
  }
394
395
 
395
- test("fourth tuesday of may 2013") {
396
+ test("fourth Tuesday of May 2013") {
396
397
  pending
397
398
  Meetup(5, 2013).day(Meetup.Tue, Schedule.Fourth) should be(
398
399
  LocalDate.of(2013, 5, 28))
399
400
  }
400
401
 
401
- test("fourth tuesday of june 2013") {
402
+ test("fourth Tuesday of June 2013") {
402
403
  pending
403
404
  Meetup(6, 2013).day(Meetup.Tue, Schedule.Fourth) should be(
404
405
  LocalDate.of(2013, 6, 25))
405
406
  }
406
407
 
407
- test("fourth wednesday of july 2013") {
408
+ test("fourth Wednesday of July 2013") {
408
409
  pending
409
410
  Meetup(7, 2013).day(Meetup.Wed, Schedule.Fourth) should be(
410
411
  LocalDate.of(2013, 7, 24))
411
412
  }
412
413
 
413
- test("fourth wednesday of august 2013") {
414
+ test("fourth Wednesday of August 2013") {
414
415
  pending
415
416
  Meetup(8, 2013).day(Meetup.Wed, Schedule.Fourth) should be(
416
417
  LocalDate.of(2013, 8, 28))
417
418
  }
418
419
 
419
- test("fourth thursday of september 2013") {
420
+ test("fourth Thursday of September 2013") {
420
421
  pending
421
422
  Meetup(9, 2013).day(Meetup.Thu, Schedule.Fourth) should be(
422
423
  LocalDate.of(2013, 9, 26))
423
424
  }
424
425
 
425
- test("fourth thursday of october 2013") {
426
+ test("fourth Thursday of October 2013") {
426
427
  pending
427
428
  Meetup(10, 2013).day(Meetup.Thu, Schedule.Fourth) should be(
428
429
  LocalDate.of(2013, 10, 24))
429
430
  }
430
431
 
431
- test("fourth friday of november 2013") {
432
+ test("fourth Friday of November 2013") {
432
433
  pending
433
434
  Meetup(11, 2013).day(Meetup.Fri, Schedule.Fourth) should be(
434
435
  LocalDate.of(2013, 11, 22))
435
436
  }
436
437
 
437
- test("fourth friday of december 2013") {
438
+ test("fourth Friday of December 2013") {
438
439
  pending
439
440
  Meetup(12, 2013).day(Meetup.Fri, Schedule.Fourth) should be(
440
441
  LocalDate.of(2013, 12, 27))
441
442
  }
442
443
 
443
- test("fourth saturday of january 2013") {
444
+ test("fourth Saturday of January 2013") {
444
445
  pending
445
446
  Meetup(1, 2013).day(Meetup.Sat, Schedule.Fourth) should be(
446
447
  LocalDate.of(2013, 1, 26))
447
448
  }
448
449
 
449
- test("fourth saturday of february 2013") {
450
+ test("fourth Saturday of February 2013") {
450
451
  pending
451
452
  Meetup(2, 2013).day(Meetup.Sat, Schedule.Fourth) should be(
452
453
  LocalDate.of(2013, 2, 23))
453
454
  }
454
455
 
455
- test("fourth sunday of march 2013") {
456
+ test("fourth Sunday of March 2013") {
456
457
  pending
457
458
  Meetup(3, 2013).day(Meetup.Sun, Schedule.Fourth) should be(
458
459
  LocalDate.of(2013, 3, 24))
459
460
  }
460
461
 
461
- test("fourth sunday of april 2013") {
462
+ test("fourth Sunday of April 2013") {
462
463
  pending
463
464
  Meetup(4, 2013).day(Meetup.Sun, Schedule.Fourth) should be(
464
465
  LocalDate.of(2013, 4, 28))
465
466
  }
466
467
 
467
- test("last monday of march 2013") {
468
+ test("last Monday of March 2013") {
468
469
  pending
469
470
  Meetup(3, 2013).day(Meetup.Mon, Schedule.Last) should be(
470
471
  LocalDate.of(2013, 3, 25))
471
472
  }
472
473
 
473
- test("last monday of april 2013") {
474
+ test("last Monday of April 2013") {
474
475
  pending
475
476
  Meetup(4, 2013).day(Meetup.Mon, Schedule.Last) should be(
476
477
  LocalDate.of(2013, 4, 29))
477
478
  }
478
479
 
479
- test("last tuesday of may 2013") {
480
+ test("last Tuesday of May 2013") {
480
481
  pending
481
482
  Meetup(5, 2013).day(Meetup.Tue, Schedule.Last) should be(
482
483
  LocalDate.of(2013, 5, 28))
483
484
  }
484
485
 
485
- test("last tuesday of june 2013") {
486
+ test("last Tuesday of June 2013") {
486
487
  pending
487
488
  Meetup(6, 2013).day(Meetup.Tue, Schedule.Last) should be(
488
489
  LocalDate.of(2013, 6, 25))
489
490
  }
490
491
 
491
- test("last wednesday of july 2013") {
492
+ test("last Wednesday of July 2013") {
492
493
  pending
493
494
  Meetup(7, 2013).day(Meetup.Wed, Schedule.Last) should be(
494
495
  LocalDate.of(2013, 7, 31))
495
496
  }
496
497
 
497
- test("last wednesday of august 2013") {
498
+ test("last Wednesday of August 2013") {
498
499
  pending
499
500
  Meetup(8, 2013).day(Meetup.Wed, Schedule.Last) should be(
500
501
  LocalDate.of(2013, 8, 28))
501
502
  }
502
503
 
503
- test("last thursday of september 2013") {
504
+ test("last Thursday of September 2013") {
504
505
  pending
505
506
  Meetup(9, 2013).day(Meetup.Thu, Schedule.Last) should be(
506
507
  LocalDate.of(2013, 9, 26))
507
508
  }
508
509
 
509
- test("last thursday of october 2013") {
510
+ test("last Thursday of October 2013") {
510
511
  pending
511
512
  Meetup(10, 2013).day(Meetup.Thu, Schedule.Last) should be(
512
513
  LocalDate.of(2013, 10, 31))
513
514
  }
514
515
 
515
- test("last friday of november 2013") {
516
+ test("last Friday of November 2013") {
516
517
  pending
517
518
  Meetup(11, 2013).day(Meetup.Fri, Schedule.Last) should be(
518
519
  LocalDate.of(2013, 11, 29))
519
520
  }
520
521
 
521
- test("last friday of december 2013") {
522
+ test("last Friday of December 2013") {
522
523
  pending
523
524
  Meetup(12, 2013).day(Meetup.Fri, Schedule.Last) should be(
524
525
  LocalDate.of(2013, 12, 27))
525
526
  }
526
527
 
527
- test("last saturday of january 2013") {
528
+ test("last Saturday of January 2013") {
528
529
  pending
529
530
  Meetup(1, 2013).day(Meetup.Sat, Schedule.Last) should be(
530
531
  LocalDate.of(2013, 1, 26))
531
532
  }
532
533
 
533
- test("last saturday of february 2013") {
534
+ test("last Saturday of February 2013") {
534
535
  pending
535
536
  Meetup(2, 2013).day(Meetup.Sat, Schedule.Last) should be(
536
537
  LocalDate.of(2013, 2, 23))
537
538
  }
538
539
 
539
- test("last sunday of march 2013") {
540
+ test("last Sunday of March 2013") {
540
541
  pending
541
542
  Meetup(3, 2013).day(Meetup.Sun, Schedule.Last) should be(
542
543
  LocalDate.of(2013, 3, 31))
543
544
  }
544
545
 
545
- test("last sunday of april 2013") {
546
+ test("last Sunday of April 2013") {
546
547
  pending
547
548
  Meetup(4, 2013).day(Meetup.Sun, Schedule.Last) should be(
548
549
  LocalDate.of(2013, 4, 28))
549
550
  }
551
+
552
+ test("last Wednesday of February 2012") {
553
+ pending
554
+ Meetup(2, 2012).day(Meetup.Wed, Schedule.Last) should be(
555
+ LocalDate.of(2012, 2, 29))
556
+ }
557
+
558
+ test("last Wednesday of December 2014") {
559
+ pending
560
+ Meetup(12, 2014).day(Meetup.Wed, Schedule.Last) should be(
561
+ LocalDate.of(2014, 12, 31))
562
+ }
563
+
564
+ test("last Sunday of February 2015") {
565
+ pending
566
+ Meetup(2, 2015).day(Meetup.Sun, Schedule.Last) should be(
567
+ LocalDate.of(2015, 2, 22))
568
+ }
569
+
570
+ test("first Friday of December 2012") {
571
+ pending
572
+ Meetup(12, 2012).day(Meetup.Fri, Schedule.First) should be(
573
+ LocalDate.of(2012, 12, 7))
574
+ }
550
575
  }