Commit 468b828e authored by Iustin Pop's avatar Iustin Pop
Browse files

Another small optimisation in test data generation



It seems that QuickCheck will happily generate huge data structures,
if that's what one requests. For this test, where we ask for [[Char]],
it could happen that we get a huge number of chars, so let's limit
them to some (arbitrary, but low) limits. This doesn't "ruin" the
test, since the implementation of sepSplit/commaJoin is not
size-based.
Signed-off-by: default avatarIustin Pop <iustin@google.com>
Reviewed-by: default avatarRené Nussbaumer <rn@google.com>
parent 15e3d31c
...@@ -449,11 +449,16 @@ instance Arbitrary Types.IPolicy where ...@@ -449,11 +449,16 @@ instance Arbitrary Types.IPolicy where
-- ** Utils tests -- ** Utils tests
-- | Helper to generate a small string that doesn't contain commas.
genNonCommaString = do
size <- choose (0, 20) -- arbitrary max size
vectorOf size (arbitrary `suchThat` ((/=) ','))
-- | If the list is not just an empty element, and if the elements do -- | If the list is not just an empty element, and if the elements do
-- not contain commas, then join+split should be idempotent. -- not contain commas, then join+split should be idempotent.
prop_Utils_commaJoinSplit = prop_Utils_commaJoinSplit =
forAll (arbitrary `suchThat` forAll (choose (0, 20)) $ \llen ->
(\l -> l /= [""] && all (notElem ',') l )) $ \lst -> forAll (vectorOf llen genNonCommaString `suchThat` ((/=) [""])) $ \lst ->
Utils.sepSplit ',' (Utils.commaJoin lst) ==? lst Utils.sepSplit ',' (Utils.commaJoin lst) ==? lst
-- | Split and join should always be idempotent. -- | Split and join should always be idempotent.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment