From e368b57ccf4e74ef1a0e40a616e273477c08ea7b Mon Sep 17 00:00:00 2001 From: SimaDovakin Date: Sat, 18 Jan 2025 19:03:59 +0200 Subject: [PATCH] Upgraded tests for anagram exercise. --- .../anagram/.meta/testAnnotation.json | 34 +-- exercises/practice/anagram/anagram.test.u | 209 +++++++++++------- 2 files changed, 146 insertions(+), 97 deletions(-) diff --git a/exercises/practice/anagram/.meta/testAnnotation.json b/exercises/practice/anagram/.meta/testAnnotation.json index f213cf0..90681de 100644 --- a/exercises/practice/anagram/.meta/testAnnotation.json +++ b/exercises/practice/anagram/.meta/testAnnotation.json @@ -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" } -] \ No newline at end of file +] diff --git a/exercises/practice/anagram/anagram.test.u b/exercises/practice/anagram/anagram.test.u index 182153b..537212c 100644 --- a/exercises/practice/anagram/anagram.test.u +++ b/exercises/practice/anagram/anagram.test.u @@ -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,