miniutter-0.4.4.1: test/test-miniutter.hs
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Data.Monoid
import qualified Data.Text as T
import Test.Framework (Test, defaultMain, testGroup)
import Test.Framework.Providers.HUnit (testCase)
import Test.HUnit (assertEqual)
import qualified NLP.Miniutter.English as MU
main :: IO ()
main = defaultMain tests
tests :: [Test]
tests =
[ testGroup "check results of makePhrase calls"
[ testMakePhraseVerbatim
, testMakePhrasePlural
, testMakePhraseNumber
, testMakePhraseIndefinite
, testMakePhraseEnumeration
, testMakePhrasePossesive
, testMakePhraseSubjectVerb
, testMakePhraseSubjectVVxV
, testAllureOfTheStars
]
]
tp :: [MU.Part] -> T.Text -> Test
tp arg expect =
testCase ("testPhrase " ++ show arg)
$ let obtain = MU.makePhrase MU.defIrregular arg
in assertEqual (T.unpack expect ++ " == " ++ T.unpack obtain) expect obtain
testMakePhraseVerbatim :: Test
testMakePhraseVerbatim = testGroup "verbatim text Part constructors"
[ tp [MU.String "blue dog"] "blue dog"
, tp [MU.Text "blue dog"] "blue dog"
, tp [MU.String ""] ""
, tp [MU.Text ""] ""
, tp [MU.String "blue", MU.String "dog"] "blue dog"
, tp [MU.String "blue", MU.String ""] "blue"
, tp [MU.String "", MU.String "dog"] "dog"
, tp [MU.String "", MU.String ""] ""
, tp [MU.String "blue", "dog"] "blue dog"
, tp [MU.String "blue", ""] "blue"
, tp [MU.String "", "dog"] "dog"
, tp [MU.String "", ""] ""
, tp ["blue", MU.String "dog"] "blue dog"
, tp ["blue", MU.String ""] "blue"
, tp ["", MU.String "dog"] "dog"
, tp ["", MU.String ""] ""
, tp ["blue", "dog"] "blue dog"
, tp ["blue", ""] "blue"
, tp ["", "dog"] "dog"
, tp ["", ""] ""
, tp [MU.Phrase ["blue", "dog"]] "blue dog"
, tp [MU.Phrase ["blue", ""]] "blue"
, tp [MU.Phrase ["", "dog"]] "dog"
, tp [MU.Phrase ["", ""]] ""
, tp [MU.Ordinal 0 <> ", but", MU.Ordinal 1] "0th, but first"
, tp [MU.Cardinal 20 <> MU.Cardinal 0] "200"
, tp [MU.String " "] " "
, tp [ " "] " "
, tp [MU.String " blue ", MU.String " dog "] " blue dog "
, tp [" blue ", " dog "] " blue dog "
, tp [MU.Phrase [" blue ", " dog "]] " blue dog "
, testCase "testPhrase makeSentence and Capitalize" $
assertEqual "makeSentence == Capitalize makePhrase :> '.'"
(MU.makePhrase MU.defIrregular
[MU.Capitalize (MU.SubjectVerbSg "goblin" "hit") <> "."])
(MU.makeSentence MU.defIrregular
[MU.SubjectVerbSg "goblin" "hit"])
]
testMakePhrasePlural :: Test
testMakePhrasePlural = testGroup "plural form Part constructors"
[ tp [MU.Ws "dog"] "dogs"
, tp [MU.Ws "dogs"] "dogses"
, tp [MU.Ws "blue dog"] "blue dogs"
, tp [MU.Ws "blue dog "] "blue dog "
, tp [MU.Ws "blue dog."] "blue dog."
, tp [MU.Ws "blue dog%"] "blue dog%"
, tp [MU.Ws "bitch"] "bitches"
, tp [MU.Ws "the fish"] "the fishes"
, tp [MU.Ws "miss"] "misses"
, tp [MU.Ws "buzz"] "buzzes"
, tp [MU.Ws "box"] "boxes"
, tp [MU.Ws "hajj"] "hajjes"
, tp [MU.Ws "goto"] "gotoes"
, tp [MU.Ws "igloo"] "igloos"
, tp [MU.Ws "buy"] "buys"
, tp [MU.Ws "try"] "tries"
, tp [MU.Ws "canto"] "cantos"
, tp [MU.Ws "homo"] "homos"
, tp [MU.Ws "photo"] "photos"
, tp [MU.Ws "nice zero"] "nice zeros"
, tp [MU.Ws "piano"] "pianos"
, tp [MU.Ws "portico"] "porticos"
, tp [MU.Ws "pro"] "pros"
, tp [MU.Ws "quarto"] "quartos"
, tp [MU.Ws "kimono"] "kimonos"
, tp [MU.Ws "calf"] "calves"
, tp [MU.Ws "leaf"] "leaves"
, tp [MU.Ws "knife"] "knives"
, tp [MU.Ws "life"] "lives"
, tp [MU.Ws "dwarf"] "dwarfs"
, tp [MU.Ws "hoof"] "hooves"
, tp [MU.Ws "elf"] "elves"
--, tp [MU.Ws "staff"] "staves" -- depends on the meaning :(
, tp [MU.Ws "child"] "children"
, tp [MU.Ws "foot"] "feet"
, tp [MU.Ws "goose"] "geese"
, tp [MU.Ws "louse"] "lice"
, tp [MU.Ws "man"] "men"
, tp [MU.Ws "mouse"] "mice"
, tp [MU.Ws "tooth"] "teeth"
, tp [MU.Ws "woman"] "women"
, tp [MU.Ws "buffalo"] "buffalo"
, tp [MU.Ws "deer"] "deer"
, tp [MU.Ws "the moose"] "the moose"
, tp [MU.Ws "sheep"] "sheep"
, tp [MU.Ws "bison"] "bison"
, tp [MU.Ws "salmon"] "salmon"
, tp [MU.Ws "pike"] "pike"
, tp [MU.Ws "trout"] "trout"
, tp [MU.Ws "swine"] "swine"
, tp [MU.Ws "aircraft"] "aircraft"
, tp [MU.Ws "watercraft"] "watercraft"
, tp [MU.Ws "spacecraft"] "spacecraft"
, tp [MU.Ws "hovercraft"] "hovercraft"
, tp [MU.Ws "information"] "information"
, tp [MU.Ws (MU.String "dog blue")] "dog blues"
, tp [MU.Ws (MU.Ordinal 1)] "firsts"
, tp [MU.Ws (MU.Ws "do")] "doeses"
, tp [MU.Ws (MU.CarWs 1 "man")] "a men"
, tp [MU.Ws (MU.Ord 1)] "1sts"
, tp [MU.Ws (MU.AW "elf")] "an elves"
, tp [MU.Ws (MU.WWandW ["dog", "eagle", "parrot"])]
"dog, eagle and parrots"
, tp [MU.Ws (MU.WWxW "and also" ["dog", "eagle", "parrot"])]
"dog, eagle and also parrots"
, tp [MU.Ws (MU.Wown "uncle")] "uncle'ses"
, tp [MU.Ws (MU.WownW "uncle" "dog")] "uncle's dogs"
, tp [MU.Ws (MU.Phrase ["uncle", "dog"])] "uncle dogs"
, tp [MU.Ws (MU.SubjectVerb MU.Sg3rd MU.Yes "I" "do")] "I does"
, tp [MU.Ws (MU.SubjectVerb MU.Sg1st MU.No "Me" "do")] "Me don't does"
, tp [MU.Ws (MU.SubjectVerb MU.Sg3rd MU.Why "woman" "do")] "does woman does"
]
testMakePhraseNumber :: Test
testMakePhraseNumber = testGroup "number Part constructors"
[ tp [MU.Cardinal 3] "three"
, tp [MU.Cardinal 1111] "1111"
, tp [MU.Cardinal 131] "131"
, tp [MU.Cardinal 131, MU.Ordinal 2] "131 second"
, tp [MU.Cardinal (-3)] "-3"
, tp [MU.Cardinal 9999992] "9999992"
, tp [MU.Ordinal 3] "third"
, tp [MU.Ordinal 1111] "1111th"
, tp [MU.Ordinal 131] "131st"
, tp [MU.Ordinal 131, MU.Cardinal 2] "131st two"
, tp [MU.Ordinal (-3)] "-3rd"
, tp [MU.Ordinal 9999992] "9999992nd"
, tp [MU.CarWs 1 "blue dog"] "a blue dog"
, tp [MU.CarWs 2 "blue elf"] "2 blue elves"
, tp [MU.CardinalWs 2 " dog "] "two dog "
, tp [MU.CarWs 3 "leaf"] "3 leaves"
, tp [MU.CardinalWs 4 "sheep"] "four sheep"
, tp [MU.CarWs (-1) "dog"] "-1 dogs"
, tp [MU.CardinalWs (-3) "dog"] "-3 dogs"
, tp [MU.CardinalWs 12 ""] "12"
, tp [MU.CarWs 5 (MU.Cardinal 1)] "5 ones"
, tp [MU.CardinalWs 4 (MU.Ordinal 2)] "four seconds"
, tp [MU.Ord 2] "2nd"
, tp [MU.Ord 3] "3rd"
, tp [MU.Ord 4] "4th"
, tp [MU.Ord (-3)] "-3rd"
, tp [MU.Ord 12] "12th"
, tp [MU.Ord 51] "51st"
, tp [MU.Ord 52] "52nd"
, tp [MU.Ord 951] "951st"
, tp [MU.Ord 952] "952nd"
, tp [MU.Ord 112] "112th"
, tp [MU.Ord 712] "712th"
, tp [MU.Ord 5 <> MU.Cardinal 1] "5thone"
, tp [MU.Ord 4 <> MU.Ordinal 2] "4thsecond"
, tp [MU.Ord 4 <> MU.Ord 7] "4th7th"
, tp [MU.Ord 4 <> MU.CarWs 7 "dog"] "4th7 dogs"
, tp [MU.CardinalWs 4 (MU.CarWs 7 "dog")] "four 7 dogses"
, tp [MU.CarWs 4 (MU.Ord 7 <> "elf")] "4 7thelves"
]
testMakePhraseIndefinite :: Test
testMakePhraseIndefinite = testGroup "indefinite article"
[ tp [MU.AW "user"] "a user"
, tp [MU.AW "usual egg"] "a usual egg"
, tp [MU.AW "ABC"] "an ABC"
, tp [MU.AW " ABC"] " ABC"
, tp [MU.AW "ABC "] "an ABC "
, tp [MU.AW "SCUBA"] "a SCUBA"
, tp [MU.AW "SSI"] "an SSI"
, tp [MU.AW (MU.String "yell")] "a yell"
, tp [MU.AW (MU.Cardinal 3)] "a three"
, tp [MU.AW (MU.Cardinal 8)] "an eight"
, tp [MU.AW (MU.Cardinal 31)] "a 31"
, tp [MU.AW (MU.Cardinal 83)] "an 83"
, tp [MU.AW (MU.CarWs 3 "dog")] "a 3 dogs"
, tp [MU.AW (MU.Ordinal 3)] "a third"
, tp [MU.AW (MU.Ordinal 8)] "an eighth"
, tp [MU.AW (MU.Ordinal 31)] "a 31st"
, tp [MU.AW (MU.Ordinal 83)] "an 83rd"
, tp [MU.AW (MU.Ord 3)] "a 3rd"
, tp [MU.AW (MU.AW "dog")] "an a dog"
, tp [MU.AW (MU.WWandW ["dog", "eagle", "parrot"])]
"a dog, eagle and parrot"
, tp [MU.AW (MU.WWxW "or otherwise" ["hour", "eagle", "car"])]
"an hour, eagle or otherwise car"
, tp [MU.AW (MU.Wown "uncle")] "an uncle's"
, tp [MU.AW (MU.WownW "uncle" "dog")] "an uncle's dog"
, tp [MU.AW (MU.Phrase ["uncle", "dog"])] "an uncle dog"
, tp [MU.AW (MU.SubjectVerbSg "I" "do")] "an I do"
, tp [MU.AW (MU.SubjectVerb MU.Sg3rd MU.No "I" "do")] "an I don't do"
, tp [MU.AW (MU.SubjectVerb MU.Sg3rd MU.Why "I" "do")] "a do I do"
]
testMakePhraseEnumeration :: Test
testMakePhraseEnumeration = testGroup "enumeration and collection"
[ tp [MU.WWandW [MU.String "dog", "eagle", MU.Cardinal 7]]
"dog, eagle and seven"
, tp [MU.WWxW "then" [MU.Ordinal 113, MU.AW (MU.String "eagle"), "parrot"]]
"113th, an eagle then parrot"
, tp [MU.WWandW [ MU.String "I"
, MU.WWandW [MU.String "I", MU.Ordinal 31, MU.Cardinal 17]
, MU.WWandW ["I", MU.AW (MU.Ordinal 18)]
]]
"I, I, 31st and 17 and I and an 18th"
, tp [MU.WWxW " and perhaps%" [" dog ", "", "%eagle."]]
" dog and perhaps% %eagle."
]
testMakePhrasePossesive :: Test
testMakePhrasePossesive = testGroup "the possesive form"
[ tp [MU.Wown (MU.String "uncle")] "uncle's"
, tp [MU.Wown (MU.String " uncle ")] " uncle "
, tp [MU.Wown ""] ""
, tp [MU.Wown " "] " "
, tp [MU.Wown "miss"] "miss'"
, tp [MU.Wown "YQS"] "YQS'"
, tp [MU.Wown "buzz"] "buzz's"
, tp [MU.Wown "box"] "box's"
, tp [MU.Wown "Who"] "Whose"
, tp [MU.Wown "I"] "mine"
, tp [MU.Wown "you"] "yours"
, tp [MU.Wown "he"] "his"
, tp [MU.Wown "She"] "Her"
, tp [MU.Wown "it"] "its"
, tp [MU.Wown "We"] "Ours"
, tp [MU.Wown "they"] "theirs"
, tp [MU.WownW (MU.String "uncle") (MU.String "dog")] "uncle's dog"
, tp [MU.WownW " uncle " "dog"] " uncle dog"
, tp [MU.WownW "I" ""] "my"
, tp [MU.WownW "" "dog"] "dog"
, tp [MU.WownW "" ""] ""
, tp [MU.WownW " " " "] " "
, tp [MU.WownW "miss" "dog"] "miss' dog"
, tp [MU.WownW "YQS" (MU.Cardinal 33)] "YQS' 33"
, tp [MU.WownW "buzz" (MU.Ordinal 21)] "buzz's 21st"
, tp [MU.WownW "box" ""] "box's"
, tp [MU.WownW "who" "dog"] "whose dog"
, tp [MU.WownW "I" "dog"] "my dog"
, tp [MU.WownW "you" "dog"] "your dog"
, tp [MU.WownW "He" "dog"] "His dog"
, tp [MU.WownW "she" "dog"] "her dog"
, tp [MU.WownW "It" "dog"] "Its dog"
, tp [MU.WownW "we" "dog"] "our dog"
, tp [MU.WownW "They" "dog"] "Their dog"
, tp [MU.Wown (MU.CarWs 6 "")] "6's"
, tp [MU.Wown (MU.Ord 1)] "1st's"
, tp [MU.Wown (MU.Ws (MU.CardinalWs 6 ""))] "sixes'"
, tp [MU.Wown (MU.WWandW ["I", "you"])] "I and yours"
, tp [MU.Wown (MU.WWandW ["you", "I"])] "you and mine"
, tp [MU.WownW (MU.WWandW ["you", "I"]) "dog"] "you and my dog"
, tp [MU.Wown (MU.Wown "it")] "its'"
, tp [MU.Wown $ MU.Wown $ MU.Wown $ MU.Wown "it"] "its's'"
, tp [MU.Wown (MU.SubjectVerb MU.Sg3rd MU.Why "I" "be")] "am mine"
, tp [MU.Wown " do I"] " do mine"
, tp [MU.Wown " do I "] " do I "
]
testMakePhraseSubjectVerb :: Test
testMakePhraseSubjectVerb = testGroup "subject and verb"
[ tp [MU.SubjectVerbSg "species" "look"] "species looks"
, tp [MU.SubjectVerb MU.Sg1st MU.No "species" "look"] "species don't look"
, tp [MU.SubjectVerb MU.Sg3rd MU.Why "species" "look"] "does species look"
, tp [MU.SubjectVerb MU.PlEtc MU.Yes "species" "look"] "species look"
, tp [MU.SubjectVerb MU.PlEtc MU.No "species" "look"] "species don't look"
, tp [MU.SubjectVerb MU.PlEtc MU.Why "species" "look"] "do species look"
, tp [MU.SubjectVerbSg "I" "be"] "I am"
, tp [MU.SubjectVerb MU.Sg3rd MU.No "you" "be"] "you aren't"
, tp [MU.SubjectVerb MU.Sg3rd MU.Why "she" "be"] "is she"
, tp [MU.SubjectVerb MU.PlEtc MU.Yes "we" "be"] "we are"
, tp [MU.SubjectVerb MU.PlEtc MU.No "I" "be"] "I am not"
, tp [MU.SubjectVerb MU.PlEtc MU.Why "they" "be"] "are they"
, tp [MU.SubjectVerbSg "they" "be"] "they are"
, tp [MU.SubjectVerb MU.Sg3rd MU.No "we" "be"] "we aren't"
, tp [MU.SubjectVerb MU.Sg3rd MU.Why "it" "be"] "is it"
, tp [MU.SubjectVerb MU.PlEtc MU.Yes "he" "be"] "he is"
, tp [MU.SubjectVerb MU.PlEtc MU.No "She" "be"] "She isn't"
, tp [MU.SubjectVerb MU.PlEtc MU.Why "You" "be"] "are You"
, tp [MU.SubjectVerbSg "Tom" "have"] "Tom has"
, tp [MU.SubjectVerb MU.Sg3rd MU.No "cat" "have"] "cat doesn't have"
, tp [MU.SubjectVerb MU.Sg3rd MU.Why "they" "have"] "do they have"
, tp [MU.SubjectVerb MU.PlEtc MU.Yes "he" "have"] "he has"
, tp [MU.SubjectVerb MU.PlEtc MU.No "She" "have"] "She doesn't have"
, tp [MU.SubjectVerb MU.PlEtc MU.Why "Foos" "have"] "do Foos have"
, tp [MU.SubjectVerbSg "Tom" "do"] "Tom does"
, tp [MU.SubjectVerb MU.Sg3rd MU.No "cat" "do"] "cat doesn't do"
, tp [MU.SubjectVerb MU.Sg3rd MU.Why "they" "do"] "do they do"
, tp [MU.SubjectVerb MU.PlEtc MU.Yes "he" "go"] "he goes"
, tp [MU.SubjectVerb MU.PlEtc MU.No "She" "go"] "She doesn't go"
, tp [MU.SubjectVerb MU.PlEtc MU.Why "Foos" "go"] "do Foos go"
, tp [MU.SubjectVerbSg "Tom" "can"] "Tom can"
, tp [MU.SubjectVerb MU.Sg3rd MU.No "cat" "could"] "cat couldn't"
, tp [MU.SubjectVerb MU.Sg3rd MU.Why "they" "must"] "must they"
, tp [MU.SubjectVerb MU.PlEtc MU.Yes "he" "will"] "he will"
, tp [MU.SubjectVerb MU.PlEtc MU.No "She" "would"] "She wouldn't"
, tp [MU.SubjectVerb MU.PlEtc MU.Why "Foos" "shall"] "shall Foos"
, tp [MU.SubjectVerbSg "Tom" "should"] "Tom should"
, tp [MU.SubjectVerb MU.Sg3rd MU.No "cat" "ought"] "cat oughtn't"
, tp [MU.SubjectVerb MU.Sg3rd MU.Why "they" "may"] "may they"
, tp [MU.SubjectVerb MU.PlEtc MU.Yes "he" "might"] "he might"
, tp [MU.SubjectVerb MU.PlEtc MU.No "She" "had"] "She hadn't"
, tp [MU.SubjectVerb MU.PlEtc MU.Why "it" "copy down"] "does it copy down"
, tp [MU.SubjectVerbSg "Tom" "copy down" ] "Tom copies down"
, tp [MU.SubjectVerbSg "Tom" "buzz"] "Tom buzzes"
, tp [MU.SubjectVerbSg "Tom" "it it"] "Tom its it"
, tp [MU.SubjectVerbSg "Tom" "you you"] "Tom yous you"
, tp [MU.SubjectVerbSg "You" "you you"] "You you you"
, tp [MU.SubjectVerbSg "She" "do read"] "She does read"
, tp [MU.SubjectVerbSg "She" "do do"] "She does do"
, tp [MU.SubjectVerb MU.PlEtc MU.Why "she" "do"] "does she do"
, tp [MU.SubjectVerb MU.PlEtc MU.No "She" "had had"] "She hadn't had"
]
testMakePhraseSubjectVVxV :: Test
testMakePhraseSubjectVVxV = testGroup "subject and many verbs"
[ tp [MU.SubjectVVandVSg "species" ["look", "hook", "fly away", "have", "kiss"]] "species looks, hooks, flies away, has and kisses"
, tp [MU.SubjectVVxV "or" MU.Sg1st MU.No "species" ["look", "hook", "fly away", "have", "kiss"]] "species don't look, hook, fly away, have or kiss"
, tp [MU.SubjectVVxV "or" MU.Sg3rd MU.Why "species" ["look", "hook", "fly away", "have", "kiss"]] "does species look, hook, fly away, have or kiss"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.Yes "species" ["look", "hook", "fly away", "have", "kiss"]] "species look, hook, fly away, have or kiss"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.No "species" ["look", "hook", "fly away", "have", "kiss"]] "species don't look, hook, fly away, have or kiss"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.Why "species" ["look", "hook", "fly away", "have", "kiss"]] "do species look, hook, fly away, have or kiss"
, tp [MU.SubjectVVandVSg "I" ["be", "have a hat", "be cool", "be", "may swim"]] "I am, have a hat, am cool, am and may swim"
, tp [MU.SubjectVVxV "or" MU.Sg3rd MU.No "you" ["be", "have a hat", "be cool", "be", "may swim"]] "you aren't, have a hat, be cool, be or may swim"
, tp [MU.SubjectVVxV "or" MU.Sg3rd MU.Why "she" ["be", "have a hat", "be cool", "be", "may swim"]] "is she, have a hat, be cool, be or may swim"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.Yes "we" ["be", "have a hat", "be cool", "be", "may swim"]] "we are, have a hat, are cool, are or may swim"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.No "I" ["be", "have a hat", "be cool", "be", "may swim"]] "I am not, have a hat, be cool, be or may swim"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.Why "they" ["be", "have a hat", "be cool", "be", "may swim"]] "are they, have a hat, be cool, be or may swim"
, tp [MU.SubjectVVandVSg "they" ["be", "have a hat", "be cool", "be", "may swim"]] "they are, have a hat, are cool, are and may swim"
, tp [MU.SubjectVVxV "or" MU.Sg3rd MU.No "we" ["be", "have a hat", "be cool", "be", "may swim"]] "we aren't, have a hat, be cool, be or may swim"
, tp [MU.SubjectVVxV "or" MU.Sg3rd MU.Why "it" ["be", "have a hat", "be cool", "be", "may swim"]] "is it, have a hat, be cool, be or may swim"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.Yes "he" ["be", "have a hat", "be cool", "be", "may swim"]] "he is, has a hat, is cool, is or may swim"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.No "She" ["be", "have a hat", "be cool", "be", "may swim"]] "She isn't, have a hat, be cool, be or may swim"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.Why "You" ["be", "have a hat", "be cool", "be", "may swim"]] "are You, have a hat, be cool, be or may swim"
, tp [MU.SubjectVVandVSg "Tom" ["have", "talk to Bob", "kiss Helen"]] "Tom has, talks to Bob and kisses Helen"
, tp [MU.SubjectVVxV "or" MU.Sg3rd MU.No "cat" ["have", "talk to Bob", "kiss Helen"]] "cat doesn't have, talk to Bob or kiss Helen"
, tp [MU.SubjectVVxV "or" MU.Sg3rd MU.Why "they" ["have", "talk to Bob", "kiss Helen"]] "do they have, talk to Bob or kiss Helen"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.Yes "he" ["have", "talk to Bob", "kiss Helen"]] "he has, talks to Bob or kisses Helen"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.No "She" ["have", "talk to Bob", "kiss Helen"]] "She doesn't have, talk to Bob or kiss Helen"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.Why "Foos" ["have", "talk to Bob", "kiss Helen"]] "do Foos have, talk to Bob or kiss Helen"
, tp [MU.SubjectVVandVSg "Tom" ["do", "mean well"]] "Tom does and means well"
, tp [MU.SubjectVVxV "or" MU.Sg3rd MU.No "cat" ["do", "mean well"]] "cat doesn't do or mean well"
, tp [MU.SubjectVVxV "or" MU.Sg3rd MU.Why "they" ["do", "mean well"]] "do they do or mean well"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.Yes "he" ["go"]] "he goes"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.No "She" ["go"]] "She doesn't go"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.Why "Foos" ["go"]] "do Foos go"
, tp [MU.SubjectVVandVSg "Tom" ["can"]] "Tom can"
, tp [MU.SubjectVVxV "or" MU.Sg3rd MU.No "cat" ["could"]] "cat couldn't"
, tp [MU.SubjectVVxV "or" MU.Sg3rd MU.Why "they" ["must"]] "must they"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.Yes "he" ["will"]] "he will"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.No "She" ["would"]] "She wouldn't"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.Why "Foos" ["shall"]] "shall Foos"
, tp [MU.SubjectVVandVSg "Tom" ["should"]] "Tom should"
, tp [MU.SubjectVVxV "or" MU.Sg3rd MU.No "cat" ["ought"]] "cat oughtn't"
, tp [MU.SubjectVVxV "or" MU.Sg3rd MU.Why "they" ["may"]] "may they"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.Yes "he" ["might"]] "he might"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.No "She" ["had"]] "She hadn't"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.Why "it" ["copy down"]] "does it copy down"
, tp [MU.SubjectVVandVSg "Tom" ["copy down"] ] "Tom copies down"
, tp [MU.SubjectVVandVSg "Tom" ["buzz"]] "Tom buzzes"
, tp [MU.SubjectVVandVSg "Tom" ["it it"]] "Tom its it"
, tp [MU.SubjectVVandVSg "Tom" ["you you"]] "Tom yous you"
, tp [MU.SubjectVVandVSg "You" ["you you"]] "You you you"
, tp [MU.SubjectVVandVSg "She" ["do read"]] "She does read"
, tp [MU.SubjectVVandVSg "She" ["do do"]] "She does do"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.Why "she" ["do"]] "does she do"
, tp [MU.SubjectVVxV "or" MU.PlEtc MU.No "She" ["had had"]] "She hadn't had"
]
tc :: [MU.Part] -> T.Text -> Test
tc arg expect =
testCase ("testSentence " ++ show arg)
$ let obtain = MU.makeSentence MU.defIrregular arg
in assertEqual (T.unpack expect ++ " == " ++ T.unpack obtain) expect obtain
testAllureOfTheStars:: Test
testAllureOfTheStars = testGroup "Allure of the Stars utterances"
[ tc [ MU.SubjectVerbSg "you" "displace"
, "Haskell Alvin" ]
"You displace Haskell Alvin."
, tc [ MU.SubjectVerbSg "you" "drop"
, MU.CardinalWs 3 "royal blue vial" ]
"You drop three royal blue vials."
, tc [ MU.SubjectVerbSg "Haskell Alvin" "displace"
, "you" ]
"Haskell Alvin displaces you."
, tc [ MU.SubjectVerbSg "Haskell Alvin" "drop"
, MU.CarWs 1 "royal blue vial" ]
"Haskell Alvin drops a royal blue vial."
, tc [ MU.SubjectVerbSg "Haskell Alvin" "gulp down"
, MU.AW "royal blue vial" ]
"Haskell Alvin gulps down a royal blue vial."
, tc [ MU.SubjectVerbSg "Haskell Alvin" "feel better" ]
"Haskell Alvin feels better."
, tc [ MU.SubjectVerbSg "the royal blue vial" "turn out to be"
, MU.CarWs 1 "vial of healing (+5)" ]
"The royal blue vial turns out to be a vial of healing (+5)."
, tc [ MU.SubjectVerbSg "you" "gulp down"
, MU.AW "magenta vial" ]
"You gulp down a magenta vial."
, tc [ MU.SubjectVerbSg "the magenta vial" "turn out to be"
, MU.CarWs 1 "vial of rose water" ]
"The magenta vial turns out to be a vial of rose water."
, tc [ MU.SubjectVerbSg "deranged household robot" "trie to hit"
<> ", but you block" ]
"Deranged household robot tries to hit, but you block."
, tc [ MU.SubjectVerbSg "deranged household robot" "hit"
, "you" ]
"Deranged household robot hits you."
, tc [ MU.SubjectVerbSg "deranged household robot" "pick up"
, MU.CarWs 2 "sharpened pipe", "(3d1) (+1)" ]
"Deranged household robot picks up 2 sharpened pipes (3d1) (+1)."
, tc [ MU.SubjectVerbSg "deranged household robot" "hit"
, MU.Text"you with", MU.CardinalWs 1 "sharpened pipe (3d1) (+1)" ]
"Deranged household robot hits you with a sharpened pipe (3d1) (+1)."
, tc [ MU.SubjectVerbSg "you" "kick"
, "deranged household robot" ]
"You kick deranged household robot."
, tc [ MU.SubjectVerbSg "deranged household robot" "die" ]
"Deranged household robot dies."
, tc [ MU.SubjectVerbSg "you" "find"
, "a way downstairs" ]
"You find a way downstairs."
, tc [ MU.SubjectVerbSg "Haskell Alvin" "squash"
, "you in a staircase accident" ]
"Haskell Alvin squashes you in a staircase accident."
, tc [ MU.SubjectVerbSg "you" "die" ]
"You die."
, tc [ MU.SubjectVerbSg "Haskell Alvin" "find"
, "a way downstairs" ]
"Haskell Alvin finds a way downstairs."
, tc [ MU.SubjectVerbSg "Haskell Alvin" "hit"
, "deranged household robot" ]
"Haskell Alvin hits deranged household robot."
, tc [ MU.SubjectVerbSg "deranged household robot" "hit"
, "Haskell Alvin" ]
"Deranged household robot hits Haskell Alvin."
, tc [ MU.SubjectVerbSg "deranged household robot" "try to hit"
<> ", but Haskell Alvin blocks" ]
"Deranged household robot tries to hit, but Haskell Alvin blocks."
, tc [ MU.SubjectVerbSg "deformed monkey" "hit"
, "deranged household robot" ]
"Deformed monkey hits deranged household robot."
, tc [ MU.SubjectVerbSg (MU.CarWs 1 "flying billiard ball (1d1)") "hit"
, "deranged household robot" ]
"A flying billiard ball (1d1) hits deranged household robot."
, tc [ MU.SubjectVerbSg "deranged household robot" "hiss in pain" ]
"Deranged household robot hisses in pain."
]