diff options
Diffstat (limited to 'raku/anagram/anagram.rakutest')
-rw-r--r-- | raku/anagram/anagram.rakutest | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/raku/anagram/anagram.rakutest b/raku/anagram/anagram.rakutest new file mode 100644 index 0000000..6aa62c6 --- /dev/null +++ b/raku/anagram/anagram.rakutest @@ -0,0 +1,223 @@ +#!/usr/bin/env raku +use Test; +use JSON::Fast; +use lib $?FILE.IO.dirname; +use Anagram; +plan 14; + +my @test-cases = from-json($=pod.pop.contents).List; +for @test-cases -> %case { + cmp-ok match-anagrams( |%case<input>:p ), + '~~', %case<expected>.Set, %case<description>; +} + +=head2 Test Cases +=begin code +[ + { + "description": "no matches", + "expected": [ + ], + "input": { + "candidates": [ + "hello", + "world", + "zombies", + "pants" + ], + "subject": "diaper" + }, + "property": "findAnagrams" + }, + { + "description": "detects two anagrams", + "expected": [ + "stream", + "maters" + ], + "input": { + "candidates": [ + "stream", + "pigeon", + "maters" + ], + "subject": "master" + }, + "property": "findAnagrams" + }, + { + "description": "does not detect anagram subsets", + "expected": [ + ], + "input": { + "candidates": [ + "dog", + "goody" + ], + "subject": "good" + }, + "property": "findAnagrams" + }, + { + "description": "detects anagram", + "expected": [ + "inlets" + ], + "input": { + "candidates": [ + "enlists", + "google", + "inlets", + "banana" + ], + "subject": "listen" + }, + "property": "findAnagrams" + }, + { + "description": "detects three anagrams", + "expected": [ + "gallery", + "regally", + "largely" + ], + "input": { + "candidates": [ + "gallery", + "ballerina", + "regally", + "clergy", + "largely", + "leading" + ], + "subject": "allergy" + }, + "property": "findAnagrams" + }, + { + "description": "detects multiple anagrams with different case", + "expected": [ + "Eons", + "ONES" + ], + "input": { + "candidates": [ + "Eons", + "ONES" + ], + "subject": "nose" + }, + "property": "findAnagrams" + }, + { + "description": "does not detect non-anagrams with identical checksum", + "expected": [ + ], + "input": { + "candidates": [ + "last" + ], + "subject": "mass" + }, + "property": "findAnagrams" + }, + { + "description": "detects anagrams case-insensitively", + "expected": [ + "Carthorse" + ], + "input": { + "candidates": [ + "cashregister", + "Carthorse", + "radishes" + ], + "subject": "Orchestra" + }, + "property": "findAnagrams" + }, + { + "description": "detects anagrams using case-insensitive subject", + "expected": [ + "carthorse" + ], + "input": { + "candidates": [ + "cashregister", + "carthorse", + "radishes" + ], + "subject": "Orchestra" + }, + "property": "findAnagrams" + }, + { + "description": "detects anagrams using case-insensitive possible matches", + "expected": [ + "Carthorse" + ], + "input": { + "candidates": [ + "cashregister", + "Carthorse", + "radishes" + ], + "subject": "orchestra" + }, + "property": "findAnagrams" + }, + { + "description": "does not detect an anagram if the original word is repeated", + "expected": [ + ], + "input": { + "candidates": [ + "go Go GO" + ], + "subject": "go" + }, + "property": "findAnagrams" + }, + { + "description": "anagrams must use all letters exactly once", + "expected": [ + ], + "input": { + "candidates": [ + "patter" + ], + "subject": "tapper" + }, + "property": "findAnagrams" + }, + { + "description": "words are not anagrams of themselves (case-insensitive)", + "expected": [ + ], + "input": { + "candidates": [ + "BANANA", + "Banana", + "banana" + ], + "subject": "BANANA" + }, + "property": "findAnagrams" + }, + { + "description": "words other than themselves can be anagrams", + "expected": [ + "Silent" + ], + "input": { + "candidates": [ + "Listen", + "Silent", + "LISTEN" + ], + "subject": "LISTEN" + }, + "property": "findAnagrams" + } +] +=end code |