Skip to content

Commit

Permalink
Upgraded tests for anagram exercise.
Browse files Browse the repository at this point in the history
  • Loading branch information
SimaDovakin committed Jan 18, 2025
1 parent 2686ef2 commit e368b57
Show file tree
Hide file tree
Showing 2 changed files with 146 additions and 97 deletions.
34 changes: 17 additions & 17 deletions exercises/practice/anagram/.meta/testAnnotation.json
Original file line number Diff line number Diff line change
@@ -1,66 +1,66 @@
[
{
"name": "no matches",
"test_code": "let\n actual = findAnagrams \"diaper\" [\"hello\", \"world\", \"zombies\", \"pants\"]\n Test.label.deprecated \"no matches\" <| Test.expect (actual === [])"
"test_code": "verify do\n labeled \"no matches\" do\n expected = []\n actual = findAnagrams \"diaper\" [\"hello\", \"world\", \"zombies\", \"pants\"]\n label \"expected\" expected\n label \"actual\" actual\n ensureEqual expected actual"
},
{
"name": "detects two anagrams",
"test_code": "let\n actual = findAnagrams \"solemn\" [\"lemons\",\"cherry\",\"melons\"]\n expected = [\"lemons\",\"melons\"]\n Test.label.deprecated \"detects two anagrams\" <| Test.expect (actual === expected)"
"test_code": "verify do\n labeled \"detects two anagrams\" do\n expected = [\"lemons\",\"melons\"]\n actual = findAnagrams \"solemn\" [\"lemons\",\"cherry\",\"melons\"]\n label \"expected\" expected\n label \"actual\" actual\n ensureEqual expected actual"
},
{
"name": "does not detect anagram subsets",
"test_code": "let\n actual = findAnagrams \"good\" [\"dog\",\"goody\"]\n expected = []\n Test.label.deprecated \"does not detect anagram subsets\" <| Test.expect (actual === expected)"
"test_code": "verify do\n labeled \"does not detect anagram subsets\" do\n expected = []\n actual = findAnagrams \"good\" [\"dog\",\"goody\"]\n label \"expected\" expected\n label \"actual\" actual\n ensureEqual expected actual"
},
{
"name": "detects anagram",
"test_code": "let\n actual = findAnagrams \"listen\" [\"enlists\",\"google\",\"inlets\",\"banana\"]\n expected = [\"inlets\"]\n Test.label.deprecated \"detects anagram\" <| Test.expect (actual === expected)"
"test_code": "verify do\n labeled \"detects anagram\" do\n expected = [\"inlets\"]\n actual = findAnagrams \"listen\" [\"enlists\",\"google\",\"inlets\",\"banana\"]\n label \"expected\" expected\n label \"actual\" actual\n ensureEqual expected actual"
},
{
"name": "detects three anagrams",
"test_code": "let\n actual = findAnagrams \"allergy\" [\"gallery\",\"ballerina\",\"regally\",\"clergy\",\"largely\",\"leading\"]\n expected = [\"gallery\",\"regally\",\"largely\"]\n Test.label.deprecated \"detects three anagrams\" <| Test.expect (actual === expected)"
"test_code": "verify do\n labeled \"detects three anagrams\" do\n expected = [\"gallery\",\"regally\",\"largely\"]\n actual = findAnagrams \"allergy\" [\"gallery\",\"ballerina\",\"regally\",\"clergy\",\"largely\",\"leading\"]\n label \"expected\" expected\n label \"actual\" actual\n ensureEqual expected actual"
},
{
"name": "detects multiple anagrams with different case",
"test_code": "let\n actual = findAnagrams \"nose\" [\"Eons\",\"ONES\"]\n expected = [\"Eons\",\"ONES\"]\n Test.label.deprecated \"detects multiple anagrams with different case\" <| Test.expect (actual === expected)"
"test_code": "verify do\n labeled \"detects multiple anagrams with different case\" do\n expected = [\"Eons\",\"ONES\"]\n actual = findAnagrams \"nose\" [\"Eons\",\"ONES\"]\n label \"expected\" expected\n label \"actual\" actual\n ensureEqual expected actual"
},
{
"name": "does not detect non-anagrams with identical checksum",
"test_code": "let\n actual = findAnagrams \"mass\" [\"last\"]\n expected = []\n Test.label.deprecated \"does not detect non-anagrams with identical checksum\" <| Test.expect (actual === expected)"
"test_code": "verify do\n labeled \"does not detect non-anagrams with identical checksum\" do\n expected = []\n actual = findAnagrams \"mass\" [\"last\"]\n label \"expected\" expected\n label \"actual\" actual\n ensureEqual expected actual"
},
{
"name": "detects anagrams case-insensitively",
"test_code": "let\n actual = findAnagrams \"Orchestra\" [\"cashregister\",\"Carthorse\",\"radishes\"]\n expected = [\"Carthorse\"]\n Test.label.deprecated \"detects anagrams case-insensitively\" <| Test.expect (actual === expected)"
"test_code": "verify do\n labeled \"detects anagrams case-insensitively\" do\n expected = [\"Carthorse\"]\n actual = findAnagrams \"Orchestra\" [\"cashregister\",\"Carthorse\",\"radishes\"]\n label \"expected\" expected\n label \"actual\" actual\n ensureEqual expected actual"
},
{
"name": "detects anagrams using case-insensitive subject",
"test_code": "let\n actual = findAnagrams \"Orchestra\" [\"cashregister\",\"carthorse\",\"radishes\"]\n expected = [\"carthorse\"]\n Test.label.deprecated \"detects anagrams using case-insensitive subject\" <| Test.expect (actual === expected)"
"test_code": "verify do\n labeled \"detects anagrams using case-insensitive subject\" do\n expected = [\"carthorse\"]\n actual = findAnagrams \"Orchestra\" [\"cashregister\",\"carthorse\",\"radishes\"]\n label \"expected\" expected\n label \"actual\" actual\n ensureEqual expected actual"
},
{
"name": "detects anagrams using case-insensitive possible matches",
"test_code": "let\n actual = findAnagrams \"orchestra\" [\"cashregister\",\"Carthorse\",\"radishes\"]\n expected = [\"Carthorse\"]\n Test.label.deprecated \"detects anagrams using case-insensitive possible matches\" <| Test.expect (actual === expected)"
"test_code": "verify do\n labeled \"detects anagrams using case-insensitive possible matches\" do\n expected = [\"Carthorse\"]\n actual = findAnagrams \"orchestra\" [\"cashregister\",\"Carthorse\",\"radishes\"]\n label \"expected\" expected\n label \"actual\" actual\n ensureEqual expected actual"
},
{
"name": "does not detect an anagram if the original word is repeated",
"test_code": "let\n actual = findAnagrams \"go\" [\"go Go GO\"]\n expected = []\n Test.label.deprecated \"does not detect an anagram if the original word is repeated\" <| Test.expect (actual === expected)"
"test_code": "verify do\n labeled \"does not detect an anagram if the original word is repeated\" do\n expected = []\n actual = findAnagrams \"go\" [\"go Go GO\"]\n label \"expected\" expected\n label \"actual\" actual\n ensureEqual expected actual"
},
{
"name": "anagrams must use all letters exactly once",
"test_code": "let\n actual = findAnagrams \"tapper\" [\"patter\"]\n expected = []\n Test.label.deprecated \"anagrams must use all letters exactly once\" <| Test.expect (actual === expected)"
"test_code": "verify do\n labeled \"anagrams must use all letters exactly once\" do\n expected = []\n actual = findAnagrams \"tapper\" [\"patter\"]\n label \"expected\" expected\n label \"actual\" actual\n ensureEqual expected actual"
},
{
"name": "words are not anagrams of themselves",
"test_code": "let\n actual = findAnagrams \"BANANA\" [\"BANANA\"]\n expected = []\n Test.label.deprecated \"words are not anagrams of themselves\" <| Test.expect (actual === expected)"
"test_code": "verify do\n labeled \"words are not anagrams of themselves\" do\n expected = []\n actual = findAnagrams \"BANANA\" [\"BANANA\"]\n label \"expected\" expected\n label \"actual\" actual\n ensureEqual expected actual"
},
{
"name": "words are not anagrams of themselves even if letter case is partially different",
"test_code": "let\n actual = findAnagrams \"BANANA\" [\"Banana\"]\n expected = []\n Test.label.deprecated \"words are not anagrams of themselves even if letter case is partially different\" <| Test.expect (actual === expected)"
"test_code": "verify do\n labeled \"words are not anagrams of themselves even if letter case is partially different\" do\n expected = []\n actual = findAnagrams \"BANANA\" [\"Banana\"]\n label \"expected\" expected\n label \"actual\" actual\n ensureEqual expected actual"
},
{
"name": "words are not anagrams of themselves even if letter case is completely different",
"test_code": "let\n actual = findAnagrams \"BANANA\" [\"banana\"]\n expected = []\n Test.label.deprecated \"words are not anagrams of themselves even if letter case is completely different\" <| Test.expect (actual === expected)"
"test_code": "verify do\n labeled \"words are not anagrams of themselves even if letter case is completely different\" do\n expected = []\n actual = findAnagrams \"BANANA\" [\"banana\"]\n label \"expected\" expected\n label \"actual\" actual\n ensureEqual expected actual"
},
{
"name": "words other than themselves can be anagrams",
"test_code": "let\n actual = findAnagrams \"LISTEN\" [\"LISTEN\",\"Silent\" ]\n expected = [\"Silent\"]\n Test.label.deprecated \"words other than themselves can be anagrams\" <| Test.expect (actual === expected)"
"test_code": "verify do\n labeled \"words other than themselves can be anagrams\" do\n expected = [\"Silent\"]\n actual = findAnagrams \"LISTEN\" [\"LISTEN\",\"Silent\" ]\n label \"expected\" expected\n label \"actual\" actual\n ensureEqual expected actual"
}
]
]
209 changes: 129 additions & 80 deletions exercises/practice/anagram/anagram.test.u
Original file line number Diff line number Diff line change
@@ -1,83 +1,132 @@
anagram.findAnagrams.tests.ex1 = let
actual = findAnagrams "diaper" ["hello", "world", "zombies", "pants"]
Test.label.deprecated "no matches" <| Test.expect (actual === [])

anagram.findAnagrams.tests.ex2 = let
actual = findAnagrams "solemn" ["lemons","cherry","melons"]
expected = ["lemons","melons"]
Test.label.deprecated "detects two anagrams" <| Test.expect (actual === expected)

anagram.findAnagrams.tests.ex3 = let
actual = findAnagrams "good" ["dog","goody"]
expected = []
Test.label.deprecated "does not detect anagram subsets" <| Test.expect (actual === expected)

anagram.findAnagrams.tests.ex4 = let
actual = findAnagrams "listen" ["enlists","google","inlets","banana"]
expected = ["inlets"]
Test.label.deprecated "detects anagram" <| Test.expect (actual === expected)

anagram.findAnagrams.tests.ex5 = let
actual = findAnagrams "allergy" ["gallery","ballerina","regally","clergy","largely","leading"]
expected = ["gallery","regally","largely"]
Test.label.deprecated "detects three anagrams" <| Test.expect (actual === expected)

anagram.findAnagrams.tests.ex6 = let
actual = findAnagrams "nose" ["Eons","ONES"]
expected = ["Eons","ONES"]
Test.label.deprecated "detects multiple anagrams with different case" <| Test.expect (actual === expected)

anagram.findAnagrams.tests.ex7 = let
actual = findAnagrams "mass" ["last"]
expected = []
Test.label.deprecated "does not detect non-anagrams with identical checksum" <| Test.expect (actual === expected)

anagram.findAnagrams.tests.ex8 = let
actual = findAnagrams "Orchestra" ["cashregister","Carthorse","radishes"]
expected = ["Carthorse"]
Test.label.deprecated "detects anagrams case-insensitively" <| Test.expect (actual === expected)

anagram.findAnagrams.tests.ex9 = let
actual = findAnagrams "Orchestra" ["cashregister","carthorse","radishes"]
expected = ["carthorse"]
Test.label.deprecated "detects anagrams using case-insensitive subject" <| Test.expect (actual === expected)

anagram.findAnagrams.tests.ex10 = let
actual = findAnagrams "orchestra" ["cashregister","Carthorse","radishes"]
expected = ["Carthorse"]
Test.label.deprecated "detects anagrams using case-insensitive possible matches" <| Test.expect (actual === expected)

anagram.findAnagrams.tests.ex11 = let
actual = findAnagrams "go" ["go Go GO"]
expected = []
Test.label.deprecated "does not detect an anagram if the original word is repeated" <| Test.expect (actual === expected)

anagram.findAnagrams.tests.ex12 = let
actual = findAnagrams "tapper" ["patter"]
expected = []
Test.label.deprecated "anagrams must use all letters exactly once" <| Test.expect (actual === expected)

anagram.findAnagrams.tests.ex13 = let
actual = findAnagrams "BANANA" ["BANANA"]
expected = []
Test.label.deprecated "words are not anagrams of themselves" <| Test.expect (actual === expected)

anagram.findAnagrams.tests.ex14 = let
actual = findAnagrams "BANANA" ["Banana"]
expected = []
Test.label.deprecated "words are not anagrams of themselves even if letter case is partially different" <| Test.expect (actual === expected)

anagram.findAnagrams.tests.ex15 = let
actual = findAnagrams "BANANA" ["banana"]
expected = []
Test.label.deprecated "words are not anagrams of themselves even if letter case is completely different" <| Test.expect (actual === expected)

anagram.findAnagrams.tests.ex16 = let
actual = findAnagrams "LISTEN" ["LISTEN","Silent" ]
expected = ["Silent"]
Test.label.deprecated "words other than themselves can be anagrams" <| Test.expect (actual === expected)

test> anagram.tests = runAll [
anagram.findAnagrams.tests.ex1 = verify do
labeled "no matches" do
expected = []
actual = findAnagrams "diaper" ["hello", "world", "zombies", "pants"]
label "expected" expected
label "actual" actual
ensureEqual expected actual

anagram.findAnagrams.tests.ex2 = verify do
labeled "detects two anagrams" do
expected = ["lemons","melons"]
actual = findAnagrams "solemn" ["lemons","cherry","melons"]
label "expected" expected
label "actual" actual
ensureEqual expected actual

anagram.findAnagrams.tests.ex3 = verify do
labeled "does not detect anagram subsets" do
expected = []
actual = findAnagrams "good" ["dog","goody"]
label "expected" expected
label "actual" actual
ensureEqual expected actual

anagram.findAnagrams.tests.ex4 = verify do
labeled "detects anagram" do
expected = ["inlets"]
actual = findAnagrams "listen" ["enlists","google","inlets","banana"]
label "expected" expected
label "actual" actual
ensureEqual expected actual

anagram.findAnagrams.tests.ex5 = verify do
labeled "detects three anagrams" do
expected = ["gallery","regally","largely"]
actual = findAnagrams "allergy" ["gallery","ballerina","regally","clergy","largely","leading"]
label "expected" expected
label "actual" actual
ensureEqual expected actual

anagram.findAnagrams.tests.ex6 = verify do
labeled "detects multiple anagrams with different case" do
expected = ["Eons","ONES"]
actual = findAnagrams "nose" ["Eons","ONES"]
label "expected" expected
label "actual" actual
ensureEqual expected actual

anagram.findAnagrams.tests.ex7 = verify do
labeled "does not detect non-anagrams with identical checksum" do
expected = []
actual = findAnagrams "mass" ["last"]
label "expected" expected
label "actual" actual
ensureEqual expected actual

anagram.findAnagrams.tests.ex8 = verify do
labeled "detects anagrams case-insensitively" do
expected = ["Carthorse"]
actual = findAnagrams "Orchestra" ["cashregister","Carthorse","radishes"]
label "expected" expected
label "actual" actual
ensureEqual expected actual

anagram.findAnagrams.tests.ex9 = verify do
labeled "detects anagrams using case-insensitive subject" do
expected = ["carthorse"]
actual = findAnagrams "Orchestra" ["cashregister","carthorse","radishes"]
label "expected" expected
label "actual" actual
ensureEqual expected actual

anagram.findAnagrams.tests.ex10 = verify do
labeled "detects anagrams using case-insensitive possible matches" do
expected = ["Carthorse"]
actual = findAnagrams "orchestra" ["cashregister","Carthorse","radishes"]
label "expected" expected
label "actual" actual
ensureEqual expected actual

anagram.findAnagrams.tests.ex11 = verify do
labeled "does not detect an anagram if the original word is repeated" do
expected = []
actual = findAnagrams "go" ["go Go GO"]
label "expected" expected
label "actual" actual
ensureEqual expected actual

anagram.findAnagrams.tests.ex12 = verify do
labeled "anagrams must use all letters exactly once" do
expected = []
actual = findAnagrams "tapper" ["patter"]
label "expected" expected
label "actual" actual
ensureEqual expected actual

anagram.findAnagrams.tests.ex13 = verify do
labeled "words are not anagrams of themselves" do
expected = []
actual = findAnagrams "BANANA" ["BANANA"]
label "expected" expected
label "actual" actual
ensureEqual expected actual

anagram.findAnagrams.tests.ex14 = verify do
labeled "words are not anagrams of themselves even if letter case is partially different" do
expected = []
actual = findAnagrams "BANANA" ["Banana"]
label "expected" expected
label "actual" actual
ensureEqual expected actual

anagram.findAnagrams.tests.ex15 = verify do
labeled "words are not anagrams of themselves even if letter case is completely different" do
expected = []
actual = findAnagrams "BANANA" ["banana"]
label "expected" expected
label "actual" actual
ensureEqual expected actual

anagram.findAnagrams.tests.ex16 = verify do
labeled "words other than themselves can be anagrams" do
expected = ["Silent"]
actual = findAnagrams "LISTEN" ["LISTEN","Silent" ]
label "expected" expected
label "actual" actual
ensureEqual expected actual

test> anagram.tests = join [
anagram.findAnagrams.tests.ex1,
anagram.findAnagrams.tests.ex2,
anagram.findAnagrams.tests.ex3,
Expand Down

0 comments on commit e368b57

Please sign in to comment.