trackler 2.2.1.62 → 2.2.1.63

Sign up to get free protection for your applications and to get access to all the features.
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]},