trackler 2.2.1.62 → 2.2.1.63

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 (247) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/all-your-base/canonical-data.json +20 -29
  4. data/problem-specifications/exercises/forth/canonical-data.json +52 -5
  5. data/problem-specifications/exercises/isbn-verifier/canonical-data.json +15 -15
  6. data/problem-specifications/exercises/protein-translation/canonical-data.json +153 -0
  7. data/problem-specifications/exercises/reverse-string/canonical-data.json +39 -0
  8. data/problem-specifications/exercises/reverse-string/description.md +5 -0
  9. data/problem-specifications/exercises/reverse-string/metadata.yml +5 -0
  10. data/tracks/c/config.json +42 -41
  11. data/tracks/csharp/config.json +13 -0
  12. data/tracks/csharp/exercises/Exercises.sln +6 -0
  13. data/tracks/csharp/exercises/isbn-verifier/Example.cs +27 -0
  14. data/tracks/csharp/exercises/isbn-verifier/IsbnVerifier.cs +9 -0
  15. data/tracks/csharp/exercises/isbn-verifier/IsbnVerifier.csproj +19 -0
  16. data/tracks/csharp/exercises/isbn-verifier/IsbnVerifierTest.cs +84 -0
  17. data/tracks/csharp/exercises/isbn-verifier/README.md +40 -0
  18. data/tracks/csharp/generators/Exercises/IsbnVerifier.cs +15 -0
  19. data/tracks/delphi/config.json +28 -28
  20. data/tracks/erlang/config.json +10 -0
  21. data/tracks/erlang/exercises/accumulate/rebar.config +1 -1
  22. data/tracks/erlang/exercises/accumulate/test/accumulate_tests.erl +9 -7
  23. data/tracks/erlang/exercises/all-your-base/rebar.config +1 -1
  24. data/tracks/erlang/exercises/all-your-base/test/all_your_base_tests.erl +26 -24
  25. data/tracks/erlang/exercises/allergies/rebar.config +1 -1
  26. data/tracks/erlang/exercises/allergies/test/allergies_tests.erl +19 -17
  27. data/tracks/erlang/exercises/anagram/rebar.config +1 -3
  28. data/tracks/erlang/exercises/anagram/test/anagram_tests.erl +14 -12
  29. data/tracks/erlang/exercises/atbash-cipher/rebar.config +1 -1
  30. data/tracks/erlang/exercises/atbash-cipher/test/atbash_cipher_tests.erl +7 -5
  31. data/tracks/erlang/exercises/bank-account/rebar.config +1 -1
  32. data/tracks/erlang/exercises/bank-account/test/bank_account_tests.erl +52 -51
  33. data/tracks/erlang/exercises/beer-song/rebar.config +30 -0
  34. data/tracks/erlang/exercises/beer-song/test/beer_song_tests.erl +11 -10
  35. data/tracks/erlang/exercises/bob/rebar.config +1 -1
  36. data/tracks/erlang/exercises/bob/test/bob_tests.erl +33 -35
  37. data/tracks/erlang/exercises/circular-buffer/rebar.config +1 -1
  38. data/tracks/erlang/exercises/circular-buffer/test/circular_buffer_tests.erl +33 -32
  39. data/tracks/erlang/exercises/clock/rebar.config +1 -1
  40. data/tracks/erlang/exercises/clock/test/clock_tests.erl +57 -50
  41. data/tracks/erlang/exercises/collatz-conjecture/rebar.config +1 -1
  42. data/tracks/erlang/exercises/collatz-conjecture/test/collatz_conjecture_tests.erl +11 -9
  43. data/tracks/erlang/exercises/complex-numbers/rebar.config +1 -1
  44. data/tracks/erlang/exercises/complex-numbers/test/complex_numbers_tests.erl +102 -76
  45. data/tracks/erlang/exercises/custom-set/rebar.config +1 -1
  46. data/tracks/erlang/exercises/custom-set/test/custom_set_tests.erl +100 -109
  47. data/tracks/erlang/exercises/difference-of-squares/rebar.config +1 -1
  48. data/tracks/erlang/exercises/difference-of-squares/test/difference_of_squares_tests.erl +8 -7
  49. data/tracks/erlang/exercises/etl/rebar.config +1 -1
  50. data/tracks/erlang/exercises/etl/test/etl_tests.erl +6 -5
  51. data/tracks/erlang/exercises/gigasecond/rebar.config +1 -1
  52. data/tracks/erlang/exercises/gigasecond/test/gigasecond_tests.erl +9 -8
  53. data/tracks/erlang/exercises/grade-school/rebar.config +1 -1
  54. data/tracks/erlang/exercises/grade-school/test/grade_school_tests.erl +27 -23
  55. data/tracks/erlang/exercises/grains/rebar.config +1 -1
  56. data/tracks/erlang/exercises/grains/test/grains_tests.erl +7 -6
  57. data/tracks/erlang/exercises/hamming/rebar.config +1 -1
  58. data/tracks/erlang/exercises/hamming/test/hamming_tests.erl +20 -23
  59. data/tracks/erlang/exercises/hello-world/rebar.config +1 -1
  60. data/tracks/erlang/exercises/hello-world/test/hello_world_tests.erl +6 -4
  61. data/tracks/erlang/exercises/isogram/rebar.config +1 -1
  62. data/tracks/erlang/exercises/isogram/test/isogram_tests.erl +14 -12
  63. data/tracks/erlang/exercises/largest-series-product/rebar.config +1 -1
  64. data/tracks/erlang/exercises/largest-series-product/test/largest_series_product_tests.erl +22 -21
  65. data/tracks/erlang/exercises/leap/rebar.config +1 -1
  66. data/tracks/erlang/exercises/leap/test/leap_tests.erl +8 -7
  67. data/tracks/erlang/exercises/luhn/rebar.config +1 -1
  68. data/tracks/erlang/exercises/luhn/test/luhn_tests.erl +18 -16
  69. data/tracks/erlang/exercises/meetup/rebar.config +1 -1
  70. data/tracks/erlang/exercises/meetup/test/meetup_tests.erl +96 -95
  71. data/tracks/erlang/exercises/nucleotide-count/rebar.config +1 -1
  72. data/tracks/erlang/exercises/nucleotide-count/test/nucleotide_count_tests.erl +12 -11
  73. data/tracks/erlang/exercises/pangram/README.md +60 -0
  74. data/tracks/erlang/exercises/{accumulate → pangram}/include/exercism.hrl +0 -0
  75. data/tracks/erlang/exercises/{beer-song/rebar.conf → pangram/rebar.config} +0 -0
  76. data/tracks/erlang/exercises/pangram/src/example.erl +11 -0
  77. data/tracks/erlang/exercises/pangram/src/pangram.app.src +9 -0
  78. data/tracks/erlang/exercises/pangram/src/pangram.erl +8 -0
  79. data/tracks/erlang/exercises/pangram/test/pangram_tests.erl +38 -0
  80. data/tracks/erlang/exercises/parallel-letter-frequency/rebar.config +1 -1
  81. data/tracks/erlang/exercises/parallel-letter-frequency/test/parallel_letter_frequency_tests.erl +7 -6
  82. data/tracks/erlang/exercises/phone-number/rebar.config +1 -1
  83. data/tracks/erlang/exercises/phone-number/test/phone_number_tests.erl +13 -12
  84. data/tracks/erlang/exercises/rna-transcription/rebar.config +1 -1
  85. data/tracks/erlang/exercises/rna-transcription/test/rna_transcription_tests.erl +13 -11
  86. data/tracks/erlang/exercises/robot-simulator/rebar.config +1 -1
  87. data/tracks/erlang/exercises/robot-simulator/test/robot_simulator_tests.erl +70 -69
  88. data/tracks/erlang/exercises/roman-numerals/rebar.config +1 -1
  89. data/tracks/erlang/exercises/roman-numerals/test/roman_numerals_tests.erl +6 -5
  90. data/tracks/erlang/exercises/rotational-cipher/rebar.config +1 -8
  91. data/tracks/erlang/exercises/rotational-cipher/test/rotational_cipher_tests.erl +29 -27
  92. data/tracks/erlang/exercises/scrabble-score/rebar.config +1 -1
  93. data/tracks/erlang/exercises/scrabble-score/test/scrabble_score_tests.erl +6 -5
  94. data/tracks/erlang/exercises/series/rebar.config +1 -1
  95. data/tracks/erlang/exercises/series/test/series_tests.erl +6 -5
  96. data/tracks/erlang/exercises/sieve/rebar.config +1 -1
  97. data/tracks/erlang/exercises/sieve/test/sieve_tests.erl +10 -8
  98. data/tracks/erlang/exercises/space-age/rebar.config +1 -1
  99. data/tracks/erlang/exercises/space-age/test/space_age_tests.erl +20 -19
  100. data/tracks/erlang/exercises/spiral-matrix/rebar.config +1 -1
  101. data/tracks/erlang/exercises/spiral-matrix/test/spiral_matrix_tests.erl +12 -10
  102. data/tracks/erlang/exercises/strain/rebar.config +1 -1
  103. data/tracks/erlang/exercises/strain/test/strain_tests.erl +17 -16
  104. data/tracks/erlang/exercises/sum-of-multiples/rebar.config +1 -1
  105. data/tracks/erlang/exercises/sum-of-multiples/test/sum_of_multiples_tests.erl +16 -15
  106. data/tracks/erlang/exercises/triangle/rebar.config +1 -1
  107. data/tracks/erlang/exercises/triangle/test/triangle_tests.erl +20 -19
  108. data/tracks/erlang/exercises/two-fer/rebar.config +1 -1
  109. data/tracks/erlang/exercises/two-fer/test/two_fer_tests.erl +8 -7
  110. data/tracks/erlang/exercises/word-count/rebar.config +1 -1
  111. data/tracks/erlang/exercises/word-count/test/word_count_tests.erl +6 -5
  112. data/tracks/erlang/exercises/zipper/rebar.config +1 -1
  113. data/tracks/erlang/exercises/zipper/test/zipper_tests.erl +47 -46
  114. data/tracks/erlang/testgen/src/tgen.erl +8 -6
  115. data/tracks/erlang/testgen/src/tgen_bob.erl +1 -1
  116. data/tracks/erlang/testgen/src/tgen_collatz-conjecture.erl +2 -2
  117. data/tracks/erlang/testgen/src/tgen_complex-numbers.erl +11 -11
  118. data/tracks/erlang/testgen/src/tgen_custom-set.erl +14 -14
  119. data/tracks/erlang/testgen/src/tgen_hamming.erl +2 -2
  120. data/tracks/erlang/testgen/src/tgen_hello-world.erl +1 -1
  121. data/tracks/erlang/testgen/src/tgen_leap.erl +1 -1
  122. data/tracks/erlang/testgen/src/tgen_rna-transcription.erl +2 -2
  123. data/tracks/erlang/testgen/src/tgs.erl +6 -0
  124. data/tracks/fsharp/exercises/beer-song/BeerSong.fs +1 -5
  125. data/tracks/fsharp/exercises/beer-song/BeerSongTest.fs +342 -20
  126. data/tracks/fsharp/exercises/beer-song/Example.fs +16 -10
  127. data/tracks/fsharp/exercises/food-chain/Example.fs +1 -1
  128. data/tracks/fsharp/exercises/food-chain/FoodChain.fs +1 -3
  129. data/tracks/fsharp/exercises/food-chain/FoodChainTest.fs +11 -11
  130. data/tracks/fsharp/exercises/house/Example.fs +1 -1
  131. data/tracks/fsharp/exercises/house/House.fs +1 -3
  132. data/tracks/fsharp/exercises/house/HouseTest.fs +202 -202
  133. data/tracks/fsharp/exercises/proverb/Example.fs +9 -9
  134. data/tracks/fsharp/exercises/proverb/Proverb.fs +1 -3
  135. data/tracks/fsharp/exercises/proverb/ProverbTest.fs +50 -21
  136. data/tracks/fsharp/exercises/twelve-days/Example.fs +4 -4
  137. data/tracks/fsharp/exercises/twelve-days/TwelveDays.fs +2 -6
  138. data/tracks/fsharp/exercises/twelve-days/TwelveDaysTest.fs +81 -57
  139. data/tracks/fsharp/generators/Generators.fs +39 -15
  140. data/tracks/go/bin/run-generators +5 -1
  141. data/tracks/go/config.json +14 -2
  142. data/tracks/go/exercises/accumulate/example.go +2 -1
  143. data/tracks/go/exercises/zebra-puzzle/.meta/hints.md +24 -0
  144. data/tracks/go/exercises/zebra-puzzle/README.md +76 -0
  145. data/tracks/go/exercises/zebra-puzzle/example.go +256 -0
  146. data/tracks/go/exercises/zebra-puzzle/zebra_puzzle_test.go +18 -0
  147. data/tracks/haskell/exercises/forth/package.yaml +1 -1
  148. data/tracks/haskell/exercises/forth/test/Tests.hs +1 -4
  149. data/tracks/haskell/exercises/pascals-triangle/package.yaml +1 -1
  150. data/tracks/haskell/exercises/pascals-triangle/test/Tests.hs +22 -1
  151. data/tracks/java/POLICIES.md +3 -3
  152. data/tracks/java/config.json +21 -2
  153. data/tracks/java/exercises/atbash-cipher/.meta/src/reference/java/Atbash.java +12 -12
  154. data/tracks/java/exercises/protein-translation/.meta/src/reference/java/ProteinTranslator.java +47 -0
  155. data/tracks/java/exercises/protein-translation/.meta/version +1 -0
  156. data/tracks/java/exercises/protein-translation/README.md +58 -0
  157. data/tracks/java/exercises/protein-translation/build.gradle +18 -0
  158. data/tracks/java/exercises/protein-translation/src/main/java/ProteinTranslator.java +8 -0
  159. data/tracks/java/exercises/protein-translation/src/test/java/ProteinTranslatorTest.java +179 -0
  160. data/tracks/java/exercises/settings.gradle +1 -0
  161. data/tracks/javascript/.eslintignore +2 -2
  162. data/tracks/javascript/exercises/accumulate/example.js +1 -2
  163. data/tracks/javascript/exercises/grains/example.js +6 -3
  164. data/tracks/kotlin/exercises/beer-song/.meta/src/reference/kotlin/BeerSong.kt +3 -3
  165. data/tracks/kotlin/exercises/beer-song/.meta/version +1 -1
  166. data/tracks/kotlin/exercises/beer-song/README.md +1 -1
  167. data/tracks/kotlin/exercises/beer-song/src/test/kotlin/BeerSongTest.kt +6 -6
  168. data/tracks/kotlin/exercises/forth/.meta/version +1 -1
  169. data/tracks/kotlin/exercises/forth/src/test/kotlin/ForthEvaluatorTest.kt +0 -7
  170. data/tracks/kotlin/exercises/meetup/README.md +16 -12
  171. data/tracks/kotlin/exercises/nth-prime/.meta/src/reference/kotlin/Prime.kt +7 -2
  172. data/tracks/kotlin/exercises/nth-prime/.meta/version +1 -1
  173. data/tracks/kotlin/exercises/nth-prime/src/test/kotlin/PrimeTest.kt +10 -1
  174. data/tracks/kotlin/exercises/nucleotide-count/README.md +2 -2
  175. data/tracks/kotlin/exercises/pascals-triangle/.meta/src/reference/kotlin/PascalsTriangle.kt +1 -1
  176. data/tracks/kotlin/exercises/pascals-triangle/.meta/version +1 -1
  177. data/tracks/kotlin/exercises/pascals-triangle/src/test/kotlin/PascalsTriangleTest.kt +58 -1
  178. data/tracks/kotlin/exercises/sum-of-multiples/README.md +3 -3
  179. data/tracks/ocaml/exercises/forth/test.ml +1 -3
  180. data/tracks/ocaml/exercises/rectangles/example.ml +11 -11
  181. data/tracks/php/exercises/bob/example.php +2 -2
  182. data/tracks/purescript/config.json +3 -3
  183. data/tracks/python/config.json +34 -22
  184. data/tracks/python/exercises/alphametics/example.py +90 -34
  185. data/tracks/python/exercises/ocr-numbers/example.py +18 -21
  186. data/tracks/python/exercises/ocr-numbers/ocr_numbers.py +1 -5
  187. data/tracks/python/exercises/ocr-numbers/ocr_numbers_test.py +124 -106
  188. data/tracks/python/exercises/simple-linked-list/README.md +49 -0
  189. data/tracks/python/exercises/simple-linked-list/example.py +67 -0
  190. data/tracks/python/exercises/simple-linked-list/hints.md +10 -0
  191. data/tracks/python/exercises/simple-linked-list/simple_linked_list.py +33 -0
  192. data/tracks/python/exercises/simple-linked-list/simple_linked_list_test.py +112 -0
  193. data/tracks/rust/README.md +2 -0
  194. data/tracks/rust/bin/init_exercise.py +586 -0
  195. data/tracks/rust/config.json +20 -10
  196. data/tracks/rust/exercises/book-store/.gitignore +3 -0
  197. data/tracks/rust/exercises/book-store/Cargo-example.toml +7 -0
  198. data/tracks/rust/exercises/book-store/Cargo.toml +6 -0
  199. data/tracks/rust/exercises/book-store/README.md +107 -0
  200. data/tracks/rust/exercises/book-store/example.rs +187 -0
  201. data/tracks/rust/exercises/book-store/src/lib.rs +3 -0
  202. data/tracks/rust/exercises/book-store/tests/book-store.rs +130 -0
  203. data/tracks/sml/config.json +8 -8
  204. data/tracks/typescript/config.json +6 -6
  205. metadata +43 -46
  206. data/tracks/erlang/exercises/all-your-base/include/exercism.hrl +0 -11
  207. data/tracks/erlang/exercises/allergies/include/exercism.hrl +0 -11
  208. data/tracks/erlang/exercises/anagram/include/exercism.hrl +0 -11
  209. data/tracks/erlang/exercises/atbash-cipher/include/exercism.hrl +0 -11
  210. data/tracks/erlang/exercises/bank-account/include/exercism.hrl +0 -11
  211. data/tracks/erlang/exercises/beer-song/include/exercism.hrl +0 -11
  212. data/tracks/erlang/exercises/bob/include/exercism.hrl +0 -11
  213. data/tracks/erlang/exercises/circular-buffer/include/exercism.hrl +0 -11
  214. data/tracks/erlang/exercises/clock/include/exercism.hrl +0 -11
  215. data/tracks/erlang/exercises/collatz-conjecture/include/exercism.hrl +0 -11
  216. data/tracks/erlang/exercises/complex-numbers/include/exercism.hrl +0 -11
  217. data/tracks/erlang/exercises/custom-set/include/exercism.hrl +0 -11
  218. data/tracks/erlang/exercises/difference-of-squares/include/exercism.hrl +0 -11
  219. data/tracks/erlang/exercises/etl/include/exercism.hrl +0 -11
  220. data/tracks/erlang/exercises/gigasecond/include/exercism.hrl +0 -11
  221. data/tracks/erlang/exercises/grade-school/include/exercism.hrl +0 -11
  222. data/tracks/erlang/exercises/grains/include/exercism.hrl +0 -11
  223. data/tracks/erlang/exercises/hamming/include/exercism.hrl +0 -11
  224. data/tracks/erlang/exercises/hello-world/include/exercism.hrl +0 -11
  225. data/tracks/erlang/exercises/isogram/include/exercism.hrl +0 -11
  226. data/tracks/erlang/exercises/largest-series-product/include/exercism.hrl +0 -11
  227. data/tracks/erlang/exercises/leap/include/exercism.hrl +0 -11
  228. data/tracks/erlang/exercises/luhn/include/exercism.hrl +0 -11
  229. data/tracks/erlang/exercises/meetup/include/exercism.hrl +0 -11
  230. data/tracks/erlang/exercises/nucleotide-count/include/exercism.hrl +0 -11
  231. data/tracks/erlang/exercises/parallel-letter-frequency/include/exercism.hrl +0 -11
  232. data/tracks/erlang/exercises/phone-number/include/exercism.hrl +0 -11
  233. data/tracks/erlang/exercises/rna-transcription/include/exercism.hrl +0 -11
  234. data/tracks/erlang/exercises/robot-simulator/include/exercism.hrl +0 -11
  235. data/tracks/erlang/exercises/roman-numerals/include/exercism.hrl +0 -11
  236. data/tracks/erlang/exercises/rotational-cipher/include/exercism.hrl +0 -11
  237. data/tracks/erlang/exercises/scrabble-score/include/exercism.hrl +0 -11
  238. data/tracks/erlang/exercises/series/include/exercism.hrl +0 -11
  239. data/tracks/erlang/exercises/sieve/include/exercism.hrl +0 -11
  240. data/tracks/erlang/exercises/space-age/include/exercism.hrl +0 -11
  241. data/tracks/erlang/exercises/spiral-matrix/include/exercism.hrl +0 -11
  242. data/tracks/erlang/exercises/strain/include/exercism.hrl +0 -11
  243. data/tracks/erlang/exercises/sum-of-multiples/include/exercism.hrl +0 -11
  244. data/tracks/erlang/exercises/triangle/include/exercism.hrl +0 -11
  245. data/tracks/erlang/exercises/two-fer/include/exercism.hrl +0 -11
  246. data/tracks/erlang/exercises/word-count/include/exercism.hrl +0 -11
  247. data/tracks/erlang/exercises/zipper/include/exercism.hrl +0 -11
@@ -1,370 +1,371 @@
1
1
  -module(meetup_tests).
2
2
 
3
- -define(TESTED_MODULE, (sut(meetup))).
4
- -define(TEST_VERSION, 1).
5
- -include("exercism.hrl").
6
-
3
+ -include_lib("erl_exercism/include/exercism.hrl").
4
+ -include_lib("eunit/include/eunit.hrl").
7
5
 
8
6
  monteenth_of_may_2013_test() ->
9
7
  ?assertEqual({2013, 5, 13},
10
- ?TESTED_MODULE:schedule(2013, 5, monday, teenth)).
8
+ meetup:schedule(2013, 5, monday, teenth)).
11
9
 
12
10
  monteenth_of_august_2013_test() ->
13
11
  ?assertEqual({2013, 8, 19},
14
- ?TESTED_MODULE:schedule(2013, 8, monday, teenth)).
12
+ meetup:schedule(2013, 8, monday, teenth)).
15
13
 
16
14
  monteenth_of_september_2013_test() ->
17
15
  ?assertEqual({2013, 9, 16},
18
- ?TESTED_MODULE:schedule(2013, 9, monday, teenth)).
16
+ meetup:schedule(2013, 9, monday, teenth)).
19
17
 
20
18
  tuesteenth_of_march_2013_test() ->
21
19
  ?assertEqual({2013, 3, 19},
22
- ?TESTED_MODULE:schedule(2013, 3, tuesday, teenth)).
20
+ meetup:schedule(2013, 3, tuesday, teenth)).
23
21
 
24
22
  tuesteenth_of_april_2013_test() ->
25
23
  ?assertEqual({2013, 4, 16},
26
- ?TESTED_MODULE:schedule(2013, 4, tuesday, teenth)).
24
+ meetup:schedule(2013, 4, tuesday, teenth)).
27
25
 
28
26
  tuesteenth_of_august_2013_test() ->
29
27
  ?assertEqual({2013, 8, 13},
30
- ?TESTED_MODULE:schedule(2013, 8, tuesday, teenth)).
28
+ meetup:schedule(2013, 8, tuesday, teenth)).
31
29
 
32
30
  wednesteenth_of_january_2013_test() ->
33
31
  ?assertEqual({2013, 1, 16},
34
- ?TESTED_MODULE:schedule(2013, 1, wednesday, teenth)).
32
+ meetup:schedule(2013, 1, wednesday, teenth)).
35
33
 
36
34
  wednesteenth_of_february_2013_test() ->
37
35
  ?assertEqual({2013, 2, 13},
38
- ?TESTED_MODULE:schedule(2013, 2, wednesday, teenth)).
36
+ meetup:schedule(2013, 2, wednesday, teenth)).
39
37
 
40
38
  wednesteenth_of_june_2013_test() ->
41
39
  ?assertEqual({2013, 6, 19},
42
- ?TESTED_MODULE:schedule(2013, 6, wednesday, teenth)).
40
+ meetup:schedule(2013, 6, wednesday, teenth)).
43
41
 
44
42
  thursteenth_of_may_2013_test() ->
45
43
  ?assertEqual({2013, 5, 16},
46
- ?TESTED_MODULE:schedule(2013, 5, thursday, teenth)).
44
+ meetup:schedule(2013, 5, thursday, teenth)).
47
45
 
48
46
  thursteenth_of_june_2013_test() ->
49
47
  ?assertEqual({2013, 6, 13},
50
- ?TESTED_MODULE:schedule(2013, 6, thursday, teenth)).
48
+ meetup:schedule(2013, 6, thursday, teenth)).
51
49
 
52
50
  thursteenth_of_september_2013_test() ->
53
51
  ?assertEqual({2013, 9, 19},
54
- ?TESTED_MODULE:schedule(2013, 9, thursday, teenth)).
52
+ meetup:schedule(2013, 9, thursday, teenth)).
55
53
 
56
54
  friteenth_of_april_2013_test() ->
57
55
  ?assertEqual({2013, 4, 19},
58
- ?TESTED_MODULE:schedule(2013, 4, friday, teenth)).
56
+ meetup:schedule(2013, 4, friday, teenth)).
59
57
 
60
58
  friteenth_of_august_2013_test() ->
61
59
  ?assertEqual({2013, 8, 16},
62
- ?TESTED_MODULE:schedule(2013, 8, friday, teenth)).
60
+ meetup:schedule(2013, 8, friday, teenth)).
63
61
 
64
62
  friteenth_of_september_2013_test() ->
65
63
  ?assertEqual({2013, 9, 13},
66
- ?TESTED_MODULE:schedule(2013, 9, friday, teenth)).
64
+ meetup:schedule(2013, 9, friday, teenth)).
67
65
 
68
66
  saturteenth_of_february_2013_test() ->
69
67
  ?assertEqual({2013, 2, 16},
70
- ?TESTED_MODULE:schedule(2013, 2, saturday, teenth)).
68
+ meetup:schedule(2013, 2, saturday, teenth)).
71
69
 
72
70
  saturteenth_of_april_2013_test() ->
73
71
  ?assertEqual({2013, 4, 13},
74
- ?TESTED_MODULE:schedule(2013, 4, saturday, teenth)).
72
+ meetup:schedule(2013, 4, saturday, teenth)).
75
73
 
76
74
  saturteenth_of_october_2013_test() ->
77
75
  ?assertEqual({2013, 10, 19},
78
- ?TESTED_MODULE:schedule(2013, 10, saturday, teenth)).
76
+ meetup:schedule(2013, 10, saturday, teenth)).
79
77
 
80
78
  sunteenth_of_map_2013_test() ->
81
79
  ?assertEqual({2013, 5, 19},
82
- ?TESTED_MODULE:schedule(2013, 5, sunday, teenth)).
80
+ meetup:schedule(2013, 5, sunday, teenth)).
83
81
 
84
82
  sunteenth_of_june_2013_test() ->
85
83
  ?assertEqual({2013, 6, 16},
86
- ?TESTED_MODULE:schedule(2013, 6, sunday, teenth)).
84
+ meetup:schedule(2013, 6, sunday, teenth)).
87
85
 
88
86
  sunteenth_of_october_2013_test() ->
89
87
  ?assertEqual({2013, 10, 13},
90
- ?TESTED_MODULE:schedule(2013, 10, sunday, teenth)).
88
+ meetup:schedule(2013, 10, sunday, teenth)).
91
89
 
92
90
  first_monday_of_march_2013_test() ->
93
91
  ?assertEqual({2013, 3, 4},
94
- ?TESTED_MODULE:schedule(2013, 3, monday, first)).
92
+ meetup:schedule(2013, 3, monday, first)).
95
93
 
96
94
  first_monday_of_april_2013_test() ->
97
95
  ?assertEqual({2013, 4, 1},
98
- ?TESTED_MODULE:schedule(2013, 4, monday, first)).
96
+ meetup:schedule(2013, 4, monday, first)).
99
97
 
100
98
  first_tuesday_of_may_2013_test() ->
101
99
  ?assertEqual({2013, 5, 7},
102
- ?TESTED_MODULE:schedule(2013, 5, tuesday, first)).
100
+ meetup:schedule(2013, 5, tuesday, first)).
103
101
 
104
102
  first_tuesday_of_june_2013_test() ->
105
103
  ?assertEqual({2013, 6, 4},
106
- ?TESTED_MODULE:schedule(2013, 6, tuesday, first)).
104
+ meetup:schedule(2013, 6, tuesday, first)).
107
105
 
108
106
  first_wednesday_of_july_2013_test() ->
109
107
  ?assertEqual({2013, 7, 3},
110
- ?TESTED_MODULE:schedule(2013, 7, wednesday, first)).
108
+ meetup:schedule(2013, 7, wednesday, first)).
111
109
 
112
110
  first_wednesday_of_august_2013_test() ->
113
111
  ?assertEqual({2013, 8, 7},
114
- ?TESTED_MODULE:schedule(2013, 8, wednesday, first)).
112
+ meetup:schedule(2013, 8, wednesday, first)).
115
113
 
116
114
  first_thursday_of_september_2013_test() ->
117
115
  ?assertEqual({2013, 9, 5},
118
- ?TESTED_MODULE:schedule(2013, 9, thursday, first)).
116
+ meetup:schedule(2013, 9, thursday, first)).
119
117
 
120
118
  first_thursday_of_october_2013_test() ->
121
119
  ?assertEqual({2013, 10, 3},
122
- ?TESTED_MODULE:schedule(2013, 10, thursday, first)).
120
+ meetup:schedule(2013, 10, thursday, first)).
123
121
 
124
122
  first_friday_of_november_2013_test() ->
125
123
  ?assertEqual({2013, 11, 1},
126
- ?TESTED_MODULE:schedule(2013, 11, friday, first)).
124
+ meetup:schedule(2013, 11, friday, first)).
127
125
 
128
126
  first_friday_of_december_2013_test() ->
129
127
  ?assertEqual({2013, 12, 6},
130
- ?TESTED_MODULE:schedule(2013, 12, friday, first)).
128
+ meetup:schedule(2013, 12, friday, first)).
131
129
 
132
130
  first_saturday_of_january_2013_test() ->
133
131
  ?assertEqual({2013, 1, 5},
134
- ?TESTED_MODULE:schedule(2013, 1, saturday, first)).
132
+ meetup:schedule(2013, 1, saturday, first)).
135
133
 
136
134
  first_saturday_of_february_2013_test() ->
137
135
  ?assertEqual({2013, 2, 2},
138
- ?TESTED_MODULE:schedule(2013, 2, saturday, first)).
136
+ meetup:schedule(2013, 2, saturday, first)).
139
137
 
140
138
  first_sunday_of_march_2013_test() ->
141
139
  ?assertEqual({2013, 3, 3},
142
- ?TESTED_MODULE:schedule(2013, 3, sunday, first)).
140
+ meetup:schedule(2013, 3, sunday, first)).
143
141
 
144
142
  first_sunday_of_april_2013_test() ->
145
143
  ?assertEqual({2013, 4, 7},
146
- ?TESTED_MODULE:schedule(2013, 4, sunday, first)).
144
+ meetup:schedule(2013, 4, sunday, first)).
147
145
 
148
146
  second_monday_of_march_2013_test() ->
149
147
  ?assertEqual({2013, 3, 11},
150
- ?TESTED_MODULE:schedule(2013, 3, monday, second)).
148
+ meetup:schedule(2013, 3, monday, second)).
151
149
 
152
150
  second_monday_of_april_2013_test() ->
153
151
  ?assertEqual({2013, 4, 8},
154
- ?TESTED_MODULE:schedule(2013, 4, monday, second)).
152
+ meetup:schedule(2013, 4, monday, second)).
155
153
 
156
154
  second_tuesday_of_may_2013_test() ->
157
155
  ?assertEqual({2013, 5, 14},
158
- ?TESTED_MODULE:schedule(2013, 5, tuesday, second)).
156
+ meetup:schedule(2013, 5, tuesday, second)).
159
157
 
160
158
  second_tuesday_of_june_2013_test() ->
161
159
  ?assertEqual({2013, 6, 11},
162
- ?TESTED_MODULE:schedule(2013, 6, tuesday, second)).
160
+ meetup:schedule(2013, 6, tuesday, second)).
163
161
 
164
162
  second_wednesday_of_july_2013_test() ->
165
163
  ?assertEqual({2013, 7, 10},
166
- ?TESTED_MODULE:schedule(2013, 7, wednesday, second)).
164
+ meetup:schedule(2013, 7, wednesday, second)).
167
165
 
168
166
  second_wednesday_of_august_2013_test() ->
169
167
  ?assertEqual({2013, 8, 14},
170
- ?TESTED_MODULE:schedule(2013, 8, wednesday, second)).
168
+ meetup:schedule(2013, 8, wednesday, second)).
171
169
 
172
170
  second_thursday_of_september_2013_test() ->
173
171
  ?assertEqual({2013, 9, 12},
174
- ?TESTED_MODULE:schedule(2013, 9, thursday, second)).
172
+ meetup:schedule(2013, 9, thursday, second)).
175
173
 
176
174
  second_thursday_of_october_2013_test() ->
177
175
  ?assertEqual({2013, 10, 10},
178
- ?TESTED_MODULE:schedule(2013, 10, thursday, second)).
176
+ meetup:schedule(2013, 10, thursday, second)).
179
177
 
180
178
  second_friday_of_november_2013_test() ->
181
179
  ?assertEqual({2013, 11, 8},
182
- ?TESTED_MODULE:schedule(2013, 11, friday, second)).
180
+ meetup:schedule(2013, 11, friday, second)).
183
181
 
184
182
  second_friday_of_december_2013_test() ->
185
183
  ?assertEqual({2013, 12, 13},
186
- ?TESTED_MODULE:schedule(2013, 12, friday, second)).
184
+ meetup:schedule(2013, 12, friday, second)).
187
185
 
188
186
  second_saturday_of_january_2013_test() ->
189
187
  ?assertEqual({2013, 1, 12},
190
- ?TESTED_MODULE:schedule(2013, 1, saturday, second)).
188
+ meetup:schedule(2013, 1, saturday, second)).
191
189
 
192
190
  second_saturday_of_february_2013_test() ->
193
191
  ?assertEqual({2013, 2, 9},
194
- ?TESTED_MODULE:schedule(2013, 2, saturday, second)).
192
+ meetup:schedule(2013, 2, saturday, second)).
195
193
 
196
194
  second_sunday_of_march_2013_test() ->
197
195
  ?assertEqual({2013, 3, 10},
198
- ?TESTED_MODULE:schedule(2013, 3, sunday, second)).
196
+ meetup:schedule(2013, 3, sunday, second)).
199
197
 
200
198
  second_sunday_of_april_2013_test() ->
201
199
  ?assertEqual({2013, 4, 14},
202
- ?TESTED_MODULE:schedule(2013, 4, sunday, second)).
200
+ meetup:schedule(2013, 4, sunday, second)).
203
201
 
204
202
  third_monday_of_march_2013_test() ->
205
203
  ?assertEqual({2013, 3, 18},
206
- ?TESTED_MODULE:schedule(2013, 3, monday, third)).
204
+ meetup:schedule(2013, 3, monday, third)).
207
205
 
208
206
  third_monday_of_april_2013_test() ->
209
207
  ?assertEqual({2013, 4, 15},
210
- ?TESTED_MODULE:schedule(2013, 4, monday, third)).
208
+ meetup:schedule(2013, 4, monday, third)).
211
209
 
212
210
  third_tuesday_of_may_2013_test() ->
213
211
  ?assertEqual({2013, 5, 21},
214
- ?TESTED_MODULE:schedule(2013, 5, tuesday, third)).
212
+ meetup:schedule(2013, 5, tuesday, third)).
215
213
 
216
214
  third_tuesday_of_june_2013_test() ->
217
215
  ?assertEqual({2013, 6, 18},
218
- ?TESTED_MODULE:schedule(2013, 6, tuesday, third)).
216
+ meetup:schedule(2013, 6, tuesday, third)).
219
217
 
220
218
  third_wednesday_of_july_2013_test() ->
221
219
  ?assertEqual({2013, 7, 17},
222
- ?TESTED_MODULE:schedule(2013, 7, wednesday, third)).
220
+ meetup:schedule(2013, 7, wednesday, third)).
223
221
 
224
222
  third_wednesday_of_august_2013_test() ->
225
223
  ?assertEqual({2013, 8, 21},
226
- ?TESTED_MODULE:schedule(2013, 8, wednesday, third)).
224
+ meetup:schedule(2013, 8, wednesday, third)).
227
225
 
228
226
  third_thursday_of_september_2013_test() ->
229
227
  ?assertEqual({2013, 9, 19},
230
- ?TESTED_MODULE:schedule(2013, 9, thursday, third)).
228
+ meetup:schedule(2013, 9, thursday, third)).
231
229
 
232
230
  third_thursday_of_october_2013_test() ->
233
231
  ?assertEqual({2013, 10, 17},
234
- ?TESTED_MODULE:schedule(2013, 10, thursday, third)).
232
+ meetup:schedule(2013, 10, thursday, third)).
235
233
 
236
234
  third_friday_of_november_2013_test() ->
237
235
  ?assertEqual({2013, 11, 15},
238
- ?TESTED_MODULE:schedule(2013, 11, friday, third)).
236
+ meetup:schedule(2013, 11, friday, third)).
239
237
 
240
238
  third_friday_of_december_2013_test() ->
241
239
  ?assertEqual({2013, 12, 20},
242
- ?TESTED_MODULE:schedule(2013, 12, friday, third)).
240
+ meetup:schedule(2013, 12, friday, third)).
243
241
 
244
242
  third_saturday_of_january_2013_test() ->
245
243
  ?assertEqual({2013, 1, 19},
246
- ?TESTED_MODULE:schedule(2013, 1, saturday, third)).
244
+ meetup:schedule(2013, 1, saturday, third)).
247
245
 
248
246
  third_saturday_of_february_2013_test() ->
249
247
  ?assertEqual({2013, 2, 16},
250
- ?TESTED_MODULE:schedule(2013, 2, saturday, third)).
248
+ meetup:schedule(2013, 2, saturday, third)).
251
249
 
252
250
  third_sunday_of_march_2013_test() ->
253
251
  ?assertEqual({2013, 3, 17},
254
- ?TESTED_MODULE:schedule(2013, 3, sunday, third)).
252
+ meetup:schedule(2013, 3, sunday, third)).
255
253
 
256
254
  third_sunday_of_april_2013_test() ->
257
255
  ?assertEqual({2013, 4, 21},
258
- ?TESTED_MODULE:schedule(2013, 4, sunday, third)).
256
+ meetup:schedule(2013, 4, sunday, third)).
259
257
 
260
258
  fourth_monday_of_march_2013_test() ->
261
259
  ?assertEqual({2013, 3, 25},
262
- ?TESTED_MODULE:schedule(2013, 3, monday, fourth)).
260
+ meetup:schedule(2013, 3, monday, fourth)).
263
261
 
264
262
  fourth_monday_of_april_2013_test() ->
265
263
  ?assertEqual({2013, 4, 22},
266
- ?TESTED_MODULE:schedule(2013, 4, monday, fourth)).
264
+ meetup:schedule(2013, 4, monday, fourth)).
267
265
 
268
266
  fourth_tuesday_of_may_2013_test() ->
269
267
  ?assertEqual({2013, 5, 28},
270
- ?TESTED_MODULE:schedule(2013, 5, tuesday, fourth)).
268
+ meetup:schedule(2013, 5, tuesday, fourth)).
271
269
 
272
270
  fourth_tuesday_of_june_2013_test() ->
273
271
  ?assertEqual({2013, 6, 25},
274
- ?TESTED_MODULE:schedule(2013, 6, tuesday, fourth)).
272
+ meetup:schedule(2013, 6, tuesday, fourth)).
275
273
 
276
274
  fourth_wednesday_of_july_2013_test() ->
277
275
  ?assertEqual({2013, 7, 24},
278
- ?TESTED_MODULE:schedule(2013, 7, wednesday, fourth)).
276
+ meetup:schedule(2013, 7, wednesday, fourth)).
279
277
 
280
278
  fourth_wednesday_of_august_2013_test() ->
281
279
  ?assertEqual({2013, 8, 28},
282
- ?TESTED_MODULE:schedule(2013, 8, wednesday, fourth)).
280
+ meetup:schedule(2013, 8, wednesday, fourth)).
283
281
 
284
282
  fourth_thursday_of_september_2013_test() ->
285
283
  ?assertEqual({2013, 9, 26},
286
- ?TESTED_MODULE:schedule(2013, 9, thursday, fourth)).
284
+ meetup:schedule(2013, 9, thursday, fourth)).
287
285
 
288
286
  fourth_thursday_of_october_2013_test() ->
289
287
  ?assertEqual({2013, 10, 24},
290
- ?TESTED_MODULE:schedule(2013, 10, thursday, fourth)).
288
+ meetup:schedule(2013, 10, thursday, fourth)).
291
289
 
292
290
  fourth_friday_of_november_2013_test() ->
293
291
  ?assertEqual({2013, 11, 22},
294
- ?TESTED_MODULE:schedule(2013, 11, friday, fourth)).
292
+ meetup:schedule(2013, 11, friday, fourth)).
295
293
 
296
294
  fourth_friday_of_december_2013_test() ->
297
295
  ?assertEqual({2013, 12, 27},
298
- ?TESTED_MODULE:schedule(2013, 12, friday, fourth)).
296
+ meetup:schedule(2013, 12, friday, fourth)).
299
297
 
300
298
  fourth_saturday_of_january_2013_test() ->
301
299
  ?assertEqual({2013, 1, 26},
302
- ?TESTED_MODULE:schedule(2013, 1, saturday, fourth)).
300
+ meetup:schedule(2013, 1, saturday, fourth)).
303
301
 
304
302
  fourth_saturday_of_february_2013_test() ->
305
303
  ?assertEqual({2013, 2, 23},
306
- ?TESTED_MODULE:schedule(2013, 2, saturday, fourth)).
304
+ meetup:schedule(2013, 2, saturday, fourth)).
307
305
 
308
306
  fourth_sunday_of_march_2013_test() ->
309
307
  ?assertEqual({2013, 3, 24},
310
- ?TESTED_MODULE:schedule(2013, 3, sunday, fourth)).
308
+ meetup:schedule(2013, 3, sunday, fourth)).
311
309
 
312
310
  fourth_sunday_of_april_2013_test() ->
313
311
  ?assertEqual({2013, 4, 28},
314
- ?TESTED_MODULE:schedule(2013, 4, sunday, fourth)).
312
+ meetup:schedule(2013, 4, sunday, fourth)).
315
313
 
316
314
  last_monday_of_march_2013_test() ->
317
315
  ?assertEqual({2013, 3, 25},
318
- ?TESTED_MODULE:schedule(2013, 3, monday, last)).
316
+ meetup:schedule(2013, 3, monday, last)).
319
317
 
320
318
  last_monday_of_april_2013_test() ->
321
319
  ?assertEqual({2013, 4, 29},
322
- ?TESTED_MODULE:schedule(2013, 4, monday, last)).
320
+ meetup:schedule(2013, 4, monday, last)).
323
321
 
324
322
  last_tuesday_of_may_2013_test() ->
325
323
  ?assertEqual({2013, 5, 28},
326
- ?TESTED_MODULE:schedule(2013, 5, tuesday, last)).
324
+ meetup:schedule(2013, 5, tuesday, last)).
327
325
 
328
326
  last_tuesday_of_june_2013_test() ->
329
327
  ?assertEqual({2013, 6, 25},
330
- ?TESTED_MODULE:schedule(2013, 6, tuesday, last)).
328
+ meetup:schedule(2013, 6, tuesday, last)).
331
329
 
332
330
  last_wednesday_of_july_2013_test() ->
333
331
  ?assertEqual({2013, 7, 31},
334
- ?TESTED_MODULE:schedule(2013, 7, wednesday, last)).
332
+ meetup:schedule(2013, 7, wednesday, last)).
335
333
 
336
334
  last_wednesday_of_august_2013_test() ->
337
335
  ?assertEqual({2013, 8, 28},
338
- ?TESTED_MODULE:schedule(2013, 8, wednesday, last)).
336
+ meetup:schedule(2013, 8, wednesday, last)).
339
337
 
340
338
  last_thursday_of_september_2013_test() ->
341
339
  ?assertEqual({2013, 9, 26},
342
- ?TESTED_MODULE:schedule(2013, 9, thursday, last)).
340
+ meetup:schedule(2013, 9, thursday, last)).
343
341
 
344
342
  last_thursday_of_october_2013_test() ->
345
343
  ?assertEqual({2013, 10, 31},
346
- ?TESTED_MODULE:schedule(2013, 10, thursday, last)).
344
+ meetup:schedule(2013, 10, thursday, last)).
347
345
 
348
346
  last_friday_of_november_2013_test() ->
349
347
  ?assertEqual({2013, 11, 29},
350
- ?TESTED_MODULE:schedule(2013, 11, friday, last)).
348
+ meetup:schedule(2013, 11, friday, last)).
351
349
 
352
350
  last_friday_of_december_2013_test() ->
353
351
  ?assertEqual({2013, 12, 27},
354
- ?TESTED_MODULE:schedule(2013, 12, friday, last)).
352
+ meetup:schedule(2013, 12, friday, last)).
355
353
 
356
354
  last_saturday_of_january_2013_test() ->
357
355
  ?assertEqual({2013, 1, 26},
358
- ?TESTED_MODULE:schedule(2013, 1, saturday, last)).
356
+ meetup:schedule(2013, 1, saturday, last)).
359
357
 
360
358
  last_saturday_of_february_2013_test() ->
361
359
  ?assertEqual({2013, 2, 23},
362
- ?TESTED_MODULE:schedule(2013, 2, saturday, last)).
360
+ meetup:schedule(2013, 2, saturday, last)).
363
361
 
364
362
  last_sunday_of_march_2013_test() ->
365
363
  ?assertEqual({2013, 3, 31},
366
- ?TESTED_MODULE:schedule(2013, 3, sunday, last)).
364
+ meetup:schedule(2013, 3, sunday, last)).
367
365
 
368
366
  last_sunday_of_april_2013_test() ->
369
367
  ?assertEqual({2013, 4, 28},
370
- ?TESTED_MODULE:schedule(2013, 4, sunday, last)).
368
+ meetup:schedule(2013, 4, sunday, last)).
369
+
370
+ version_test() ->
371
+ ?assertMatch(1, meetup:test_version()).
@@ -1,7 +1,7 @@
1
1
  %% Erlang compiler options
2
2
  {erl_opts, [debug_info]}.
3
3
 
4
- {deps, []}.
4
+ {deps, [{erl_exercism, "0.1.1"}]}.
5
5
 
6
6
  {dialyzer, [
7
7
  {warnings, [underspecs, no_return]},
@@ -1,30 +1,31 @@
1
1
  -module(nucleotide_count_tests).
2
2
 
3
- -define(TESTED_MODULE, (sut(nucleotide_count))).
4
- -define(TEST_VERSION, 1).
5
- -include("exercism.hrl").
6
-
3
+ -include_lib("erl_exercism/include/exercism.hrl").
4
+ -include_lib("eunit/include/eunit.hrl").
7
5
 
8
6
  empty_dna_string_has_no_adenine_test() ->
9
- ?assertEqual(0, ?TESTED_MODULE:count("", "A")).
7
+ ?assertEqual(0, nucleotide_count:count("", "A")).
10
8
 
11
9
  repetitive_cytosine_gets_counted_test() ->
12
- ?assertEqual(5, ?TESTED_MODULE:count("CCCCC", "C")).
10
+ ?assertEqual(5, nucleotide_count:count("CCCCC", "C")).
13
11
 
14
12
  counts_only_thymine_test() ->
15
- ?assertEqual(1, ?TESTED_MODULE:count("GGGGGTAACCCGG", "T")).
13
+ ?assertEqual(1, nucleotide_count:count("GGGGGTAACCCGG", "T")).
16
14
 
17
15
  validates_nucleotides_test() ->
18
- ?assertException(error, "Invalid nucleotide", ?TESTED_MODULE:count("GACT", "X")).
16
+ ?assertException(error, "Invalid nucleotide", nucleotide_count:count("GACT", "X")).
19
17
 
20
18
  empty_dna_string_has_no_nucleotides_test() ->
21
- ?assertEqual([{"A", 0}, {"T", 0}, {"C", 0}, {"G", 0}], ?TESTED_MODULE:nucleotide_counts("")).
19
+ ?assertEqual([{"A", 0}, {"T", 0}, {"C", 0}, {"G", 0}], nucleotide_count:nucleotide_counts("")).
22
20
 
23
21
  repetitive_sequence_has_only_guanine_test() ->
24
- ?assertEqual([{"A", 0}, {"T", 0}, {"C", 0}, {"G", 8}], ?TESTED_MODULE:nucleotide_counts("GGGGGGGG")).
22
+ ?assertEqual([{"A", 0}, {"T", 0}, {"C", 0}, {"G", 8}], nucleotide_count:nucleotide_counts("GGGGGGGG")).
25
23
 
26
24
  counts_all_nucleotides_test() ->
27
25
  ?assertEqual(
28
26
  [{"A", 20}, {"T", 21}, {"C", 12}, {"G", 17}],
29
- ?TESTED_MODULE:nucleotide_counts(
27
+ nucleotide_count:nucleotide_counts(
30
28
  "AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC")).
29
+
30
+ version_test() ->
31
+ ?assertMatch(1, nucleotide_count:test_version()).
@@ -0,0 +1,60 @@
1
+ # Pangram
2
+
3
+ Determine if a sentence is a pangram.
4
+ A pangram (Greek: παν γράμμα, pan gramma, "every letter") is a sentence using
5
+ every letter of the alphabet at least once.
6
+ The best known English pangram is:
7
+ > The quick brown fox jumps over the lazy dog.
8
+
9
+ The alphabet used consists of ASCII letters `a` to `z`, inclusive, and is case
10
+ insensitive. Input will not contain non-ASCII symbols.
11
+
12
+ ## Source
13
+
14
+ Wikipedia [https://en.wikipedia.org/wiki/Pangram](https://en.wikipedia.org/wiki/Pangram)
15
+
16
+ ## Running tests
17
+
18
+ In order to run the tests, issue the following command from the exercise
19
+ directory:
20
+
21
+ For running the tests provided, `rebar3` is used as it is the official build and
22
+ dependency management tool for erlang now. Please refer to [the tracks installation
23
+ instructions](http://exercism.io/languages/erlang/installation) on how to do that.
24
+
25
+ In order to run the tests, you can issue the following command from the exercise
26
+ directory.
27
+
28
+ ```bash
29
+ $ rebar3 eunit
30
+ ```
31
+
32
+ ### Test versioning
33
+
34
+ Each problem defines a macro `TEST_VERSION` in the test file and
35
+ verifies that the solution defines and exports a function `test_version`
36
+ returning that same value.
37
+
38
+ To make tests pass, add the following to your solution:
39
+
40
+ ```erlang
41
+ -export([test_version/0]).
42
+
43
+ test_version() ->
44
+ 1.
45
+ ```
46
+
47
+ The benefit of this is that reviewers can see against which test version
48
+ an iteration was written if, for example, a previously posted solution
49
+ does not solve the current problem or passes current tests.
50
+
51
+ ## Questions?
52
+
53
+ For detailed information about the Erlang track, please refer to the
54
+ [help page](http://exercism.io/languages/erlang) on the Exercism site.
55
+ This covers the basic information on setting up the development
56
+ environment expected by the exercises.
57
+
58
+ ## Submitting Incomplete Solutions
59
+
60
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,11 @@
1
+ -module(example).
2
+
3
+ -export([is_pangram/1, test_version/0]).
4
+
5
+ is_pangram(Sentence) ->
6
+ Alpha = "abcdefghijklmnopqrstuvwxyz",
7
+ Lower = string:to_lower(Sentence),
8
+
9
+ lists:all(fun (A) -> lists:any(fun (L) -> A == L end, Lower) end, Alpha).
10
+
11
+ test_version() -> 1.
@@ -0,0 +1,9 @@
1
+ {application, pangram,
2
+ [{description, "exercism.io - pangram"},
3
+ {vsn, "0.0.1"},
4
+ {modules, []},
5
+ {registered, []},
6
+ {applications, [kernel,
7
+ stdlib]},
8
+ {env, []}
9
+ ]}.
@@ -0,0 +1,8 @@
1
+ -module(pangram).
2
+
3
+ -export([is_pangram/1, test_version/0]).
4
+
5
+ is_pangram(Sentence) ->
6
+ undefined.
7
+
8
+ test_version() -> 1.
@@ -0,0 +1,38 @@
1
+ -module(pangram_tests).
2
+
3
+ -define(TESTED_MODULE, (sut(pangram))).
4
+ -define(TEST_VERSION, 1).
5
+ -include("exercism.hrl").
6
+
7
+
8
+ % test cases adapted from `x-common//canonical-data.json` @ version: 1.3.0
9
+
10
+ empty_sentence_test() ->
11
+ ?assertNot(?TESTED_MODULE:is_pangram("")).
12
+
13
+ perfect_lower_case_pangram_test() ->
14
+ ?assert(?TESTED_MODULE:is_pangram("abcdefghijklmnopqrstuvwxyz")).
15
+
16
+ pangram_with_only_lower_case_test() ->
17
+ ?assert(?TESTED_MODULE:is_pangram("the quick brown fox jumps over the lazy dog")).
18
+
19
+ missing_character_x_test() ->
20
+ ?assertNot(?TESTED_MODULE:is_pangram("a quick movement of the enemy will jeopardize five gunboats")).
21
+
22
+ missing_character_h_test() ->
23
+ ?assertNot(?TESTED_MODULE:is_pangram("five boxing wizards jump quickly at it")).
24
+
25
+ pangram_with_underscores_test() ->
26
+ ?assert(?TESTED_MODULE:is_pangram("the_quick_brown_fox_jumps_over_the_lazy_dog")).
27
+
28
+ pangram_with_numbers_test() ->
29
+ ?assert(?TESTED_MODULE:is_pangram("the 1 quick brown fox jumps over the 2 lazy dogs")).
30
+
31
+ missing_letters_replaced_by_numbers_test() ->
32
+ ?assertNot(?TESTED_MODULE:is_pangram("7h3 qu1ck brown fox jumps ov3r 7h3 lazy dog")).
33
+
34
+ pangram_with_mixed_case_and_punctuation_test() ->
35
+ ?assert(?TESTED_MODULE:is_pangram("\"Five quacking Zephyrs jolt my wax bed.\"")).
36
+
37
+ upper_and_lower_case_characters_are_not_counted_separately_test() ->
38
+ ?assertNot(?TESTED_MODULE:is_pangram("the quick brown fox jumps over with lazy FX")).
@@ -1,7 +1,7 @@
1
1
  %% Erlang compiler options
2
2
  {erl_opts, [debug_info]}.
3
3
 
4
- {deps, []}.
4
+ {deps, [{erl_exercism, "0.1.1"}]}.
5
5
 
6
6
  {dialyzer, [
7
7
  {warnings, [underspecs, no_return]},