module Main (main) where
import ASCII.Caseless
import ASCII.Case (Case (..))
import Data.Eq (Eq ((==)))
import Data.Foldable (for_)
import Data.Function (($))
import Data.List (length)
import Data.String (String)
import System.IO (IO)
import Test.Hspec (hspec, describe, it, shouldBe)
import qualified ASCII.Char as CaseSensitive
import qualified ASCII.Caseless as Caseless
main :: IO ()
main = hspec $ do
describe "caseless characters" $ do
it "how many" $ length allCharacters == 102
describe "disregardCase" $ do
for_ [nonLetters, capitalLetters, smallLetters] $ \(name, pairs) ->
it name $ for_ pairs $ \(a, b) -> disregardCase b `shouldBe` a
describe "testAssumeCaseUnsafe" $ do
describe "UpperCase" $ do
for_ [nonLetters, capitalLetters] $ \(name, pairs) ->
it name $ for_ pairs $ \(a, b) -> assumeCaseUnsafe UpperCase b `shouldBe` a
describe "LowerCase" $ do
for_ [nonLetters, smallLetters] $ \(name, pairs) ->
it name $ for_ pairs $ \(a, b) -> assumeCaseUnsafe LowerCase b `shouldBe` a
describe "toCase" $ do
describe "UpperCase" $ do
for_ [nonLetters, capitalLetters] $ \(name, pairs) ->
it name $ for_ pairs $ \(a, b) -> toCase UpperCase a `shouldBe` b
describe "LowerCase" $ do
for_ [nonLetters, smallLetters] $ \(name, pairs) ->
it name $ for_ pairs $ \(a, b) -> toCase LowerCase a `shouldBe` b
nonLetters, smallLetters, capitalLetters :: (String, [(CaselessChar, CaseSensitive.Char)])
smallLetters = (,) "small letters"
[ (,) Caseless.LetterA CaseSensitive.SmallLetterA
, (,) Caseless.LetterB CaseSensitive.SmallLetterB
, (,) Caseless.LetterC CaseSensitive.SmallLetterC
, (,) Caseless.LetterD CaseSensitive.SmallLetterD
, (,) Caseless.LetterE CaseSensitive.SmallLetterE
, (,) Caseless.LetterF CaseSensitive.SmallLetterF
, (,) Caseless.LetterG CaseSensitive.SmallLetterG
, (,) Caseless.LetterH CaseSensitive.SmallLetterH
, (,) Caseless.LetterI CaseSensitive.SmallLetterI
, (,) Caseless.LetterJ CaseSensitive.SmallLetterJ
, (,) Caseless.LetterK CaseSensitive.SmallLetterK
, (,) Caseless.LetterL CaseSensitive.SmallLetterL
, (,) Caseless.LetterM CaseSensitive.SmallLetterM
, (,) Caseless.LetterN CaseSensitive.SmallLetterN
, (,) Caseless.LetterO CaseSensitive.SmallLetterO
, (,) Caseless.LetterP CaseSensitive.SmallLetterP
, (,) Caseless.LetterQ CaseSensitive.SmallLetterQ
, (,) Caseless.LetterR CaseSensitive.SmallLetterR
, (,) Caseless.LetterS CaseSensitive.SmallLetterS
, (,) Caseless.LetterT CaseSensitive.SmallLetterT
, (,) Caseless.LetterU CaseSensitive.SmallLetterU
, (,) Caseless.LetterV CaseSensitive.SmallLetterV
, (,) Caseless.LetterW CaseSensitive.SmallLetterW
, (,) Caseless.LetterX CaseSensitive.SmallLetterX
, (,) Caseless.LetterY CaseSensitive.SmallLetterY
, (,) Caseless.LetterZ CaseSensitive.SmallLetterZ
]
capitalLetters = (,) "capital letters"
[ (,) Caseless.LetterA CaseSensitive.CapitalLetterA
, (,) Caseless.LetterB CaseSensitive.CapitalLetterB
, (,) Caseless.LetterC CaseSensitive.CapitalLetterC
, (,) Caseless.LetterD CaseSensitive.CapitalLetterD
, (,) Caseless.LetterE CaseSensitive.CapitalLetterE
, (,) Caseless.LetterF CaseSensitive.CapitalLetterF
, (,) Caseless.LetterG CaseSensitive.CapitalLetterG
, (,) Caseless.LetterH CaseSensitive.CapitalLetterH
, (,) Caseless.LetterI CaseSensitive.CapitalLetterI
, (,) Caseless.LetterJ CaseSensitive.CapitalLetterJ
, (,) Caseless.LetterK CaseSensitive.CapitalLetterK
, (,) Caseless.LetterL CaseSensitive.CapitalLetterL
, (,) Caseless.LetterM CaseSensitive.CapitalLetterM
, (,) Caseless.LetterN CaseSensitive.CapitalLetterN
, (,) Caseless.LetterO CaseSensitive.CapitalLetterO
, (,) Caseless.LetterP CaseSensitive.CapitalLetterP
, (,) Caseless.LetterQ CaseSensitive.CapitalLetterQ
, (,) Caseless.LetterR CaseSensitive.CapitalLetterR
, (,) Caseless.LetterS CaseSensitive.CapitalLetterS
, (,) Caseless.LetterT CaseSensitive.CapitalLetterT
, (,) Caseless.LetterU CaseSensitive.CapitalLetterU
, (,) Caseless.LetterV CaseSensitive.CapitalLetterV
, (,) Caseless.LetterW CaseSensitive.CapitalLetterW
, (,) Caseless.LetterX CaseSensitive.CapitalLetterX
, (,) Caseless.LetterY CaseSensitive.CapitalLetterY
, (,) Caseless.LetterZ CaseSensitive.CapitalLetterZ
]
nonLetters = (,) "non-letters"
[ (,) Caseless.Null CaseSensitive.Null
, (,) Caseless.StartOfHeading CaseSensitive.StartOfHeading
, (,) Caseless.StartOfText CaseSensitive.StartOfText
, (,) Caseless.EndOfText CaseSensitive.EndOfText
, (,) Caseless.EndOfTransmission CaseSensitive.EndOfTransmission
, (,) Caseless.Enquiry CaseSensitive.Enquiry
, (,) Caseless.Acknowledgement CaseSensitive.Acknowledgement
, (,) Caseless.Bell CaseSensitive.Bell
, (,) Caseless.Backspace CaseSensitive.Backspace
, (,) Caseless.HorizontalTab CaseSensitive.HorizontalTab
, (,) Caseless.LineFeed CaseSensitive.LineFeed
, (,) Caseless.VerticalTab CaseSensitive.VerticalTab
, (,) Caseless.FormFeed CaseSensitive.FormFeed
, (,) Caseless.CarriageReturn CaseSensitive.CarriageReturn
, (,) Caseless.ShiftOut CaseSensitive.ShiftOut
, (,) Caseless.ShiftIn CaseSensitive.ShiftIn
, (,) Caseless.DataLinkEscape CaseSensitive.DataLinkEscape
, (,) Caseless.DeviceControl1 CaseSensitive.DeviceControl1
, (,) Caseless.DeviceControl2 CaseSensitive.DeviceControl2
, (,) Caseless.DeviceControl3 CaseSensitive.DeviceControl3
, (,) Caseless.DeviceControl4 CaseSensitive.DeviceControl4
, (,) Caseless.NegativeAcknowledgement CaseSensitive.NegativeAcknowledgement
, (,) Caseless.SynchronousIdle CaseSensitive.SynchronousIdle
, (,) Caseless.EndOfTransmissionBlock CaseSensitive.EndOfTransmissionBlock
, (,) Caseless.Cancel CaseSensitive.Cancel
, (,) Caseless.EndOfMedium CaseSensitive.EndOfMedium
, (,) Caseless.Substitute CaseSensitive.Substitute
, (,) Caseless.Escape CaseSensitive.Escape
, (,) Caseless.FileSeparator CaseSensitive.FileSeparator
, (,) Caseless.GroupSeparator CaseSensitive.GroupSeparator
, (,) Caseless.RecordSeparator CaseSensitive.RecordSeparator
, (,) Caseless.UnitSeparator CaseSensitive.UnitSeparator
, (,) Caseless.Space CaseSensitive.Space
, (,) Caseless.ExclamationMark CaseSensitive.ExclamationMark
, (,) Caseless.QuotationMark CaseSensitive.QuotationMark
, (,) Caseless.NumberSign CaseSensitive.NumberSign
, (,) Caseless.DollarSign CaseSensitive.DollarSign
, (,) Caseless.PercentSign CaseSensitive.PercentSign
, (,) Caseless.Ampersand CaseSensitive.Ampersand
, (,) Caseless.Apostrophe CaseSensitive.Apostrophe
, (,) Caseless.LeftParenthesis CaseSensitive.LeftParenthesis
, (,) Caseless.RightParenthesis CaseSensitive.RightParenthesis
, (,) Caseless.Asterisk CaseSensitive.Asterisk
, (,) Caseless.PlusSign CaseSensitive.PlusSign
, (,) Caseless.Comma CaseSensitive.Comma
, (,) Caseless.HyphenMinus CaseSensitive.HyphenMinus
, (,) Caseless.FullStop CaseSensitive.FullStop
, (,) Caseless.Slash CaseSensitive.Slash
, (,) Caseless.Digit0 CaseSensitive.Digit0
, (,) Caseless.Digit1 CaseSensitive.Digit1
, (,) Caseless.Digit2 CaseSensitive.Digit2
, (,) Caseless.Digit3 CaseSensitive.Digit3
, (,) Caseless.Digit4 CaseSensitive.Digit4
, (,) Caseless.Digit5 CaseSensitive.Digit5
, (,) Caseless.Digit6 CaseSensitive.Digit6
, (,) Caseless.Digit7 CaseSensitive.Digit7
, (,) Caseless.Digit8 CaseSensitive.Digit8
, (,) Caseless.Digit9 CaseSensitive.Digit9
, (,) Caseless.Colon CaseSensitive.Colon
, (,) Caseless.Semicolon CaseSensitive.Semicolon
, (,) Caseless.LessThanSign CaseSensitive.LessThanSign
, (,) Caseless.EqualsSign CaseSensitive.EqualsSign
, (,) Caseless.GreaterThanSign CaseSensitive.GreaterThanSign
, (,) Caseless.QuestionMark CaseSensitive.QuestionMark
, (,) Caseless.AtSign CaseSensitive.AtSign
, (,) Caseless.LeftSquareBracket CaseSensitive.LeftSquareBracket
, (,) Caseless.Backslash CaseSensitive.Backslash
, (,) Caseless.RightSquareBracket CaseSensitive.RightSquareBracket
, (,) Caseless.Caret CaseSensitive.Caret
, (,) Caseless.Underscore CaseSensitive.Underscore
, (,) Caseless.GraveAccent CaseSensitive.GraveAccent
, (,) Caseless.LeftCurlyBracket CaseSensitive.LeftCurlyBracket
, (,) Caseless.VerticalLine CaseSensitive.VerticalLine
, (,) Caseless.RightCurlyBracket CaseSensitive.RightCurlyBracket
, (,) Caseless.Tilde CaseSensitive.Tilde
, (,) Caseless.Delete CaseSensitive.Delete
]