trackler 2.2.1.109 → 2.2.1.110
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/tracks/c/config.json +2 -0
- data/tracks/clojure/exercises/armstrong-numbers/test/armstrong_numbers_test.clj +1 -1
- data/tracks/elixir/.formatter.exs +3 -0
- data/tracks/elixir/exercises/accumulate/accumulate_test.exs +8 -8
- data/tracks/elixir/exercises/acronym/acronym_test.exs +2 -2
- data/tracks/elixir/exercises/acronym/example.exs +3 -4
- data/tracks/elixir/exercises/all-your-base/all-your-base-test.exs +2 -2
- data/tracks/elixir/exercises/all-your-base/example.exs +14 -7
- data/tracks/elixir/exercises/allergies/allergies.exs +2 -4
- data/tracks/elixir/exercises/allergies/allergies_test.exs +17 -11
- data/tracks/elixir/exercises/anagram/anagram.exs +1 -2
- data/tracks/elixir/exercises/anagram/anagram_test.exs +13 -13
- data/tracks/elixir/exercises/anagram/example.exs +2 -1
- data/tracks/elixir/exercises/atbash-cipher/atbash_cipher.exs +2 -2
- data/tracks/elixir/exercises/atbash-cipher/atbash_cipher_test.exs +2 -2
- data/tracks/elixir/exercises/bank-account/bank_account_test.exs +10 -5
- data/tracks/elixir/exercises/beer-song/beer_song.exs +2 -2
- data/tracks/elixir/exercises/beer-song/beer_song_test.exs +225 -225
- data/tracks/elixir/exercises/beer-song/example.exs +5 -3
- data/tracks/elixir/exercises/binary-search-tree/binary_search_tree_test.exs +2 -2
- data/tracks/elixir/exercises/binary-search-tree/example.exs +1 -1
- data/tracks/elixir/exercises/binary-search/binary_search.exs +0 -1
- data/tracks/elixir/exercises/binary-search/binary_search_test.exs +2 -2
- data/tracks/elixir/exercises/binary-search/example.exs +3 -1
- data/tracks/elixir/exercises/binary/binary.exs +1 -1
- data/tracks/elixir/exercises/binary/binary_test.exs +2 -2
- data/tracks/elixir/exercises/binary/example.exs +2 -2
- data/tracks/elixir/exercises/bob/bob.exs +1 -2
- data/tracks/elixir/exercises/bob/bob_test.exs +2 -2
- data/tracks/elixir/exercises/bowling/bowling.exs +2 -3
- data/tracks/elixir/exercises/bowling/bowling_test.exs +54 -275
- data/tracks/elixir/exercises/bowling/example.exs +24 -10
- data/tracks/elixir/exercises/bracket-push/bracket_push.exs +1 -2
- data/tracks/elixir/exercises/bracket-push/bracket_push_test.exs +5 -3
- data/tracks/elixir/exercises/bracket-push/example.exs +8 -3
- data/tracks/elixir/exercises/change/change.exs +1 -2
- data/tracks/elixir/exercises/change/change_test.exs +2 -2
- data/tracks/elixir/exercises/change/example.exs +5 -1
- data/tracks/elixir/exercises/clock/clock_test.exs +8 -8
- data/tracks/elixir/exercises/clock/example.exs +5 -3
- data/tracks/elixir/exercises/collatz-conjecture/collatz_conjecture.exs +0 -1
- data/tracks/elixir/exercises/collatz-conjecture/collatz_conjecture_test.exs +3 -3
- data/tracks/elixir/exercises/collatz-conjecture/example.exs +1 -1
- data/tracks/elixir/exercises/connect/connect.exs +1 -2
- data/tracks/elixir/exercises/connect/connect_test.exs +40 -30
- data/tracks/elixir/exercises/connect/example.exs +12 -10
- data/tracks/elixir/exercises/crypto-square/crypto_square.exs +1 -2
- data/tracks/elixir/exercises/crypto-square/crypto_square_test.exs +2 -2
- data/tracks/elixir/exercises/crypto-square/example.exs +6 -5
- data/tracks/elixir/exercises/custom-set/custom_set.exs +1 -1
- data/tracks/elixir/exercises/custom-set/custom_set_test.exs +2 -2
- data/tracks/elixir/exercises/custom-set/example.exs +5 -4
- data/tracks/elixir/exercises/diamond/diamond.exs +1 -2
- data/tracks/elixir/exercises/diamond/diamond_test.exs +20 -18
- data/tracks/elixir/exercises/diamond/example.exs +10 -10
- data/tracks/elixir/exercises/difference-of-squares/difference_of_squares.exs +1 -5
- data/tracks/elixir/exercises/difference-of-squares/difference_of_squares_test.exs +5 -6
- data/tracks/elixir/exercises/difference-of-squares/example.exs +3 -4
- data/tracks/elixir/exercises/diffie-hellman/diffie_hellman.exs +7 -3
- data/tracks/elixir/exercises/diffie-hellman/diffie_hellman_test.exs +43 -23
- data/tracks/elixir/exercises/diffie-hellman/example.exs +10 -6
- data/tracks/elixir/exercises/dominoes/dominoes.exs +0 -1
- data/tracks/elixir/exercises/dominoes/dominoes_test.exs +16 -6
- data/tracks/elixir/exercises/dominoes/example.exs +9 -5
- data/tracks/elixir/exercises/dot-dsl/dot.exs +0 -1
- data/tracks/elixir/exercises/dot-dsl/dot_dsl_test.exs +107 -58
- data/tracks/elixir/exercises/dot-dsl/example.exs +18 -10
- data/tracks/elixir/exercises/etl/etl.exs +0 -1
- data/tracks/elixir/exercises/etl/etl_test.exs +34 -13
- data/tracks/elixir/exercises/etl/example.exs +6 -6
- data/tracks/elixir/exercises/flatten-array/flatten_array.exs +0 -1
- data/tracks/elixir/exercises/flatten-array/flatten_array_test.exs +8 -8
- data/tracks/elixir/exercises/forth/example.exs +5 -5
- data/tracks/elixir/exercises/forth/forth.exs +6 -9
- data/tracks/elixir/exercises/forth/forth_test.exs +107 -64
- data/tracks/elixir/exercises/gigasecond/example.exs +1 -1
- data/tracks/elixir/exercises/gigasecond/gigasecond.exs +2 -2
- data/tracks/elixir/exercises/gigasecond/gigasecond_test.exs +2 -2
- data/tracks/elixir/exercises/grade-school/example.exs +3 -3
- data/tracks/elixir/exercises/grade-school/grade_school_test.exs +26 -22
- data/tracks/elixir/exercises/grade-school/school.exs +3 -6
- data/tracks/elixir/exercises/grains/example.exs +10 -3
- data/tracks/elixir/exercises/grains/grains.exs +0 -2
- data/tracks/elixir/exercises/grains/grains_test.exs +16 -14
- data/tracks/elixir/exercises/grep/example.exs +22 -18
- data/tracks/elixir/exercises/grep/grep.exs +1 -2
- data/tracks/elixir/exercises/grep/grep_test.exs +108 -112
- data/tracks/elixir/exercises/hamming/example.exs +3 -2
- data/tracks/elixir/exercises/hamming/hamming_test.exs +7 -4
- data/tracks/elixir/exercises/hello-world/example.exs +1 -1
- data/tracks/elixir/exercises/hello-world/hello_world.exs +1 -1
- data/tracks/elixir/exercises/hello-world/hello_world_test.exs +2 -2
- data/tracks/elixir/exercises/hexadecimal/example.exs +8 -7
- data/tracks/elixir/exercises/hexadecimal/hexadecimal.exs +0 -1
- data/tracks/elixir/exercises/hexadecimal/hexadecimal_test.exs +3 -3
- data/tracks/elixir/exercises/isbn-verifier/example.exs +1 -1
- data/tracks/elixir/exercises/isbn-verifier/isbn_verifier.exs +1 -2
- data/tracks/elixir/exercises/isbn-verifier/isbn_verifier_test.exs +2 -2
- data/tracks/elixir/exercises/isogram/example.exs +5 -5
- data/tracks/elixir/exercises/isogram/isogram.exs +1 -3
- data/tracks/elixir/exercises/isogram/isogram_test.exs +2 -3
- data/tracks/elixir/exercises/kindergarten-garden/example.exs +15 -3
- data/tracks/elixir/exercises/kindergarten-garden/garden_test.exs +17 -4
- data/tracks/elixir/exercises/largest-series-product/example.exs +10 -9
- data/tracks/elixir/exercises/largest-series-product/largest_series_product.exs +1 -3
- data/tracks/elixir/exercises/largest-series-product/largest_series_product_test.exs +6 -4
- data/tracks/elixir/exercises/leap/example.exs +2 -2
- data/tracks/elixir/exercises/leap/leap.exs +0 -1
- data/tracks/elixir/exercises/leap/leap_test.exs +2 -2
- data/tracks/elixir/exercises/list-ops/example.exs +10 -9
- data/tracks/elixir/exercises/list-ops/list_ops.exs +1 -8
- data/tracks/elixir/exercises/list-ops/list_ops_test.exs +22 -25
- data/tracks/elixir/exercises/luhn/example.exs +16 -17
- data/tracks/elixir/exercises/luhn/luhn.exs +0 -2
- data/tracks/elixir/exercises/luhn/luhn_test.exs +2 -2
- data/tracks/elixir/exercises/markdown/example.exs +40 -14
- data/tracks/elixir/exercises/markdown/markdown.exs +8 -4
- data/tracks/elixir/exercises/markdown/markdown_test.exs +6 -3
- data/tracks/elixir/exercises/matrix/example.exs +6 -6
- data/tracks/elixir/exercises/matrix/matrix.exs +0 -1
- data/tracks/elixir/exercises/matrix/matrix_test.exs +11 -11
- data/tracks/elixir/exercises/meetup/example.exs +20 -13
- data/tracks/elixir/exercises/meetup/meetup.exs +8 -4
- data/tracks/elixir/exercises/meetup/meetup_test.exs +2 -2
- data/tracks/elixir/exercises/minesweeper/minesweeper.exs +1 -3
- data/tracks/elixir/exercises/minesweeper/minesweeper_test.exs +7 -21
- data/tracks/elixir/exercises/nth-prime/example.exs +7 -7
- data/tracks/elixir/exercises/nth-prime/nth_prime.exs +0 -1
- data/tracks/elixir/exercises/nth-prime/nth_prime_test.exs +3 -3
- data/tracks/elixir/exercises/nucleotide-count/example.exs +4 -3
- data/tracks/elixir/exercises/nucleotide-count/nucleotide_count.exs +0 -3
- data/tracks/elixir/exercises/nucleotide-count/nucleotide_count_test.exs +2 -2
- data/tracks/elixir/exercises/ocr-numbers/example.exs +3 -3
- data/tracks/elixir/exercises/ocr-numbers/ocr_numbers.exs +1 -2
- data/tracks/elixir/exercises/ocr-numbers/ocr_numbers_test.exs +54 -70
- data/tracks/elixir/exercises/palindrome-products/example.exs +3 -6
- data/tracks/elixir/exercises/palindrome-products/palindrome_products.exs +0 -1
- data/tracks/elixir/exercises/palindrome-products/palindrome_products_test.exs +8 -8
- data/tracks/elixir/exercises/pangram/pangram.exs +1 -1
- data/tracks/elixir/exercises/pangram/pangram_test.exs +5 -3
- data/tracks/elixir/exercises/parallel-letter-frequency/example.exs +7 -5
- data/tracks/elixir/exercises/parallel-letter-frequency/frequency.exs +1 -2
- data/tracks/elixir/exercises/parallel-letter-frequency/parallel_letter_frequency_test.exs +3 -4
- data/tracks/elixir/exercises/pascals-triangle/example.exs +2 -1
- data/tracks/elixir/exercises/pascals-triangle/pascals_triangle_test.exs +26 -8
- data/tracks/elixir/exercises/perfect-numbers/example.exs +8 -6
- data/tracks/elixir/exercises/perfect-numbers/perfect_numbers.exs +1 -2
- data/tracks/elixir/exercises/perfect-numbers/perfect_numbers_test.exs +18 -17
- data/tracks/elixir/exercises/phone-number/example.exs +19 -11
- data/tracks/elixir/exercises/phone-number/phone_number.exs +3 -3
- data/tracks/elixir/exercises/phone-number/phone_number_test.exs +2 -2
- data/tracks/elixir/exercises/pig-latin/pig_latin.exs +0 -1
- data/tracks/elixir/exercises/pig-latin/pig_latin_test.exs +3 -3
- data/tracks/elixir/exercises/poker/example.exs +104 -41
- data/tracks/elixir/exercises/poker/poker.exs +0 -1
- data/tracks/elixir/exercises/poker/poker_test.exs +7 -5
- data/tracks/elixir/exercises/prime-factors/example.exs +4 -8
- data/tracks/elixir/exercises/prime-factors/prime_factors.exs +0 -1
- data/tracks/elixir/exercises/prime-factors/prime_factors_test.exs +5 -5
- data/tracks/elixir/exercises/protein-translation/example.exs +14 -12
- data/tracks/elixir/exercises/protein-translation/protein_translation.exs +2 -3
- data/tracks/elixir/exercises/protein-translation/protein_translation_test.exs +26 -26
- data/tracks/elixir/exercises/pythagorean-triplet/example.exs +5 -4
- data/tracks/elixir/exercises/pythagorean-triplet/pythagorean_triplet.exs +0 -5
- data/tracks/elixir/exercises/pythagorean-triplet/pythagorean_triplet_test.exs +3 -3
- data/tracks/elixir/exercises/queen-attack/example.exs +9 -7
- data/tracks/elixir/exercises/queen-attack/queen_attack.exs +1 -4
- data/tracks/elixir/exercises/rail-fence-cipher/example.exs +18 -15
- data/tracks/elixir/exercises/rail-fence-cipher/rail_fence_cipher.exs +2 -4
- data/tracks/elixir/exercises/rail-fence-cipher/rail_fence_cipher_test.exs +2 -2
- data/tracks/elixir/exercises/raindrops/example.exs +3 -2
- data/tracks/elixir/exercises/raindrops/raindrops.exs +1 -2
- data/tracks/elixir/exercises/raindrops/raindrops_test.exs +2 -2
- data/tracks/elixir/exercises/rna-transcription/example.exs +1 -1
- data/tracks/elixir/exercises/rna-transcription/rna_transcription.exs +0 -1
- data/tracks/elixir/exercises/rna-transcription/rna_transcription_test.exs +2 -2
- data/tracks/elixir/exercises/robot-simulator/example.exs +33 -19
- data/tracks/elixir/exercises/robot-simulator/robot_simulator.exs +3 -5
- data/tracks/elixir/exercises/robot-simulator/robot_simulator_test.exs +26 -25
- data/tracks/elixir/exercises/roman-numerals/example.exs +14 -13
- data/tracks/elixir/exercises/roman-numerals/roman.exs +1 -1
- data/tracks/elixir/exercises/roman-numerals/roman_numerals_test.exs +2 -2
- data/tracks/elixir/exercises/rotational-cipher/example.exs +12 -8
- data/tracks/elixir/exercises/rotational-cipher/rotational_cipher.exs +0 -1
- data/tracks/elixir/exercises/rotational-cipher/rotational_cipher_test.exs +6 -4
- data/tracks/elixir/exercises/run-length-encoding/example.exs +20 -8
- data/tracks/elixir/exercises/run-length-encoding/rle.exs +2 -4
- data/tracks/elixir/exercises/run-length-encoding/rle_test.exs +6 -4
- data/tracks/elixir/exercises/saddle-points/example.exs +4 -3
- data/tracks/elixir/exercises/saddle-points/saddle_points.exs +0 -3
- data/tracks/elixir/exercises/saddle-points/saddle_points_test.exs +2 -2
- data/tracks/elixir/exercises/say/say.exs +1 -1
- data/tracks/elixir/exercises/say/say_test.exs +5 -3
- data/tracks/elixir/exercises/scale-generator/example.exs +20 -9
- data/tracks/elixir/exercises/scale-generator/scale_generator.exs +2 -2
- data/tracks/elixir/exercises/scale-generator/scale_generator_test.exs +16 -17
- data/tracks/elixir/exercises/scrabble-score/scrabble.exs +1 -2
- data/tracks/elixir/exercises/scrabble-score/scrabble_score_test.exs +2 -2
- data/tracks/elixir/exercises/secret-handshake/example.exs +4 -4
- data/tracks/elixir/exercises/secret-handshake/secret_handshake.exs +0 -1
- data/tracks/elixir/exercises/secret-handshake/secret_handshake_test.exs +3 -3
- data/tracks/elixir/exercises/series/example.exs +2 -2
- data/tracks/elixir/exercises/series/series.exs +0 -1
- data/tracks/elixir/exercises/series/series_test.exs +3 -4
- data/tracks/elixir/exercises/sieve/example.exs +4 -5
- data/tracks/elixir/exercises/sieve/sieve.exs +0 -3
- data/tracks/elixir/exercises/sieve/sieve_test.exs +173 -21
- data/tracks/elixir/exercises/simple-cipher/example.exs +8 -8
- data/tracks/elixir/exercises/simple-cipher/simple_cipher.exs +0 -1
- data/tracks/elixir/exercises/simple-cipher/simple_cipher_test.exs +3 -4
- data/tracks/elixir/exercises/simple-linked-list/example.exs +3 -1
- data/tracks/elixir/exercises/simple-linked-list/linked_list_test.exs +5 -2
- data/tracks/elixir/exercises/space-age/example.exs +5 -6
- data/tracks/elixir/exercises/space-age/space_age.exs +9 -3
- data/tracks/elixir/exercises/space-age/space_age_test.exs +2 -2
- data/tracks/elixir/exercises/spiral-matrix/example.exs +10 -5
- data/tracks/elixir/exercises/spiral-matrix/spiral.exs +0 -1
- data/tracks/elixir/exercises/spiral-matrix/spiral_test.exs +21 -21
- data/tracks/elixir/exercises/strain/example.exs +5 -4
- data/tracks/elixir/exercises/strain/strain.exs +2 -2
- data/tracks/elixir/exercises/strain/strain_test.exs +12 -7
- data/tracks/elixir/exercises/sublist/example.exs +11 -7
- data/tracks/elixir/exercises/sublist/sublist.exs +0 -1
- data/tracks/elixir/exercises/sublist/sublist_test.exs +16 -18
- data/tracks/elixir/exercises/sum-of-multiples/example.exs +3 -4
- data/tracks/elixir/exercises/sum-of-multiples/sum_of_multiples.exs +0 -1
- data/tracks/elixir/exercises/sum-of-multiples/sum_of_multiples_test.exs +4 -4
- data/tracks/elixir/exercises/test_helper.exs +4 -4
- data/tracks/elixir/exercises/tournament/example.exs +20 -13
- data/tracks/elixir/exercises/tournament/tournament.exs +0 -1
- data/tracks/elixir/exercises/tournament/tournament_test.exs +37 -30
- data/tracks/elixir/exercises/transpose/example.exs +4 -4
- data/tracks/elixir/exercises/transpose/transpose.exs +1 -1
- data/tracks/elixir/exercises/transpose/transpose_test.exs +89 -156
- data/tracks/elixir/exercises/triangle/example.exs +7 -7
- data/tracks/elixir/exercises/triangle/triangle.exs +1 -2
- data/tracks/elixir/exercises/triangle/triangle_test.exs +17 -17
- data/tracks/elixir/exercises/twelve-days/example.exs +10 -6
- data/tracks/elixir/exercises/twelve-days/twelve_days.exs +1 -2
- data/tracks/elixir/exercises/twelve-days/twelve_days_test.exs +55 -45
- data/tracks/elixir/exercises/word-count/example.exs +5 -5
- data/tracks/elixir/exercises/word-count/word_count.exs +1 -2
- data/tracks/elixir/exercises/word-count/word_count_test.exs +5 -5
- data/tracks/elixir/exercises/wordy/example.exs +13 -14
- data/tracks/elixir/exercises/wordy/wordy.exs +1 -4
- data/tracks/elixir/exercises/wordy/wordy_test.exs +2 -2
- data/tracks/elixir/exercises/zipper/example.exs +48 -37
- data/tracks/elixir/exercises/zipper/zipper.exs +20 -14
- data/tracks/elixir/exercises/zipper/zipper_test.exs +19 -20
- data/tracks/go/.travis.yml +1 -1
- data/tracks/go/exercises/paasio/paasio_test.go +76 -0
- data/tracks/ocaml/exercises/acronym/test.ml +3 -5
- data/tracks/ocaml/exercises/all-your-base/test.ml +2 -2
- data/tracks/ocaml/exercises/anagram/test.ml +1 -9
- data/tracks/ocaml/exercises/atbash-cipher/test.ml +1 -1
- data/tracks/ocaml/exercises/binary-search/test.ml +1 -1
- data/tracks/ocaml/exercises/bob/test.ml +1 -1
- data/tracks/ocaml/exercises/bracket-push/test.ml +1 -1
- data/tracks/ocaml/exercises/connect/test.ml +1 -1
- data/tracks/ocaml/exercises/difference-of-squares/test.ml +1 -1
- data/tracks/ocaml/exercises/dominoes/test.ml +1 -1
- data/tracks/ocaml/exercises/hello-world/test.ml +1 -1
- data/tracks/ocaml/exercises/leap/test.ml +2 -2
- data/tracks/ocaml/exercises/luhn/test.ml +2 -2
- data/tracks/ocaml/exercises/pangram/test.ml +1 -1
- data/tracks/ocaml/exercises/phone-number/test.ml +7 -3
- data/tracks/ocaml/exercises/prime-factors/test.ml +1 -1
- data/tracks/ocaml/exercises/raindrops/test.ml +1 -1
- data/tracks/ocaml/exercises/react/example.ml +1 -1
- data/tracks/ocaml/exercises/roman-numerals/test.ml +3 -1
- data/tracks/ocaml/exercises/run-length-encoding/test.ml +1 -1
- data/tracks/ocaml/exercises/space-age/test.ml +1 -1
- data/tracks/ocaml/exercises/word-count/test.ml +1 -1
- data/tracks/swift/circle.yml +21 -2
- metadata +3 -2
@@ -2,9 +2,9 @@ defmodule Gigasecond do
|
|
2
2
|
@doc """
|
3
3
|
Calculate a date one billion seconds after an input date.
|
4
4
|
"""
|
5
|
-
@spec from({{pos_integer, pos_integer, pos_integer}, {pos_integer, pos_integer, pos_integer}}) ::
|
5
|
+
@spec from({{pos_integer, pos_integer, pos_integer}, {pos_integer, pos_integer, pos_integer}}) ::
|
6
|
+
:calendar.datetime()
|
6
7
|
|
7
8
|
def from({{year, month, day}, {hours, minutes, seconds}}) do
|
8
|
-
|
9
9
|
end
|
10
10
|
end
|
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("gigasecond.exs", __DIR__)
|
3
3
|
end
|
4
4
|
|
5
|
-
ExUnit.start
|
6
|
-
ExUnit.configure
|
5
|
+
ExUnit.start()
|
6
|
+
ExUnit.configure(exclude: :pending, trace: true)
|
7
7
|
|
8
8
|
defmodule GigasecondTest do
|
9
9
|
use ExUnit.Case
|
@@ -1,6 +1,6 @@
|
|
1
1
|
defmodule School do
|
2
2
|
def add(db, name, grade) do
|
3
|
-
Map.update(db, grade, [name], &[name
|
3
|
+
Map.update(db, grade, [name], &[name | &1])
|
4
4
|
end
|
5
5
|
|
6
6
|
def grade(db, grade) do
|
@@ -9,7 +9,7 @@ defmodule School do
|
|
9
9
|
|
10
10
|
def sort(db) do
|
11
11
|
db
|
12
|
-
|> Enum.map(fn {k,v} -> {k, Enum.sort(v)} end)
|
13
|
-
|> Enum.sort
|
12
|
+
|> Enum.map(fn {k, v} -> {k, Enum.sort(v)} end)
|
13
|
+
|> Enum.sort()
|
14
14
|
end
|
15
15
|
end
|
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("school.exs", __DIR__)
|
3
3
|
end
|
4
4
|
|
5
|
-
ExUnit.start
|
6
|
-
ExUnit.configure
|
5
|
+
ExUnit.start()
|
6
|
+
ExUnit.configure(exclude: :pending, trace: true)
|
7
7
|
|
8
8
|
defmodule SchoolTest do
|
9
9
|
use ExUnit.Case
|
@@ -12,35 +12,38 @@ defmodule SchoolTest do
|
|
12
12
|
|
13
13
|
test "add student" do
|
14
14
|
actual = School.add(@db, "Aimee", 2)
|
15
|
-
assert actual == %{2 =>["Aimee"]}
|
15
|
+
assert actual == %{2 => ["Aimee"]}
|
16
16
|
end
|
17
17
|
|
18
18
|
@tag :pending
|
19
19
|
test "add more students in same class" do
|
20
|
-
actual =
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
actual =
|
21
|
+
@db
|
22
|
+
|> School.add("James", 2)
|
23
|
+
|> School.add("Blair", 2)
|
24
|
+
|> School.add("Paul", 2)
|
24
25
|
|
25
26
|
assert Enum.sort(actual[2]) == ["Blair", "James", "Paul"]
|
26
27
|
end
|
27
28
|
|
28
29
|
@tag :pending
|
29
30
|
test "add students to different grades" do
|
30
|
-
actual =
|
31
|
-
|
32
|
-
|
31
|
+
actual =
|
32
|
+
@db
|
33
|
+
|> School.add("Chelsea", 3)
|
34
|
+
|> School.add("Logan", 7)
|
33
35
|
|
34
36
|
assert actual == %{3 => ["Chelsea"], 7 => ["Logan"]}
|
35
37
|
end
|
36
38
|
|
37
39
|
@tag :pending
|
38
40
|
test "get students in a grade" do
|
39
|
-
actual =
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
41
|
+
actual =
|
42
|
+
@db
|
43
|
+
|> School.add("Bradley", 5)
|
44
|
+
|> School.add("Franklin", 5)
|
45
|
+
|> School.add("Jeff", 1)
|
46
|
+
|> School.grade(5)
|
44
47
|
|
45
48
|
assert Enum.sort(actual) == ["Bradley", "Franklin"]
|
46
49
|
end
|
@@ -52,13 +55,14 @@ defmodule SchoolTest do
|
|
52
55
|
|
53
56
|
@tag :pending
|
54
57
|
test "sort school by grade and by student name" do
|
55
|
-
actual =
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
58
|
+
actual =
|
59
|
+
@db
|
60
|
+
|> School.add("Bart", 4)
|
61
|
+
|> School.add("Jennifer", 4)
|
62
|
+
|> School.add("Christopher", 4)
|
63
|
+
|> School.add("Kareem", 6)
|
64
|
+
|> School.add("Kyle", 3)
|
65
|
+
|> School.sort()
|
62
66
|
|
63
67
|
expected = [
|
64
68
|
{3, ["Kyle"]},
|
@@ -8,24 +8,21 @@ defmodule School do
|
|
8
8
|
@doc """
|
9
9
|
Add a student to a particular grade in school.
|
10
10
|
"""
|
11
|
-
@spec add(map, String.t, integer) :: map
|
11
|
+
@spec add(map, String.t(), integer) :: map
|
12
12
|
def add(db, name, grade) do
|
13
|
-
|
14
13
|
end
|
15
14
|
|
16
15
|
@doc """
|
17
16
|
Return the names of the students in a particular grade.
|
18
17
|
"""
|
19
|
-
@spec grade(map, integer) :: [String.t]
|
18
|
+
@spec grade(map, integer) :: [String.t()]
|
20
19
|
def grade(db, grade) do
|
21
|
-
|
22
20
|
end
|
23
21
|
|
24
22
|
@doc """
|
25
23
|
Sorts the school by grade and name.
|
26
24
|
"""
|
27
|
-
@spec sort(map) :: [{integer, [String.t]}]
|
25
|
+
@spec sort(map) :: [{integer, [String.t()]}]
|
28
26
|
def sort(db) do
|
29
|
-
|
30
27
|
end
|
31
28
|
end
|
@@ -1,6 +1,13 @@
|
|
1
1
|
defmodule Grains do
|
2
2
|
use Bitwise, only_operators: true
|
3
|
-
def square(number) when number in
|
4
|
-
def square(_), do: {
|
5
|
-
|
3
|
+
def square(number) when number in 1..64, do: {:ok, 1 <<< (number - 1)}
|
4
|
+
def square(_), do: {:error, "The requested square must be between 1 and 64 (inclusive)"}
|
5
|
+
|
6
|
+
def total,
|
7
|
+
do:
|
8
|
+
{:ok,
|
9
|
+
Enum.reduce(1..64, 0, fn n, acc ->
|
10
|
+
{:ok, sq} = square(n)
|
11
|
+
acc + sq
|
12
|
+
end)}
|
6
13
|
end
|
@@ -2,8 +2,8 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("grains.exs", __DIR__)
|
3
3
|
end
|
4
4
|
|
5
|
-
ExUnit.start
|
6
|
-
ExUnit.configure
|
5
|
+
ExUnit.start()
|
6
|
+
ExUnit.configure(exclude: :pending, trace: true)
|
7
7
|
|
8
8
|
# NOTE: :math.pow/2 doesn't do what you'd expect:
|
9
9
|
# `:math.pow(2, 64) == :math.pow(2, 64) - 1` is true.
|
@@ -16,57 +16,59 @@ defmodule GrainsTest do
|
|
16
16
|
|
17
17
|
# @tag :pending
|
18
18
|
test "square 1" do
|
19
|
-
assert Grains.square(1) === {
|
19
|
+
assert Grains.square(1) === {:ok, 1}
|
20
20
|
end
|
21
21
|
|
22
22
|
@tag :pending
|
23
23
|
test "square 2" do
|
24
|
-
assert Grains.square(2) === {
|
24
|
+
assert Grains.square(2) === {:ok, 2}
|
25
25
|
end
|
26
26
|
|
27
27
|
@tag :pending
|
28
28
|
test "square 3" do
|
29
|
-
assert Grains.square(3) === {
|
29
|
+
assert Grains.square(3) === {:ok, 4}
|
30
30
|
end
|
31
31
|
|
32
32
|
@tag :pending
|
33
33
|
test "square 4" do
|
34
|
-
assert Grains.square(4) === {
|
34
|
+
assert Grains.square(4) === {:ok, 8}
|
35
35
|
end
|
36
36
|
|
37
37
|
@tag :pending
|
38
38
|
test "square 16" do
|
39
|
-
assert Grains.square(16) === {
|
39
|
+
assert Grains.square(16) === {:ok, 32768}
|
40
40
|
end
|
41
41
|
|
42
42
|
@tag :pending
|
43
43
|
test "square 32" do
|
44
|
-
assert Grains.square(32) === {
|
44
|
+
assert Grains.square(32) === {:ok, 2_147_483_648}
|
45
45
|
end
|
46
46
|
|
47
47
|
@tag :pending
|
48
48
|
test "square 64" do
|
49
|
-
assert Grains.square(64) === {
|
49
|
+
assert Grains.square(64) === {:ok, 9_223_372_036_854_775_808}
|
50
50
|
end
|
51
51
|
|
52
52
|
@tag :pending
|
53
53
|
test "total grains" do
|
54
|
-
assert Grains.total === {
|
54
|
+
assert Grains.total() === {:ok, 18_446_744_073_709_551_615}
|
55
55
|
end
|
56
56
|
|
57
57
|
@tag :pending
|
58
58
|
test "square greater than 64 returns an error" do
|
59
|
-
assert Grains.square(65) ===
|
59
|
+
assert Grains.square(65) ===
|
60
|
+
{:error, "The requested square must be between 1 and 64 (inclusive)"}
|
60
61
|
end
|
61
62
|
|
62
63
|
@tag :pending
|
63
64
|
test "negative square returns an error" do
|
64
|
-
assert Grains.square(-1) ===
|
65
|
+
assert Grains.square(-1) ===
|
66
|
+
{:error, "The requested square must be between 1 and 64 (inclusive)"}
|
65
67
|
end
|
66
68
|
|
67
69
|
@tag :pending
|
68
70
|
test "square 0 returns an error" do
|
69
|
-
assert Grains.square(0) ===
|
71
|
+
assert Grains.square(0) ===
|
72
|
+
{:error, "The requested square must be between 1 and 64 (inclusive)"}
|
70
73
|
end
|
71
|
-
|
72
74
|
end
|
@@ -17,22 +17,25 @@ defmodule Grep do
|
|
17
17
|
defp parse_flags(flags) do
|
18
18
|
flags
|
19
19
|
|> Enum.map(&parse_flag/1)
|
20
|
-
|> Enum.reduce(0, fn
|
20
|
+
|> Enum.reduce(0, fn a, b -> a ||| b end)
|
21
21
|
end
|
22
22
|
|
23
23
|
defp has_flag(flags, flag), do: (flags &&& flag) > 0
|
24
24
|
|
25
25
|
defp is_match(pattern, flags) do
|
26
|
-
pat =
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
26
|
+
pat =
|
27
|
+
if has_flag(flags, @entire_lines) do
|
28
|
+
"^#{pattern}$"
|
29
|
+
else
|
30
|
+
pattern
|
31
|
+
end
|
32
|
+
|
33
|
+
cas =
|
34
|
+
if has_flag(flags, @case_insensitive) do
|
35
|
+
"i"
|
36
|
+
else
|
37
|
+
""
|
38
|
+
end
|
36
39
|
|
37
40
|
regex = Regex.compile!(pat, cas)
|
38
41
|
|
@@ -75,18 +78,19 @@ defmodule Grep do
|
|
75
78
|
|> Enum.map(fmt)
|
76
79
|
end
|
77
80
|
|
78
|
-
@spec grep(String.t, [String.t], [String.t]) :: String.t
|
81
|
+
@spec grep(String.t(), [String.t()], [String.t()]) :: String.t()
|
79
82
|
def grep(pattern, flag_args, files) do
|
80
83
|
flags = parse_flags(flag_args)
|
81
84
|
|
82
|
-
output =
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
85
|
+
output =
|
86
|
+
if has_flag(flags, @file_name) do
|
87
|
+
process_files(pattern, flags, files)
|
88
|
+
else
|
89
|
+
process_lines(pattern, flags, files)
|
90
|
+
end
|
87
91
|
|
88
92
|
output
|
89
93
|
|> Enum.map(fn l -> "#{l}\n" end)
|
90
|
-
|> Enum.reduce("", fn b,a -> "#{a}#{b}" end)
|
94
|
+
|> Enum.reduce("", fn b, a -> "#{a}#{b}" end)
|
91
95
|
end
|
92
96
|
end
|
@@ -2,14 +2,13 @@ if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
2
|
Code.load_file("grep.exs", __DIR__)
|
3
3
|
end
|
4
4
|
|
5
|
-
ExUnit.start
|
6
|
-
ExUnit.configure
|
5
|
+
ExUnit.start()
|
6
|
+
ExUnit.configure(exclude: :pending, trace: true)
|
7
7
|
|
8
8
|
defmodule GrepTest do
|
9
9
|
use ExUnit.Case
|
10
10
|
|
11
11
|
setup context do
|
12
|
-
|
13
12
|
if context[:files] do
|
14
13
|
File.write!("iliad.txt", """
|
15
14
|
Achilles sing, O Goddess! Peleus' son;
|
@@ -31,8 +30,7 @@ defmodule GrepTest do
|
|
31
30
|
But I beseech your grace that I may know
|
32
31
|
The worst that may befall me in this case,
|
33
32
|
If I refuse to wed Demetrius.
|
34
|
-
"""
|
35
|
-
)
|
33
|
+
""")
|
36
34
|
|
37
35
|
File.write!("paradise-lost.txt", """
|
38
36
|
Of Mans First Disobedience, and the Fruit
|
@@ -45,85 +43,82 @@ defmodule GrepTest do
|
|
45
43
|
That Shepherd, who first taught the chosen Seed
|
46
44
|
""")
|
47
45
|
|
48
|
-
on_exit
|
46
|
+
on_exit(fn ->
|
49
47
|
File.rm!("iliad.txt")
|
50
48
|
File.rm!("midsummer-night.txt")
|
51
49
|
File.rm!("paradise-lost.txt")
|
52
|
-
end
|
50
|
+
end)
|
53
51
|
end
|
54
52
|
end
|
55
53
|
|
56
54
|
@moduletag :files
|
57
55
|
|
58
56
|
describe "grepping a single file" do
|
59
|
-
|
60
57
|
test "one match, no flags" do
|
61
58
|
assert Grep.grep("Agamemnon", [], ["iliad.txt"]) ==
|
62
|
-
|
63
|
-
|
64
|
-
|
59
|
+
"""
|
60
|
+
Of Atreus, Agamemnon, King of men.
|
61
|
+
"""
|
65
62
|
end
|
66
63
|
|
67
64
|
@tag :pending
|
68
65
|
test "one match, print line numbers flag" do
|
69
66
|
assert Grep.grep("Forbidden", ["-n"], ["paradise-lost.txt"]) ==
|
70
|
-
|
71
|
-
|
72
|
-
|
67
|
+
"""
|
68
|
+
2:Of that Forbidden Tree, whose mortal tast
|
69
|
+
"""
|
73
70
|
end
|
74
71
|
|
75
72
|
@tag :pending
|
76
73
|
test "one match, case-insensitive flag" do
|
77
74
|
assert Grep.grep("FORBIDDEN", ["-i"], ["paradise-lost.txt"]) ==
|
78
|
-
|
79
|
-
|
80
|
-
|
75
|
+
"""
|
76
|
+
Of that Forbidden Tree, whose mortal tast
|
77
|
+
"""
|
81
78
|
end
|
82
79
|
|
83
80
|
@tag :pending
|
84
81
|
test "one match, print file names flag" do
|
85
82
|
assert Grep.grep("Forbidden", ["-l"], ["paradise-lost.txt"]) ==
|
86
|
-
|
87
|
-
|
88
|
-
|
83
|
+
"""
|
84
|
+
paradise-lost.txt
|
85
|
+
"""
|
89
86
|
end
|
90
87
|
|
91
88
|
@tag :pending
|
92
89
|
test "one match, match entire lines flag" do
|
93
|
-
assert Grep.grep("With loss of Eden, till one greater Man",
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
"""
|
90
|
+
assert Grep.grep("With loss of Eden, till one greater Man", ["-x"], ["paradise-lost.txt"]) ==
|
91
|
+
"""
|
92
|
+
With loss of Eden, till one greater Man
|
93
|
+
"""
|
98
94
|
end
|
99
95
|
|
100
96
|
@tag :pending
|
101
97
|
test "one match, multiple flags" do
|
102
|
-
assert Grep.grep("OF ATREUS, Agamemnon, KIng of MEN.",
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
"""
|
98
|
+
assert Grep.grep("OF ATREUS, Agamemnon, KIng of MEN.", ["-n", "-i", "-x"], ["iliad.txt"]) ==
|
99
|
+
"""
|
100
|
+
9:Of Atreus, Agamemnon, King of men.
|
101
|
+
"""
|
107
102
|
end
|
108
103
|
|
109
104
|
@tag :pending
|
110
105
|
test "several matches, no flags" do
|
111
106
|
assert Grep.grep("may", [], ["midsummer-night.txt"]) ==
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
107
|
+
"""
|
108
|
+
Nor how it may concern my modesty,
|
109
|
+
But I beseech your grace that I may know
|
110
|
+
The worst that may befall me in this case,
|
111
|
+
"""
|
117
112
|
end
|
118
113
|
|
119
114
|
@tag :pending
|
120
115
|
test "several matches, print line numbers flag" do
|
121
116
|
assert Grep.grep("may", ["-n"], ["midsummer-night.txt"]) ==
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
117
|
+
"""
|
118
|
+
3:Nor how it may concern my modesty,
|
119
|
+
5:But I beseech your grace that I may know
|
120
|
+
6:The worst that may befall me in this case,
|
121
|
+
"""
|
127
122
|
end
|
128
123
|
|
129
124
|
@tag :pending
|
@@ -134,22 +129,22 @@ defmodule GrepTest do
|
|
134
129
|
@tag :pending
|
135
130
|
test "several matches, case-insensitive flag" do
|
136
131
|
assert Grep.grep("ACHILLES", ["-i"], ["iliad.txt"]) ==
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
132
|
+
"""
|
133
|
+
Achilles sing, O Goddess! Peleus' son;
|
134
|
+
The noble Chief Achilles from the son
|
135
|
+
"""
|
141
136
|
end
|
142
137
|
|
143
138
|
@tag :pending
|
144
139
|
test "several matches, inverted flag" do
|
145
140
|
assert Grep.grep("Of", ["-v"], ["paradise-lost.txt"]) ==
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
141
|
+
"""
|
142
|
+
Brought Death into the World, and all our woe,
|
143
|
+
With loss of Eden, till one greater Man
|
144
|
+
Restore us, and regain the blissful Seat,
|
145
|
+
Sing Heav'nly Muse, that on the secret top
|
146
|
+
That Shepherd, who first taught the chosen Seed
|
147
|
+
"""
|
153
148
|
end
|
154
149
|
|
155
150
|
@tag :pending
|
@@ -159,101 +154,102 @@ defmodule GrepTest do
|
|
159
154
|
end
|
160
155
|
|
161
156
|
describe "grepping multiples files at once" do
|
162
|
-
|
163
157
|
@tag :pending
|
164
158
|
test "one match, no flags" do
|
165
|
-
assert Grep.grep("Agamemnon", [],
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
"""
|
159
|
+
assert Grep.grep("Agamemnon", [], ["iliad.txt", "midsummer-night.txt", "paradise-lost.txt"]) ==
|
160
|
+
"""
|
161
|
+
iliad.txt:Of Atreus, Agamemnon, King of men.
|
162
|
+
"""
|
170
163
|
end
|
171
164
|
|
172
165
|
@tag :pending
|
173
166
|
test "several matches, no flags" do
|
174
|
-
assert Grep.grep("may", [],
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
"""
|
167
|
+
assert Grep.grep("may", [], ["iliad.txt", "midsummer-night.txt", "paradise-lost.txt"]) ==
|
168
|
+
"""
|
169
|
+
midsummer-night.txt:Nor how it may concern my modesty,
|
170
|
+
midsummer-night.txt:But I beseech your grace that I may know
|
171
|
+
midsummer-night.txt:The worst that may befall me in this case,
|
172
|
+
"""
|
181
173
|
end
|
182
174
|
|
183
175
|
@tag :pending
|
184
176
|
test "several matches, print line numbers flag" do
|
185
|
-
assert Grep.grep("that", ["-n"],
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
"""
|
177
|
+
assert Grep.grep("that", ["-n"], ["iliad.txt", "midsummer-night.txt", "paradise-lost.txt"]) ==
|
178
|
+
"""
|
179
|
+
midsummer-night.txt:5:But I beseech your grace that I may know
|
180
|
+
midsummer-night.txt:6:The worst that may befall me in this case,
|
181
|
+
paradise-lost.txt:2:Of that Forbidden Tree, whose mortal tast
|
182
|
+
paradise-lost.txt:6:Sing Heav'nly Muse, that on the secret top
|
183
|
+
"""
|
193
184
|
end
|
194
185
|
|
195
186
|
@tag :pending
|
196
187
|
test "one match, print file names flag" do
|
197
|
-
assert Grep.grep("who", ["-l"],
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
"""
|
188
|
+
assert Grep.grep("who", ["-l"], ["iliad.txt", "midsummer-night.txt", "paradise-lost.txt"]) ==
|
189
|
+
"""
|
190
|
+
iliad.txt
|
191
|
+
paradise-lost.txt
|
192
|
+
"""
|
203
193
|
end
|
204
194
|
|
205
195
|
@tag :pending
|
206
196
|
test "several matches, case-insensitive flag" do
|
207
|
-
assert Grep.grep("TO", ["-i"],
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
"""
|
197
|
+
assert Grep.grep("TO", ["-i"], ["iliad.txt", "midsummer-night.txt", "paradise-lost.txt"]) ==
|
198
|
+
"""
|
199
|
+
iliad.txt:Caused to Achaia's host, sent many a soul
|
200
|
+
iliad.txt:Illustrious into Ades premature,
|
201
|
+
iliad.txt:And Heroes gave (so stood the will of Jove)
|
202
|
+
iliad.txt:To dogs and to all ravening fowls a prey,
|
203
|
+
midsummer-night.txt:I do entreat your grace to pardon me.
|
204
|
+
midsummer-night.txt:In such a presence here to plead my thoughts;
|
205
|
+
midsummer-night.txt:If I refuse to wed Demetrius.
|
206
|
+
paradise-lost.txt:Brought Death into the World, and all our woe,
|
207
|
+
paradise-lost.txt:Restore us, and regain the blissful Seat,
|
208
|
+
paradise-lost.txt:Sing Heav'nly Muse, that on the secret top
|
209
|
+
"""
|
221
210
|
end
|
222
211
|
|
223
212
|
@tag :pending
|
224
213
|
test "several matches, inverted flag" do
|
225
|
-
assert Grep.grep("a", ["-v"],
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
"""
|
214
|
+
assert Grep.grep("a", ["-v"], ["iliad.txt", "midsummer-night.txt", "paradise-lost.txt"]) ==
|
215
|
+
"""
|
216
|
+
iliad.txt:Achilles sing, O Goddess! Peleus' son;
|
217
|
+
iliad.txt:The noble Chief Achilles from the son
|
218
|
+
midsummer-night.txt:If I refuse to wed Demetrius.
|
219
|
+
"""
|
232
220
|
end
|
233
221
|
|
234
222
|
@tag :pending
|
235
223
|
test "one match, match entire lines flag" do
|
236
|
-
assert Grep.grep("But I beseech your grace that I may know", ["-x"],
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
224
|
+
assert Grep.grep("But I beseech your grace that I may know", ["-x"], [
|
225
|
+
"iliad.txt",
|
226
|
+
"midsummer-night.txt",
|
227
|
+
"paradise-lost.txt"
|
228
|
+
]) ==
|
229
|
+
"""
|
230
|
+
midsummer-night.txt:But I beseech your grace that I may know
|
231
|
+
"""
|
241
232
|
end
|
242
233
|
|
243
234
|
@tag :pending
|
244
235
|
test "one match, multiple flags" do
|
245
|
-
assert Grep.grep("WITH LOSS OF EDEN, TILL ONE GREATER MAN",
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
236
|
+
assert Grep.grep("WITH LOSS OF EDEN, TILL ONE GREATER MAN", ["-n", "-x", "-i"], [
|
237
|
+
"iliad.txt",
|
238
|
+
"midsummer-night.txt",
|
239
|
+
"paradise-lost.txt"
|
240
|
+
]) ==
|
241
|
+
"""
|
242
|
+
paradise-lost.txt:4:With loss of Eden, till one greater Man
|
243
|
+
"""
|
251
244
|
end
|
252
245
|
|
253
246
|
@tag :pending
|
254
247
|
test "no matches, various flags" do
|
255
|
-
assert Grep.grep("Frodo", ["-n", "-l", "-x", "i"],
|
256
|
-
|
248
|
+
assert Grep.grep("Frodo", ["-n", "-l", "-x", "i"], [
|
249
|
+
"iliad.txt",
|
250
|
+
"midsummer-night.txt",
|
251
|
+
"paradise-lost.txt"
|
252
|
+
]) == ""
|
257
253
|
end
|
258
254
|
end
|
259
255
|
end
|