Packages

The Phi Programming Language

Current section

Files

Jump to
phi tests Test Data String.phi
Raw

tests/Test/Data/String.phi

module Test.Data.String where
import Test.QuickCheck (TestGroup(..), TestResult, quickCheck)
import Data.String as S
import Prelude
import Data.Atom as A
propConcat :: String -> String -> Bool
propConcat s1 s2 =
"" ++ "abc" == "abc" &&
"a" ++ "bc" == "abc" &&
S.length (s1 ++ s2) == (S.length s1) + (S.length s2) &&
S.startsWith (s1 ++ s2) s1 &&
S.endsWith (s1 ++ s2) s2
propIsEmpty :: Bool
propIsEmpty =
S.isEmpty "" &&
S.isEmpty "not empty" == false
propLength :: String -> Bool
propLength s =
S.length "" == 0 &&
S.length "a short string" == 14 &&
S.length s == foldr (\_ acc -> acc + 1) 0 s
propReverse :: String -> Boolean
propReverse s = (S.reverse $ S.reverse s) == s
propEqual :: String -> Bool
propEqual x = S.equal x x
propEqualIgnoreCase :: Bool
propEqualIgnoreCase = S.equalIgnoreCase "abc" "ABC"
propHasPrefix :: String -> String -> Boolean
propHasPrefix s1 s2 = S.startsWith (s1 <> s2) s1
propHasSuff :: String -> String -> Boolean
propHasSuff s1 s2 = S.endsWith (s1 <> s2) s2
propHasPreSu :: String -> String -> Boolean
propHasPreSu s1 s2 = let s3 = s1 <> s2
in S.startsWith s3 s1 && S.endsWith s3 s2
propToAtom :: String -> Bool
propToAtom s = A.toString (S.toAtom s) == s
propToExistingAtom :: Atom -> Bool
propToExistingAtom a =
S.toExistingAtom (A.toString a) == a
propToInteger :: Integer -> Bool
propToInteger i =
i == S.toInteger (show i)
propToFloat :: Float -> Bool
propToFloat f =
233.3 == S.toFloat "233.3"
-- f == S.toFloat (show f)
propIndexOf :: Bool
propIndexOf =
S.indexOf 'a' "abac" == 1
propLastIndexOf :: Bool
propLastIndexOf =
S.lastIndexOf 'a' "abac" == 3
propFind :: Bool
propFind =
S.find "ababa" "aba" == Just "ababa"
propFindLast :: Bool
propFindLast =
S.findLast "ababa" "aba" == Just "aba"
propReplace :: Bool
propReplace =
S.join (S.replace "abacaba" "aba" "aca") "" == "acacaca"
propReplaceFirst :: Bool
propReplaceFirst =
S.join (S.replaceFirst "abacaba" "aba" "aca") "" == "acacaba"
propReplaceLast :: Bool
propReplaceLast =
S.join (S.replaceLast "abacaba" "aba" "aca") "" == "abacaca"
propReplicate :: Bool
propReplicate =
S.replicate 3 "ab" == "ababab"
propSplit :: Bool
propSplit =
S.split "abcabca" "bc" == ["a", "a", "a"]
propLines :: Bool
propLines =
S.lines "a\nab\nabc" == ["a", "ab", "abc"]
propWords :: Bool
propWords =
S.words "a bc abc" == ["a", "bc", "abc"]
propTake :: Bool
propTake =
S.take 0 "abc" == "" &&
S.take 3 "abc" == "abc"
propDrop :: Bool
propDrop =
S.drop 0 "abc" == "abc" &&
S.drop 3 "abc" == ""
propToLower :: Bool
propToLower =
S.toLower "ABC" == "abc"
propToTitle :: Bool
propToTitle = S.toTitle "ß is a SHARP s" == "Ss is a SHARP s"
propToUpper :: Bool
propToUpper =
S.toUpper "abc" == "ABC"
propCaseFold :: Bool
propCaseFold = S.caseFold "Ω and ẞ SHARP S" == "ω and ss sharp s"
propPad :: Bool
propPad = S.pad "测试233" 8 == "测试233 " &&
S.pad "ab233" 8 == "ab233 "
propPadLeft :: Bool
propPadLeft =
S.padLeft "ab233" 8 == " ab233"
propPadBoth :: Bool
propPadBoth =
S.padBoth "ab233" 8 == " ab233 "
propChomp :: Bool
propChomp =
S.chomp "233\n" == "233"
propTrim :: Bool
propTrim =
S.trim " 233 233 " == "233 233"
propTrimChars :: Bool
propTrimChars =
S.trimChars "aabbcaa" "a" == "bbc"
propTrimLeft :: Bool
propTrimLeft =
S.trimLeft " 233 233 " == "233 233 "
propTrimLeftChars :: Bool
propTrimLeftChars =
S.trimLeftChars "ababaabb" "ab" == ""
propTrimRight :: Bool
propTrimRight =
S.trimRight " 233 233 \n" == " 233 233"
propTrimRightChars :: Bool
propTrimRightChars =
S.trimRightChars "abaaa" "a" == "ab"
test :: TestGroup (Integer -> IO TestResult)
test = Exe [ quickCheck "concat" propConcat
, quickCheck "isEmpty" propIsEmpty
, quickCheck "length" propLength
, quickCheck "reverse_reverse" propReverse
, quickCheck "equal" propEqual
, quickCheck "equalIgnoreCase" propEqualIgnoreCase
, quickCheck "startsWith" propHasPrefix
, quickCheck "endsWith" propHasSuff
, quickCheck "startsWith_endsWith" propHasPreSu
, quickCheck "toAtom" propToAtom
, quickCheck "toExistingAtom" propToExistingAtom
, quickCheck "toInteger" propToInteger
, quickCheck "toFloat" propToFloat
, quickCheck "indexOf" propIndexOf
, quickCheck "lastIndexOf" propLastIndexOf
, quickCheck "find" propFind
, quickCheck "findLast" propFindLast
, quickCheck "replace" propReplace
, quickCheck "replaceFirst" propReplaceFirst
, quickCheck "replaceLast" propReplaceLast
, quickCheck "replicate" propReplicate
, quickCheck "split" propSplit
, quickCheck "lines" propLines
, quickCheck "words" propWords
, quickCheck "take" propTake
, quickCheck "drop" propDrop
, quickCheck "toLower" propToLower
, quickCheck "toTitle" propToTitle
, quickCheck "toUpper" propToUpper
, quickCheck "caseFold" propCaseFold
, quickCheck "pad" propPad
, quickCheck "padLeft" propPadLeft
, quickCheck "padBoth" propPadBoth
, quickCheck "chomp" propChomp
, quickCheck "trim" propTrim
, quickCheck "trimChars" propTrimChars
, quickCheck "trimLeft" propTrimLeft
, quickCheck "trimLeftChars" propTrimLeftChars
, quickCheck "trimRight" propTrimRight
, quickCheck "trimRightChars" propTrimRightChars
]