Add splitOnSuffixSeq property tests

This commit is contained in:
adithyaov 2020-11-04 04:00:45 +05:30 committed by Adithya Kumar
parent aaae284415
commit d644962284

View File

@ -134,11 +134,37 @@ seqSplitterProperties sep desc = do
-- Exclusive case -- Exclusive case
splitIntercalateEqId splitOnSeq_ intercalate splitIntercalateEqId splitOnSeq_ intercalate
describe (desc <> " splitOnSuffixSeq/intercalate")
$ do
-- Empty seperator
intercalateSplitEqIdNoSepEnd 0
concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 0
-- Single element seperator
intercalateSplitEqIdNoSepEnd 1
concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 1
-- Shift Or
intercalateSplitEqIdNoSepEnd 2
concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 2
-- Karp-Rabin
intercalateSplitEqIdNoSepEnd 4
concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 4
-- Exclusive case
splitIntercalateEqId splitOnSuffixSeq_ intercalateSuffix
where where
splitOnSeq_ xs ys = splitOnSeq_ xs ys =
S.toList $ IS.splitOnSeq (A.fromList ys) FL.toList (S.fromList xs) S.toList $ IS.splitOnSeq (A.fromList ys) FL.toList (S.fromList xs)
splitOnSuffixSeq_ xs ys =
S.toList $ IS.splitOnSuffixSeq (A.fromList ys) FL.toList (S.fromList xs)
intercalateSuffix xs yss = intercalate xs yss ++ xs
nonSepElem :: Gen a nonSepElem :: Gen a
nonSepElem = suchThat arbitrary (/= sep) nonSepElem = suchThat arbitrary (/= sep)
@ -170,6 +196,23 @@ seqSplitterProperties sep desc = do
(intercalate (replicate i sep) ys) (intercalate (replicate i sep) ys)
xs xs
intercalateSplitEqIdNoSepEnd i =
let name =
"intercalate . splitOnSuffixSeq_ . (++ [x \\= sep]) == id ("
<> show i <> " element separator)"
in prop name
$ forAll ((,) <$> listWithSep <*> nonSepElem)
$ \(xs_, nonSep) -> do
let xs = xs_ ++ [nonSep]
withMaxSuccess maxTestCount
$ monadicIO
$ do
ys <- splitOnSuffixSeq_ xs (replicate i sep)
listEquals
(==)
(intercalate (replicate i sep) ys)
xs
concatSplitIntercalateEqConcat splitter intercalater i = concatSplitIntercalateEqConcat splitter intercalater i =
let name = let name =
"concat . splitter . intercalater == " "concat . splitter . intercalater == "