#!/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:p ),
'~~', %case.Set, %case;
}
=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