trackler 1.0.0 → 1.0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +7 -0
- data/CHANGELOG.md +9 -1
- data/README.md +10 -0
- data/common/CONTRIBUTING.md +50 -2
- data/common/exercises/alphametics/canonical-data.json +10 -10
- data/common/exercises/markdown/canonical-data.json +4 -4
- data/common/exercises/pov/canonical-data.json +356 -0
- data/lib/trackler/version.rb +1 -1
- data/trackler.gemspec +1 -2
- data/tracks/c/config.json +11 -1
- data/tracks/c/exercises/binary-search/makefile +16 -0
- data/tracks/c/exercises/binary-search/src/example.c +21 -0
- data/tracks/c/exercises/binary-search/src/example.h +8 -0
- data/tracks/c/exercises/binary-search/test/test_binary_search.c +99 -0
- data/tracks/c/exercises/binary-search/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/binary-search/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/binary-search/test/vendor/unity_internals.h +701 -0
- data/tracks/clojure/config.json +3 -2
- data/tracks/clojure/exercises/bank-account/project.clj +4 -0
- data/tracks/clojure/exercises/bank-account/src/example.clj +17 -0
- data/tracks/clojure/exercises/bank-account/test/bank_account_test.clj +44 -0
- data/tracks/clojure/exercises/isogram/project.clj +4 -0
- data/tracks/clojure/exercises/isogram/src/example.clj +5 -0
- data/tracks/clojure/exercises/isogram/test/isogram_test.clj +17 -0
- data/tracks/csharp/config.json +27 -87
- data/tracks/csharp/exercises/exercises.csproj +265 -1
- data/tracks/csharp/exercises/grep/Example.cs +114 -0
- data/tracks/csharp/exercises/grep/GrepTest.cs +376 -0
- data/tracks/csharp/exercises/paket.references +2 -1
- data/tracks/csharp/exercises/poker/Example.cs +96 -0
- data/tracks/csharp/exercises/poker/PokerTest.cs +171 -0
- data/tracks/csharp/exercises/sgf-parsing/Example.cs +61 -0
- data/tracks/csharp/exercises/sgf-parsing/SgfParsing.cs +13 -0
- data/tracks/csharp/exercises/sgf-parsing/SgfParsingTest.cs +158 -0
- data/tracks/csharp/paket.dependencies +2 -1
- data/tracks/csharp/paket.lock +72 -0
- data/tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js +1 -1
- data/tracks/elisp/config.json +6 -1
- data/tracks/elisp/exercises/etl/etl-test.el +90 -0
- data/tracks/elisp/exercises/etl/etl.el +9 -0
- data/tracks/elisp/exercises/etl/example.el +22 -0
- data/tracks/elisp/exercises/nucleotide-count/example.el +19 -0
- data/tracks/elisp/exercises/nucleotide-count/nucleotide-count-test.el +34 -0
- data/tracks/elisp/exercises/nucleotide-count/nucleotide-count.el +9 -0
- data/tracks/elisp/exercises/perfect-numbers/example.el +28 -0
- data/tracks/elisp/exercises/perfect-numbers/perfect-numbers-test.el +24 -0
- data/tracks/elisp/exercises/perfect-numbers/perfect-numbers.el +10 -0
- data/tracks/elisp/exercises/roman-numerals/example.el +36 -0
- data/tracks/elisp/exercises/roman-numerals/roman-numerals-test.el +30 -0
- data/tracks/elisp/exercises/roman-numerals/roman-numerals.el +10 -0
- data/tracks/elisp/exercises/word-count/example.el +18 -0
- data/tracks/elisp/exercises/word-count/word-count-test.el +64 -0
- data/tracks/elisp/exercises/word-count/word-count.el +9 -0
- data/tracks/elixir/README.md +4 -4
- data/tracks/elixir/SETUP.md +3 -3
- data/tracks/elixir/docs/TESTS.md +3 -3
- data/tracks/elixir/exercises/accumulate/accumulate_test.exs +7 -7
- data/tracks/elixir/exercises/acronym/acronym_test.exs +5 -5
- data/tracks/elixir/exercises/allergies/allergies_test.exs +13 -13
- data/tracks/elixir/exercises/anagram/anagram_test.exs +12 -12
- data/tracks/elixir/exercises/atbash-cipher/atbash_cipher_test.exs +9 -9
- data/tracks/elixir/exercises/bank-account/bank_account_test.exs +5 -5
- data/tracks/elixir/exercises/beer-song/beer_song_test.exs +6 -6
- data/tracks/elixir/exercises/binary-search/binary_search_test.exs +7 -7
- data/tracks/elixir/exercises/binary/binary_test.exs +13 -13
- data/tracks/elixir/exercises/bob/bob_test.exs +15 -15
- data/tracks/elixir/exercises/bowling/bowling_test.exs +18 -18
- data/tracks/elixir/exercises/bracket-push/bracket_push_test.exs +12 -12
- data/tracks/elixir/exercises/change/change_test.exs +7 -7
- data/tracks/elixir/exercises/connect/connect_test.exs +9 -9
- data/tracks/elixir/exercises/crypto-square/crypto_square_test.exs +7 -7
- data/tracks/elixir/exercises/custom-set/custom_set_test.exs +11 -11
- data/tracks/elixir/exercises/diamond/diamond_test.exs +4 -4
- data/tracks/elixir/exercises/difference-of-squares/difference_of_squares_test.exs +10 -10
- data/tracks/elixir/exercises/dot-dsl/dot_dsl_test.exs +17 -17
- data/tracks/elixir/exercises/etl/etl_test.exs +5 -5
- data/tracks/elixir/exercises/flatten-array/flatten_array_test.exs +6 -6
- data/tracks/elixir/exercises/forth/forth_test.exs +16 -16
- data/tracks/elixir/exercises/gigasecond/gigasecond_test.exs +5 -5
- data/tracks/elixir/exercises/grade-school/grade_school_test.exs +6 -6
- data/tracks/elixir/exercises/grains/grains_test.exs +9 -9
- data/tracks/elixir/exercises/hamming/hamming_test.exs +6 -6
- data/tracks/elixir/exercises/hello-world/hello_world_test.exs +3 -3
- data/tracks/elixir/exercises/hexadecimal/hexadecimal_test.exs +11 -11
- data/tracks/elixir/exercises/isogram/isogram_test.exs +10 -10
- data/tracks/elixir/exercises/kindergarten-garden/garden_test.exs +7 -7
- data/tracks/elixir/exercises/largest-series-product/largest_series_product_test.exs +17 -17
- data/tracks/elixir/exercises/leap/leap_test.exs +5 -5
- data/tracks/elixir/exercises/list-ops/list_ops_test.exs +26 -26
- data/tracks/elixir/exercises/luhn/luhn_test.exs +7 -7
- data/tracks/elixir/exercises/markdown/markdown_test.exs +10 -10
- data/tracks/elixir/exercises/meetup/meetup_test.exs +92 -92
- data/tracks/elixir/exercises/minesweeper/minesweeper_test.exs +8 -8
- data/tracks/elixir/exercises/nth-prime/nth_prime_test.exs +6 -6
- data/tracks/elixir/exercises/nucleotide-count/example.exs +0 -5
- data/tracks/elixir/exercises/nucleotide-count/nucleotide_count_test.exs +7 -7
- data/tracks/elixir/exercises/palindrome-products/palindrome_products_test.exs +6 -6
- data/tracks/elixir/exercises/pangram/pangram_test.exs +11 -11
- data/tracks/elixir/exercises/parallel-letter-frequency/parallel_letter_frequency_test.exs +10 -10
- data/tracks/elixir/exercises/pascals-triangle/pascals_triangle_test.exs +7 -7
- data/tracks/elixir/exercises/phone-number/phone_number_test.exs +10 -10
- data/tracks/elixir/exercises/prime-factors/prime_factors_test.exs +13 -13
- data/tracks/elixir/exercises/pythagorean-triplet/pythagorean_triplet_test.exs +8 -8
- data/tracks/elixir/exercises/queen-attack/queen_attack_test.exs +16 -16
- data/tracks/elixir/exercises/rail-fence-cipher/rail_fence_cipher_test.exs +13 -13
- data/tracks/elixir/exercises/raindrops/raindrops_test.exs +17 -17
- data/tracks/elixir/exercises/rna-transcription/rna_transcription_test.exs +6 -6
- data/tracks/elixir/exercises/robot-simulator/robot_simulator_test.exs +6 -6
- data/tracks/elixir/exercises/roman-numerals/roman_numerals_test.exs +19 -19
- data/tracks/elixir/exercises/run-length-encoding/rle_test.exs +6 -6
- data/tracks/elixir/exercises/saddle-points/saddle_points_test.exs +11 -11
- data/tracks/elixir/exercises/scrabble-score/scrabble_score_test.exs +9 -9
- data/tracks/elixir/exercises/sieve/sieve_test.exs +3 -3
- data/tracks/elixir/exercises/space-age/space_age_test.exs +9 -9
- data/tracks/elixir/exercises/sublist/sublist_test.exs +20 -20
- data/tracks/elixir/exercises/sum-of-multiples/sum_of_multiples_test.exs +11 -11
- data/tracks/elixir/exercises/test_helper.exs +1 -1
- data/tracks/elixir/exercises/triangle/triangle_test.exs +16 -16
- data/tracks/elixir/exercises/word-count/word_count_test.exs +9 -9
- data/tracks/elixir/exercises/wordy/wordy_test.exs +16 -16
- data/tracks/elixir/exercises/zipper/zipper_test.exs +13 -13
- data/tracks/fsharp/build.fsx +2 -7
- data/tracks/fsharp/config.json +0 -104
- data/tracks/fsharp/exercises/grep/GrepTest.fs +7 -1
- data/tracks/go/config.json +1 -0
- data/tracks/go/exercises/acronym/acronym_test.go +36 -0
- data/tracks/go/exercises/acronym/example.go +21 -0
- data/tracks/go/exercises/palindrome-products/example.go +2 -0
- data/tracks/go/exercises/palindrome-products/palindrome_products_test.go +10 -0
- data/tracks/go/exercises/phone-number/example.go +2 -0
- data/tracks/go/exercises/phone-number/phone_number_test.go +44 -27
- data/tracks/go/exercises/robot-simulator/defs.go +6 -6
- data/tracks/go/exercises/robot-simulator/example.go +22 -22
- data/tracks/go/exercises/robot-simulator/robot_simulator_step2_test.go +28 -28
- data/tracks/go/exercises/robot-simulator/robot_simulator_step3_test.go +75 -76
- data/tracks/go/exercises/robot-simulator/robot_simulator_test.go +10 -4
- data/tracks/haskell/exercises/anagram/HINTS.md +22 -0
- data/tracks/haskell/exercises/anagram/package.yaml +3 -0
- data/tracks/haskell/exercises/anagram/src/Example.hs +10 -7
- data/tracks/haskell/exercises/anagram/test/Tests.hs +9 -3
- data/tracks/haskell/exercises/beer-song/HINTS.md +18 -0
- data/tracks/haskell/exercises/beer-song/src/Beer.hs +301 -3
- data/tracks/haskell/exercises/beer-song/src/Example.hs +5 -3
- data/tracks/haskell/exercises/beer-song/test/Tests.hs +332 -23
- data/tracks/haskell/exercises/crypto-square/src/CryptoSquare.hs +3 -17
- data/tracks/haskell/exercises/crypto-square/src/Example.hs +12 -20
- data/tracks/haskell/exercises/crypto-square/test/Tests.hs +46 -86
- data/tracks/haskell/exercises/leap/HINTS.md +11 -0
- data/tracks/haskell/exercises/leap/src/LeapYear.hs +1 -0
- data/tracks/java/exercises/pangram/src/test/java/PangramTest.java +34 -4
- data/tracks/lua/exercises/pov/pov_spec.lua +0 -13
- data/tracks/mips/docs/ABOUT.md +1 -1
- data/tracks/objective-c/config.json +225 -0
- data/tracks/objective-c/exercises/largest-series-product/LargestSeriesProductExample.h +8 -0
- data/tracks/objective-c/exercises/largest-series-product/LargestSeriesProductExample.m +63 -0
- data/tracks/objective-c/exercises/largest-series-product/LargestSeriesProductTest.m +84 -0
- data/tracks/objective-c/xcodeProject/ObjectiveC.xcodeproj/project.pbxproj +18 -0
- data/tracks/ocaml/.travis-ci.sh +23 -0
- data/tracks/ocaml/.travis.yml +5 -1
- data/tracks/ocaml/Makefile +41 -0
- data/tracks/ocaml/config.json +18 -0
- data/tracks/ocaml/exercises/anagram/Makefile +1 -0
- data/tracks/ocaml/exercises/beer-song/Makefile +1 -0
- data/tracks/ocaml/exercises/beer-song/{beer.mli → beer_song.mli} +0 -0
- data/tracks/ocaml/exercises/beer-song/example.ml +1 -1
- data/tracks/ocaml/exercises/beer-song/test.ml +7 -6
- data/tracks/ocaml/exercises/bob/Makefile +1 -0
- data/tracks/ocaml/exercises/bowling/Makefile +1 -0
- data/tracks/ocaml/exercises/custom-set/Makefile +1 -0
- data/tracks/ocaml/exercises/difference-of-squares/.merlin +5 -0
- data/tracks/ocaml/exercises/difference-of-squares/Makefile +11 -0
- data/tracks/ocaml/exercises/difference-of-squares/difference_of_squares.mli +8 -0
- data/tracks/ocaml/exercises/difference-of-squares/example.ml +21 -0
- data/tracks/ocaml/exercises/difference-of-squares/test.ml +32 -0
- data/tracks/ocaml/exercises/grade-school/Makefile +1 -0
- data/tracks/ocaml/exercises/grade-school/{school.mli → grade_school.mli} +0 -0
- data/tracks/ocaml/exercises/grade-school/test.ml +27 -27
- data/tracks/ocaml/exercises/hamming/Makefile +1 -0
- data/tracks/ocaml/exercises/hangman/Makefile +1 -0
- data/tracks/ocaml/exercises/hello-world/Makefile +1 -1
- data/tracks/ocaml/exercises/hello-world/{hello.ml → hello_world.ml} +0 -0
- data/tracks/ocaml/exercises/hello-world/{hello.mli → hello_world.mli} +0 -0
- data/tracks/ocaml/exercises/hello-world/test.ml +1 -1
- data/tracks/ocaml/exercises/hexadecimal/Makefile +1 -0
- data/tracks/ocaml/exercises/leap/Makefile +1 -1
- data/tracks/ocaml/exercises/list-ops/Makefile +1 -0
- data/tracks/ocaml/exercises/luhn/Makefile +1 -0
- data/tracks/ocaml/exercises/minesweeper/Makefile +1 -0
- data/tracks/ocaml/exercises/nucleotide-count/Makefile +1 -0
- data/tracks/ocaml/exercises/nucleotide-count/{dna.mli → nucleotide_count.mli} +0 -0
- data/tracks/ocaml/exercises/nucleotide-count/test.ml +7 -7
- data/tracks/ocaml/exercises/phone-number/Makefile +1 -0
- data/tracks/ocaml/exercises/phone-number/{phone.mli → phone_number.mli} +0 -0
- data/tracks/ocaml/exercises/phone-number/test.ml +10 -10
- data/tracks/ocaml/exercises/point-mutations/Makefile +8 -0
- data/tracks/ocaml/exercises/point-mutations/example.ml +0 -0
- data/tracks/ocaml/exercises/prime-factors/Makefile +1 -0
- data/tracks/ocaml/exercises/raindrops/.merlin +5 -0
- data/tracks/ocaml/exercises/raindrops/Makefile +11 -0
- data/tracks/ocaml/exercises/raindrops/example.ml +11 -0
- data/tracks/ocaml/exercises/raindrops/raindrops.mli +7 -0
- data/tracks/ocaml/exercises/raindrops/test.ml +48 -0
- data/tracks/ocaml/exercises/rna-transcription/Makefile +1 -0
- data/tracks/ocaml/exercises/rna-transcription/{dna.mli → rna_transcription.mli} +0 -0
- data/tracks/ocaml/exercises/rna-transcription/test.ml +6 -6
- data/tracks/ocaml/exercises/roman-numerals/Makefile +1 -0
- data/tracks/ocaml/exercises/say/.gitignore +1 -0
- data/tracks/ocaml/exercises/say/.merlin +5 -0
- data/tracks/ocaml/exercises/say/Makefile +11 -0
- data/tracks/ocaml/exercises/say/example.ml +52 -0
- data/tracks/ocaml/exercises/say/say.mli +8 -0
- data/tracks/ocaml/exercises/say/test.ml +65 -0
- data/tracks/ocaml/exercises/space-age/Makefile +1 -0
- data/tracks/ocaml/exercises/word-count/Makefile +1 -0
- data/tracks/ocaml/exercises/word-count/example.ml +1 -1
- data/tracks/ocaml/exercises/zipper/HINT.md +5 -6
- data/tracks/ocaml/exercises/zipper/Makefile +1 -0
- data/tracks/ocaml/exercises/zipper/example.ml +2 -2
- data/tracks/ocaml/exercises/zipper/tree.ml +1 -1
- data/tracks/php/config.json +7 -1
- data/tracks/php/exercises/variable-length-quantity/example.php +56 -0
- data/tracks/php/exercises/variable-length-quantity/variable-length-quantity_test.php +149 -0
- data/tracks/python/config.json +1 -1
- data/tracks/ruby/.rubocop.yml +1915 -26
- data/tracks/ruby/bin/generate-acronym +7 -0
- data/tracks/ruby/bin/generate-nth-prime +7 -0
- data/tracks/ruby/config.json +482 -0
- data/tracks/ruby/exercises/acronym/.version +1 -0
- data/tracks/ruby/exercises/acronym/acronym_test.rb +45 -21
- data/tracks/ruby/exercises/acronym/example.rb +1 -1
- data/tracks/ruby/exercises/acronym/example.tt +19 -0
- data/tracks/ruby/exercises/anagram/anagram_test.rb +1 -1
- data/tracks/ruby/exercises/nth-prime/.version +1 -0
- data/tracks/ruby/exercises/nth-prime/example.rb +4 -0
- data/tracks/ruby/exercises/nth-prime/example.tt +23 -0
- data/tracks/ruby/exercises/nth-prime/nth_prime_test.rb +33 -10
- data/tracks/ruby/exercises/raindrops/.version +1 -1
- data/tracks/ruby/exercises/raindrops/example.rb +1 -1
- data/tracks/ruby/exercises/raindrops/raindrops_test.rb +20 -5
- data/tracks/ruby/lib/acronym_cases.rb +19 -0
- data/tracks/ruby/lib/generator.rb +3 -2
- data/tracks/ruby/lib/nth_prime_cases.rb +23 -0
- data/tracks/ruby/lib/raindrop_cases.rb +1 -1
- data/tracks/rust/README.md +1 -1
- data/tracks/scala/exercises/leap/src/test/scala/leap_test.scala +10 -0
- data/tracks/scala/exercises/prime-factors/example.scala +2 -5
- data/tracks/scala/exercises/prime-factors/src/test/scala/primefactors_test.scala +11 -13
- data/tracks/scheme/{anagram → exercises/anagram}/anagram-test.scm +0 -0
- data/tracks/scheme/{anagram → exercises/anagram}/anagram.scm +0 -0
- data/tracks/scheme/{anagram → exercises/anagram}/example.scm +0 -0
- data/tracks/scheme/{bob → exercises/bob}/bob-test.scm +0 -0
- data/tracks/scheme/{bob → exercises/bob}/bob.scm +0 -0
- data/tracks/scheme/{bob → exercises/bob}/example.scm +0 -0
- data/tracks/scheme/{difference-of-squares → exercises/difference-of-squares}/difference-of-squares-test.scm +0 -0
- data/tracks/scheme/{difference-of-squares → exercises/difference-of-squares}/example.scm +0 -0
- data/tracks/scheme/{difference-of-squares → exercises/difference-of-squares}/squares.scm +0 -0
- data/tracks/scheme/{grains → exercises/grains}/example.scm +0 -0
- data/tracks/scheme/{grains → exercises/grains}/grains-test.scm +0 -0
- data/tracks/scheme/{grains → exercises/grains}/grains.scm +0 -0
- data/tracks/scheme/{hamming → exercises/hamming}/example.scm +0 -0
- data/tracks/scheme/{hamming → exercises/hamming}/hamming-test.scm +0 -0
- data/tracks/scheme/{hamming → exercises/hamming}/hamming.scm +0 -0
- data/tracks/scheme/{hello-world → exercises/hello-world}/example.scm +0 -0
- data/tracks/scheme/{hello-world → exercises/hello-world}/hello-world-test.scm +0 -0
- data/tracks/scheme/{hello-world → exercises/hello-world}/hello-world.scm +0 -0
- data/tracks/scheme/{leap → exercises/leap}/example.scm +0 -0
- data/tracks/scheme/{leap → exercises/leap}/leap-test.scm +0 -0
- data/tracks/scheme/{leap → exercises/leap}/leap-year.scm +0 -0
- data/tracks/scheme/{list-ops → exercises/list-ops}/example.scm +0 -0
- data/tracks/scheme/{list-ops → exercises/list-ops}/list-ops-test.scm +0 -0
- data/tracks/scheme/{list-ops → exercises/list-ops}/list-ops.scm +0 -0
- data/tracks/scheme/{nucleotide-count → exercises/nucleotide-count}/example.scm +0 -0
- data/tracks/scheme/{nucleotide-count → exercises/nucleotide-count}/nucleotide-count-test.scm +0 -0
- data/tracks/scheme/{nucleotide-count → exercises/nucleotide-count}/nucleotide-count.scm +0 -0
- data/tracks/scheme/{phone-number → exercises/phone-number}/example.scm +0 -0
- data/tracks/scheme/{phone-number → exercises/phone-number}/phone-number-test.scm +0 -0
- data/tracks/scheme/{phone-number → exercises/phone-number}/phone-number.scm +0 -0
- data/tracks/scheme/{raindrops → exercises/raindrops}/example.scm +0 -0
- data/tracks/scheme/{raindrops → exercises/raindrops}/raindrops-test.scm +0 -0
- data/tracks/scheme/{raindrops → exercises/raindrops}/raindrops.scm +0 -0
- data/tracks/scheme/{rna-transcription → exercises/rna-transcription}/dna.scm +0 -0
- data/tracks/scheme/{rna-transcription → exercises/rna-transcription}/example.scm +0 -0
- data/tracks/scheme/{rna-transcription → exercises/rna-transcription}/rna-transcription-test.scm +0 -0
- data/tracks/scheme/{robot-name → exercises/robot-name}/example.scm +0 -0
- data/tracks/scheme/{robot-name → exercises/robot-name}/robot-name-test.scm +0 -0
- data/tracks/scheme/{robot-name → exercises/robot-name}/robot.scm +0 -0
- metadata +125 -64
@@ -0,0 +1,18 @@
|
|
1
|
+
;;; word-count.el --- word-count Exercise (exercism)
|
2
|
+
|
3
|
+
;;; Commentary:
|
4
|
+
|
5
|
+
;;; Code:
|
6
|
+
|
7
|
+
|
8
|
+
(defun word-count (sentence)
|
9
|
+
(let ((count nil))
|
10
|
+
(dolist (i (split-string (downcase sentence) "[^a-z0-9]" t))
|
11
|
+
(let ((n (assoc i count)))
|
12
|
+
(if n (setcdr n (1+ (cdr n)))
|
13
|
+
(push (cons i 1) count))))
|
14
|
+
count))
|
15
|
+
|
16
|
+
|
17
|
+
(provide 'word-count)
|
18
|
+
;;; word-count.el ends here
|
@@ -0,0 +1,64 @@
|
|
1
|
+
;;; word-count-test.el --- Tests for word-count (exercism)
|
2
|
+
|
3
|
+
;;; Commentary:
|
4
|
+
|
5
|
+
;;; Code:
|
6
|
+
|
7
|
+
(load-file "word-count.el")
|
8
|
+
|
9
|
+
|
10
|
+
(defun equal-assoc (a b)
|
11
|
+
(equal (sort a #'(lambda (a b) (not (string< (car a) (car b)))))
|
12
|
+
(sort b #'(lambda (a b) (not (string< (car a) (car b)))))))
|
13
|
+
|
14
|
+
|
15
|
+
(ert-deftest no-words-test ()
|
16
|
+
(should (equal (word-count "")
|
17
|
+
nil)))
|
18
|
+
|
19
|
+
|
20
|
+
(ert-deftest count-one-word-test ()
|
21
|
+
(should (equal (word-count "word")
|
22
|
+
'(("word" . 1)))))
|
23
|
+
|
24
|
+
|
25
|
+
(ert-deftest count-one-of-each-word-test ()
|
26
|
+
(should (equal (word-count "one of each")
|
27
|
+
'(("each" . 1)
|
28
|
+
("of" . 1)
|
29
|
+
("one" . 1)))))
|
30
|
+
|
31
|
+
|
32
|
+
(ert-deftest multiple-occurrences-of-a-word-test ()
|
33
|
+
(should (equal (word-count "one fish two fish red fish blue fish")
|
34
|
+
'(("blue" . 1)
|
35
|
+
("red" . 1)
|
36
|
+
("two" . 1)
|
37
|
+
("fish" . 4)
|
38
|
+
("one" . 1)))))
|
39
|
+
|
40
|
+
|
41
|
+
(ert-deftest ignore-punctuation-test ()
|
42
|
+
(should (equal (word-count "car : carpet as java : javascript!!&@$%^&")
|
43
|
+
'(("javascript" . 1)
|
44
|
+
("java" . 1)
|
45
|
+
("as" . 1)
|
46
|
+
("carpet" . 1)
|
47
|
+
("car" . 1)))))
|
48
|
+
|
49
|
+
|
50
|
+
(ert-deftest include-numbers-test ()
|
51
|
+
(should (equal (word-count "testing, 1, 2 testing")
|
52
|
+
'(("2" . 1)
|
53
|
+
("1" . 1)
|
54
|
+
("testing" . 2)))))
|
55
|
+
|
56
|
+
|
57
|
+
(ert-deftest normalize-case-test ()
|
58
|
+
(should (equal (word-count "go Go GO Stop stop")
|
59
|
+
'(("stop" . 2)
|
60
|
+
("go" . 3)))))
|
61
|
+
|
62
|
+
|
63
|
+
(provide 'word-count)
|
64
|
+
;;; word-count-test.el ends here
|
data/tracks/elixir/README.md
CHANGED
@@ -37,7 +37,7 @@ The example solution should be named `example.exs`.
|
|
37
37
|
|
38
38
|
- Use typespecs in the example and template files as described [here](http://elixir-lang.org/getting-started/typespecs-and-behaviours.html).
|
39
39
|
|
40
|
-
- Each test file should have code like the following at the top of the file. This allows the tests to be run on CI and configures tests to be skipped with the `:
|
40
|
+
- Each test file should have code like the following at the top of the file. This allows the tests to be run on CI and configures tests to be skipped with the `:pending` flag.
|
41
41
|
|
42
42
|
```elixir
|
43
43
|
if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
@@ -45,13 +45,13 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
ExUnit.start
|
48
|
-
ExUnit.configure trace: true
|
48
|
+
ExUnit.configure exclude: :pending, trace: true
|
49
49
|
```
|
50
50
|
|
51
|
-
- All but the initial test for each exercise should be tagged `:
|
51
|
+
- All but the initial test for each exercise should be tagged `:pending`.
|
52
52
|
|
53
53
|
```elixir
|
54
|
-
@tag :
|
54
|
+
@tag :pending
|
55
55
|
test "shouting" do
|
56
56
|
assert Bob.hey("WATCH OUT!") == "Whoa, chill out!"
|
57
57
|
end
|
data/tracks/elixir/SETUP.md
CHANGED
@@ -14,12 +14,12 @@ $ elixir bob_test.exs
|
|
14
14
|
In the test suites, all but the first test have been skipped.
|
15
15
|
|
16
16
|
Once you get a test passing, you can unskip the next one by
|
17
|
-
commenting out the relevant `@tag :
|
17
|
+
commenting out the relevant `@tag :pending` with a `#` symbol.
|
18
18
|
|
19
19
|
For example:
|
20
20
|
|
21
21
|
```elixir
|
22
|
-
# @tag :
|
22
|
+
# @tag :pending
|
23
23
|
test "shouting" do
|
24
24
|
assert Bob.hey("WATCH OUT!") == "Whoa, chill out!"
|
25
25
|
end
|
@@ -29,7 +29,7 @@ Or, you can enable all the tests by commenting out the
|
|
29
29
|
`ExUnit.configure` line in the test suite.
|
30
30
|
|
31
31
|
```elixir
|
32
|
-
# ExUnit.configure trace: true
|
32
|
+
# ExUnit.configure exclude: :pending, trace: true
|
33
33
|
```
|
34
34
|
|
35
35
|
For more detailed information about the Elixir track, please
|
data/tracks/elixir/docs/TESTS.md
CHANGED
@@ -14,12 +14,12 @@ $ elixir bob_test.exs
|
|
14
14
|
In the test suites, all but the first test have been skipped.
|
15
15
|
|
16
16
|
Once you get a test passing, you can unskip the next one by
|
17
|
-
commenting out the relevant `@tag :
|
17
|
+
commenting out the relevant `@tag :pending` with a `#` symbol.
|
18
18
|
|
19
19
|
For example:
|
20
20
|
|
21
21
|
```elixir
|
22
|
-
# @tag :
|
22
|
+
# @tag :pending
|
23
23
|
test "shouting" do
|
24
24
|
assert Bob.hey("WATCH OUT!") == "Whoa, chill out!"
|
25
25
|
end
|
@@ -29,5 +29,5 @@ Or, you can enable all the tests by commenting out the
|
|
29
29
|
`ExUnit.configure` line in the test suite.
|
30
30
|
|
31
31
|
```elixir
|
32
|
-
# ExUnit.configure trace: true
|
32
|
+
# ExUnit.configure exclude: :pending, trace: true
|
33
33
|
```
|
@@ -3,7 +3,7 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
3
3
|
end
|
4
4
|
|
5
5
|
ExUnit.start
|
6
|
-
ExUnit.configure trace: true
|
6
|
+
ExUnit.configure exclude: :pending, trace: true
|
7
7
|
|
8
8
|
defmodule AccumulateTest do
|
9
9
|
use ExUnit.Case
|
@@ -12,18 +12,18 @@ defmodule AccumulateTest do
|
|
12
12
|
assert Accumulate.accumulate([], fn(n) -> n * n end) == []
|
13
13
|
end
|
14
14
|
|
15
|
-
@tag :
|
15
|
+
@tag :pending
|
16
16
|
test "accumulate square numbers" do
|
17
17
|
assert Accumulate.accumulate([1, 2, 3], fn(n) -> n * n end) == [1, 4, 9]
|
18
18
|
end
|
19
19
|
|
20
|
-
@tag :
|
20
|
+
@tag :pending
|
21
21
|
test "accumulate upcased strings" do
|
22
22
|
fun = fn(w) -> String.upcase(w) end
|
23
23
|
assert Accumulate.accumulate(["hello", "world"], fun) == ["HELLO", "WORLD"]
|
24
24
|
end
|
25
25
|
|
26
|
-
@tag :
|
26
|
+
@tag :pending
|
27
27
|
test "accumulate reversed strings" do
|
28
28
|
fun = fn(w) -> String.reverse(w) end
|
29
29
|
words = ~w(the quick brown fox etc)
|
@@ -31,11 +31,11 @@ defmodule AccumulateTest do
|
|
31
31
|
assert Accumulate.accumulate(words, fun) == expected
|
32
32
|
end
|
33
33
|
|
34
|
-
@tag :
|
35
|
-
test "accumulate
|
34
|
+
@tag :pending
|
35
|
+
test "nested accumulate" do
|
36
36
|
chars = ~w(a b c)
|
37
37
|
nums = ~w(1 2 3)
|
38
|
-
fun = fn(c) ->
|
38
|
+
fun = fn(c) -> Accumulate.accumulate(nums, &(c <> &1)) end
|
39
39
|
expected = [["a1", "a2", "a3"], ["b1", "b2", "b3"], ["c1", "c2", "c3"]]
|
40
40
|
assert Accumulate.accumulate(chars, fun) == expected
|
41
41
|
end
|
@@ -3,7 +3,7 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
3
3
|
end
|
4
4
|
|
5
5
|
ExUnit.start
|
6
|
-
ExUnit.configure trace: true
|
6
|
+
ExUnit.configure exclude: :pending, trace: true
|
7
7
|
|
8
8
|
defmodule AcronymTest do
|
9
9
|
use ExUnit.Case
|
@@ -12,22 +12,22 @@ defmodule AcronymTest do
|
|
12
12
|
assert Acronym.abbreviate("Portable Networks Graphic") === "PNG"
|
13
13
|
end
|
14
14
|
|
15
|
-
@tag :
|
15
|
+
@tag :pending
|
16
16
|
test "it produces acronyms from lower case" do
|
17
17
|
assert Acronym.abbreviate("Ruby on Rails") === "ROR"
|
18
18
|
end
|
19
19
|
|
20
|
-
@tag :
|
20
|
+
@tag :pending
|
21
21
|
test "it produces acronyms from inconsistent case" do
|
22
22
|
assert Acronym.abbreviate("HyperText Markup Language") === "HTML"
|
23
23
|
end
|
24
24
|
|
25
|
-
@tag :
|
25
|
+
@tag :pending
|
26
26
|
test "it ignores punctuation" do
|
27
27
|
assert Acronym.abbreviate("First in, First out") === "FIFO"
|
28
28
|
end
|
29
29
|
|
30
|
-
@tag :
|
30
|
+
@tag :pending
|
31
31
|
test "it produces acronyms ignoring punctuation and casing" do
|
32
32
|
assert Acronym.abbreviate("Complementary Metal-Oxide semiconductor") === "CMOS"
|
33
33
|
end
|
@@ -4,69 +4,69 @@ end
|
|
4
4
|
|
5
5
|
|
6
6
|
ExUnit.start
|
7
|
-
ExUnit.configure trace: true
|
7
|
+
ExUnit.configure exclude: :pending, trace: true
|
8
8
|
|
9
9
|
defmodule AllergiesTest do
|
10
10
|
use ExUnit.Case
|
11
11
|
|
12
|
-
# @tag :
|
12
|
+
# @tag :pending
|
13
13
|
test "no_allergies_at_all" do
|
14
14
|
Allergies.list(0) |> assert_is_a_set_containing([])
|
15
15
|
end
|
16
16
|
|
17
|
-
@tag :
|
17
|
+
@tag :pending
|
18
18
|
test "allergic_to_just_eggs" do
|
19
19
|
Allergies.list(1) |> assert_is_a_set_containing(~w[eggs])
|
20
20
|
end
|
21
21
|
|
22
|
-
@tag :
|
22
|
+
@tag :pending
|
23
23
|
test "allergic_to_just_peanuts" do
|
24
24
|
Allergies.list(2) |> assert_is_a_set_containing(~w[peanuts])
|
25
25
|
end
|
26
26
|
|
27
|
-
@tag :
|
27
|
+
@tag :pending
|
28
28
|
test "allergic_to_just_strawberries" do
|
29
29
|
Allergies.list(8) |> assert_is_a_set_containing(~w[strawberries])
|
30
30
|
end
|
31
31
|
|
32
|
-
@tag :
|
32
|
+
@tag :pending
|
33
33
|
test "allergic_to_eggs_and_peanuts" do
|
34
34
|
Allergies.list(3) |> assert_is_a_set_containing(~w[eggs peanuts])
|
35
35
|
end
|
36
36
|
|
37
|
-
@tag :
|
37
|
+
@tag :pending
|
38
38
|
test "allergic_to_more_than_eggs_but_not_peanuts" do
|
39
39
|
Allergies.list(5) |> assert_is_a_set_containing(~w[eggs shellfish])
|
40
40
|
end
|
41
41
|
|
42
|
-
@tag :
|
42
|
+
@tag :pending
|
43
43
|
test "allergic_to_lots_of_stuff" do
|
44
44
|
Allergies.list(248) |> assert_is_a_set_containing(~w[strawberries tomatoes chocolate pollen cats])
|
45
45
|
end
|
46
46
|
|
47
|
-
@tag :
|
47
|
+
@tag :pending
|
48
48
|
test "allergic_to_everything" do
|
49
49
|
Allergies.list(255) |> assert_is_a_set_containing(~w[eggs peanuts shellfish strawberries tomatoes chocolate pollen cats])
|
50
50
|
end
|
51
51
|
|
52
|
-
@tag :
|
52
|
+
@tag :pending
|
53
53
|
test "no_allergies_means_not_allergic" do
|
54
54
|
refute Allergies.allergic_to?(0, "peanuts")
|
55
55
|
refute Allergies.allergic_to?(0, "cats")
|
56
56
|
refute Allergies.allergic_to?(0, "strawberries")
|
57
57
|
end
|
58
58
|
|
59
|
-
@tag :
|
59
|
+
@tag :pending
|
60
60
|
test "is_allergic_to_eggs" do
|
61
61
|
assert Allergies.allergic_to?(1, "eggs")
|
62
62
|
end
|
63
63
|
|
64
|
-
@tag :
|
64
|
+
@tag :pending
|
65
65
|
test "allergic_to_eggs_in_addition_to_other_stuff" do
|
66
66
|
assert Allergies.allergic_to?(5, "eggs")
|
67
67
|
end
|
68
68
|
|
69
|
-
@tag :
|
69
|
+
@tag :pending
|
70
70
|
test "ignore_non_allergen_score_parts" do
|
71
71
|
Allergies.list(509) |> assert_is_a_set_containing(~w[eggs shellfish strawberries tomatoes chocolate pollen cats])
|
72
72
|
end
|
@@ -3,72 +3,72 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
3
3
|
end
|
4
4
|
|
5
5
|
ExUnit.start
|
6
|
-
ExUnit.configure trace: true
|
6
|
+
ExUnit.configure exclude: :pending, trace: true
|
7
7
|
|
8
8
|
defmodule AnagramTest do
|
9
9
|
use ExUnit.Case
|
10
10
|
|
11
|
-
# @tag :
|
11
|
+
# @tag :pending
|
12
12
|
test "no matches" do
|
13
13
|
matches = Anagram.match "diaper", ["hello", "world", "zombies", "pants"]
|
14
14
|
assert matches == []
|
15
15
|
end
|
16
16
|
|
17
|
-
@tag :
|
17
|
+
@tag :pending
|
18
18
|
test "detect simple anagram" do
|
19
19
|
matches = Anagram.match "ant", ["tan", "stand", "at"]
|
20
20
|
assert matches == ["tan"]
|
21
21
|
end
|
22
22
|
|
23
|
-
@tag :
|
23
|
+
@tag :pending
|
24
24
|
test "detect multiple anagrams" do
|
25
25
|
matches = Anagram.match "master", ["stream", "pigeon", "maters"]
|
26
26
|
assert matches == ["stream", "maters"]
|
27
27
|
end
|
28
28
|
|
29
|
-
@tag :
|
29
|
+
@tag :pending
|
30
30
|
test "do not detect anagram subsets" do
|
31
31
|
matches = Anagram.match "good", ~w(dog goody)
|
32
32
|
assert matches == []
|
33
33
|
end
|
34
34
|
|
35
|
-
@tag :
|
35
|
+
@tag :pending
|
36
36
|
test "detect anagram" do
|
37
37
|
matches = Anagram.match "listen", ~w(enlists google inlets banana)
|
38
38
|
assert matches == ["inlets"]
|
39
39
|
end
|
40
40
|
|
41
|
-
@tag :
|
41
|
+
@tag :pending
|
42
42
|
test "multiple anagrams" do
|
43
43
|
matches = Anagram.match "allergy", ~w(gallery ballerina regally clergy largely leading)
|
44
44
|
assert matches == ["gallery", "regally", "largely"]
|
45
45
|
end
|
46
46
|
|
47
|
-
@tag :
|
47
|
+
@tag :pending
|
48
48
|
test "anagrams must use all letters exactly once" do
|
49
49
|
matches = Anagram.match "patter", ["tapper"]
|
50
50
|
assert matches == []
|
51
51
|
end
|
52
52
|
|
53
|
-
@tag :
|
53
|
+
@tag :pending
|
54
54
|
test "detect anagrams with case-insensitive subject" do
|
55
55
|
matches = Anagram.match "Orchestra", ~w(cashregister carthorse radishes)
|
56
56
|
assert matches == ["carthorse"]
|
57
57
|
end
|
58
58
|
|
59
|
-
@tag :
|
59
|
+
@tag :pending
|
60
60
|
test "detect anagrams with case-insensitive candidate" do
|
61
61
|
matches = Anagram.match "orchestra", ~w(cashregister Carthorse radishes)
|
62
62
|
assert matches == ["Carthorse"]
|
63
63
|
end
|
64
64
|
|
65
|
-
@tag :
|
65
|
+
@tag :pending
|
66
66
|
test "anagrams must not be the source word" do
|
67
67
|
matches = Anagram.match "corn", ["corn", "dark", "Corn", "rank", "CORN", "cron", "park"]
|
68
68
|
assert matches == ["cron"]
|
69
69
|
end
|
70
70
|
|
71
|
-
@tag :
|
71
|
+
@tag :pending
|
72
72
|
test "do not detect words based on checksum" do
|
73
73
|
matches = Anagram.match "mass", ["last"]
|
74
74
|
assert matches == []
|
@@ -3,47 +3,47 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
3
3
|
end
|
4
4
|
|
5
5
|
ExUnit.start
|
6
|
-
ExUnit.configure trace: true
|
6
|
+
ExUnit.configure exclude: :pending, trace: true
|
7
7
|
|
8
8
|
defmodule AtbashTest do
|
9
9
|
use ExUnit.Case
|
10
10
|
|
11
|
-
# @tag :
|
11
|
+
# @tag :pending
|
12
12
|
test "encode no" do
|
13
13
|
assert Atbash.encode("no") == "ml"
|
14
14
|
end
|
15
15
|
|
16
|
-
@tag :
|
16
|
+
@tag :pending
|
17
17
|
test "encode yes" do
|
18
18
|
assert Atbash.encode("yes") == "bvh"
|
19
19
|
end
|
20
20
|
|
21
|
-
@tag :
|
21
|
+
@tag :pending
|
22
22
|
test "encode OMG" do
|
23
23
|
assert Atbash.encode("OMG") == "lnt"
|
24
24
|
end
|
25
25
|
|
26
|
-
@tag :
|
26
|
+
@tag :pending
|
27
27
|
test "encode O M G" do
|
28
28
|
assert Atbash.encode("O M G") == "lnt"
|
29
29
|
end
|
30
30
|
|
31
|
-
@tag :
|
31
|
+
@tag :pending
|
32
32
|
test "encode long word" do
|
33
33
|
assert Atbash.encode("mindblowingly") == "nrmwy oldrm tob"
|
34
34
|
end
|
35
35
|
|
36
|
-
@tag :
|
36
|
+
@tag :pending
|
37
37
|
test "encode numbers" do
|
38
38
|
assert Atbash.encode("Testing, 1 2 3, testing.") == "gvhgr mt123 gvhgr mt"
|
39
39
|
end
|
40
40
|
|
41
|
-
@tag :
|
41
|
+
@tag :pending
|
42
42
|
test "encode sentence" do
|
43
43
|
assert Atbash.encode("Truth is fiction.") == "gifgs rhurx grlm"
|
44
44
|
end
|
45
45
|
|
46
|
-
@tag :
|
46
|
+
@tag :pending
|
47
47
|
test "encode all the things" do
|
48
48
|
plaintext = "The quick brown fox jumps over the lazy dog."
|
49
49
|
cipher = "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt"
|