[commit: packages/containers] master: Fix Arbitrary instance for FingerTree (0086aa7)
git at git.haskell.org
git at git.haskell.org
Sun Dec 20 16:23:36 UTC 2015
Repository : ssh://git@git.haskell.org/containers
On branch : master
Link : http://git.haskell.org/packages/containers.git/commitdiff/0086aa753795237cec28be6d2a261708eb7dacf6
>---------------------------------------------------------------
commit 0086aa753795237cec28be6d2a261708eb7dacf6
Author: Ross Paterson <ross at soi.city.ac.uk>
Date: Fri Dec 19 23:24:20 2014 +0000
Fix Arbitrary instance for FingerTree
The previous version never generated deep trees containing Empty.
Also tweaked the size handling so that the tree size is closer to the
specified size (though it can still run over a bit).
>---------------------------------------------------------------
0086aa753795237cec28be6d2a261708eb7dacf6
tests/seq-properties.hs | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/tests/seq-properties.hs b/tests/seq-properties.hs
index 4f4f468..def17b3 100644
--- a/tests/seq-properties.hs
+++ b/tests/seq-properties.hs
@@ -112,7 +112,15 @@ instance (Arbitrary a, Sized a) => Arbitrary (FingerTree a) where
arb :: (Arbitrary a, Sized a) => Int -> Gen (FingerTree a)
arb 0 = return Empty
arb 1 = Single <$> arbitrary
- arb n = deep <$> arbitrary <*> arb (n `div` 2) <*> arbitrary
+ arb n = do
+ pr <- arbitrary
+ sf <- arbitrary
+ let n_pr = Prelude.length (toList pr)
+ let n_sf = Prelude.length (toList sf)
+ -- adding n `div` 7 ensures that n_m >= 0, and makes more Singles
+ let n_m = max (n `div` 7) ((n - n_pr - n_sf) `div` 3)
+ m <- arb n_m
+ return $ deep pr m sf
shrink (Deep _ (One a) Empty (One b)) = [Single a, Single b]
shrink (Deep _ pr m sf) =
More information about the ghc-commits
mailing list