|
1 | 1 | (ns anagram-test
|
2 |
| - (:require [clojure.test :refer [deftest is]] |
| 2 | + (:require [clojure.test :refer [deftest testing is]] |
3 | 3 | anagram))
|
4 | 4 |
|
5 | 5 | (deftest no-matches
|
6 |
| - (is (= [] |
7 |
| - (anagram/anagrams-for "diaper" ["hello" "world" "zombies" "pants"])))) |
| 6 | + (testing "No matches" |
| 7 | + (is (= [] |
| 8 | + (anagram/anagrams-for "diaper" ["hello" "world" "zombies" "pants"]))))) |
8 | 9 |
|
9 |
| -(deftest detect-simple-anagram |
10 |
| - (is (= ["tan"] (anagram/anagrams-for "ant" ["tan" "stand" "at"])))) |
| 10 | +(deftest detects-two-anagrams |
| 11 | + (testing "Detects two anagrams" |
| 12 | + (is (= ["lemons", "melons"] |
| 13 | + (anagram/anagrams-for "solemn" ["lemons", "cherry", "melons"]))))) |
11 | 14 |
|
12 |
| -(deftest does-not-confuse-different-duplicates |
13 |
| - (is (= [] (anagram/anagrams-for "galea" ["eagle"])))) |
| 15 | +(deftest does-not-detect-anagram-subsets |
| 16 | + (testing "Does not detect anagram subsets" |
| 17 | + (is (= [] |
| 18 | + (anagram/anagrams-for "good" ["dog", "goody"]))))) |
14 | 19 |
|
15 |
| -(deftest eliminate-anagram-subsets |
16 |
| - (is (= [] (anagram/anagrams-for "good" ["dog" "goody"])))) |
| 20 | +(deftest detects-anagram |
| 21 | + (testing "Detects anagram" |
| 22 | + (is (= ["inlets"] |
| 23 | + (anagram/anagrams-for "listen" ["enlists", "google", "inlets", "banana"]))))) |
17 | 24 |
|
18 |
| -(deftest detect-anagram |
19 |
| - (is (= ["inlets"] |
20 |
| - (let [coll ["enlists" "google" "inlets" "banana"]] |
21 |
| - (anagram/anagrams-for "listen" coll))))) |
| 25 | +(deftest detects-three-anagrams |
| 26 | + (testing "Detects three anagrams" |
| 27 | + (is (= ["gallery", "regally", "largely"] |
| 28 | + (anagram/anagrams-for "allergy" ["gallery", "ballerina", "regally", "clergy", "largely", "leading"]))))) |
22 | 29 |
|
23 |
| -(deftest multiple-anagrams |
24 |
| - (is (= ["gallery" "regally" "largely"] |
25 |
| - (let [coll ["gallery" "ballerina" "regally" |
26 |
| - "clergy" "largely" "leading"]] |
27 |
| - (anagram/anagrams-for "allergy" coll))))) |
| 30 | +(deftest detects-multiple-anagrams-with-different-case |
| 31 | + (testing "Detects multiple anagrams with different case" |
| 32 | + (is (= ["Eons", "ONES"] |
| 33 | + (anagram/anagrams-for "nose" ["Eons", "ONES"]))))) |
28 | 34 |
|
29 |
| -(deftest case-insensitive-anagrams |
30 |
| - (is (= ["Carthorse"] |
31 |
| - (let [coll ["cashregister" "Carthorse" "radishes"]] |
32 |
| - (anagram/anagrams-for "Orchestra" coll))))) |
| 35 | +(deftest does-not-detect-non-anagrams-with-identical-checksum |
| 36 | + (testing "Does not detect non-anagrams with identical checksum" |
| 37 | + (is (= [] |
| 38 | + (anagram/anagrams-for "mass" ["last"]))))) |
33 | 39 |
|
34 |
| -(deftest word-is-not-own-anagram |
35 |
| - (is (= [] (anagram/anagrams-for "banana" ["banana"])))) |
| 40 | +(deftest detects-anagrams-case-insensitively |
| 41 | + (testing "Detects anagrams case-insensitively" |
| 42 | + (is (= ["Carthorse"] |
| 43 | + (anagram/anagrams-for "Orchestra" ["cashregister", "Carthorse", "radishes"]))))) |
36 | 44 |
|
37 |
| -(deftest capital-word-is-not-own-anagram |
38 |
| - (is (= [] (anagram/anagrams-for "BANANA" ["banana"])))) |
| 45 | +(deftest detects-anagrams-using-case-insensitive-subject |
| 46 | + (testing "Detects anagrams using case-insensitive subject" |
| 47 | + (is (= ["carthorse"] |
| 48 | + (anagram/anagrams-for "Orchestra" ["cashregister", "carthorse", "radishes"]))))) |
| 49 | + |
| 50 | +(deftest detects-anagrams-using-case-insensitive-possible-matches |
| 51 | + (testing "Detects anagrams using case-insensitive possible matches" |
| 52 | + (is (= ["Carthorse"] |
| 53 | + (anagram/anagrams-for "orchestra" ["cashregister", "Carthorse", "radishes"]))))) |
| 54 | + |
| 55 | +(deftest does-not-detect-anagram-if-original-word-is-repeated |
| 56 | + (testing "Does not detect an anagram if the original word is repeated" |
| 57 | + (is (= [] |
| 58 | + (anagram/anagrams-for "go" ["goGoGO"]))))) |
| 59 | + |
| 60 | +(deftest anagrams-must-use-all-letters-exactly-once |
| 61 | + (testing "Anagrams must use all letters exactly once" |
| 62 | + (is (= [] |
| 63 | + (anagram/anagrams-for "tapper" ["patter"]))))) |
| 64 | + |
| 65 | +(deftest words-are-not-anagrams-of-themselves |
| 66 | + (testing "Words are not anagrams of themselves" |
| 67 | + (is (= [] |
| 68 | + (anagram/anagrams-for "BANANA" ["BANANA"]))))) |
| 69 | + |
| 70 | +(deftest words-are-not-anagrams-of-themselves-even-if-letter-case-is-partially-different |
| 71 | + (testing "Words are not anagrams of themselves even if letter case is partially different" |
| 72 | + (is (= [] |
| 73 | + (anagram/anagrams-for "BANANA" ["Banana"]))))) |
| 74 | + |
| 75 | +(deftest words-are-not-anagrams-of-themselves-even-if-letter-case-is-completely-different |
| 76 | + (testing "Words are not anagrams of themselves even if letter case is completely different" |
| 77 | + (is (= [] |
| 78 | + (anagram/anagrams-for "BANANA" ["banana"]))))) |
| 79 | + |
| 80 | +(deftest words-other-than-themselves-can-be-anagrams |
| 81 | + (testing "Words other than themselves can be anagrams" |
| 82 | + (is (= ["Silent"] |
| 83 | + (anagram/anagrams-for "LISTEN" ["LISTEN", "Silent"]))))) |
| 84 | + |
| 85 | +(deftest handles-greek-letters |
| 86 | + (testing "Handles case of greek letters" |
| 87 | + (is (= ["ΒΓΑ", "γβα"] |
| 88 | + (anagram/anagrams-for "ΑΒΓ" ["ΒΓΑ", "ΒΓΔ", "γβα", "αβγ"]))))) |
| 89 | + |
| 90 | +(deftest different-characters-may-have-same-bytes |
| 91 | + (testing "Different characters may have the same bytes" |
| 92 | + (is (= [] |
| 93 | + (anagram/anagrams-for "a⬂" ["€a"]))))) |
0 commit comments