@@ -6,16 +6,19 @@ import Control.Monad.Eff (Eff)
6
6
import Control.Monad.Eff.Console (CONSOLE , log , logShow )
7
7
import Control.Monad.Eff.Exception (try , EXCEPTION )
8
8
import Control.Monad.Eff.Random (RANDOM )
9
+ import Control.Monad.Gen.Class as MGen
9
10
import Data.Array.Partial (head )
10
11
import Data.Either (isLeft )
11
12
import Data.Foldable (sum )
12
13
import Data.Generic.Rep (class Generic )
13
14
import Data.Generic.Rep.Show (genericShow )
15
+ import Data.Tuple (fst )
14
16
import Partial.Unsafe (unsafePartial )
15
17
import Test.Assert (assert , ASSERT )
16
18
import Test.QuickCheck (class Testable , quickCheck , (/=?), (<=?), (<?), (==?), (>=?), (>?))
17
19
import Test.QuickCheck.Arbitrary (arbitrary , genericArbitrary , class Arbitrary )
18
- import Test.QuickCheck.Gen (Gen , vectorOf , randomSample' )
20
+ import Test.QuickCheck.Gen (Gen , vectorOf , randomSample' , resize , Size , runGen , sized )
21
+ import Test.QuickCheck.LCG (mkSeed )
19
22
20
23
data Foo a = F0 a | F1 a a | F2 { foo :: a , bar :: Array a }
21
24
derive instance genericFoo :: Generic (Foo a ) _
@@ -31,8 +34,26 @@ quickCheckFail
31
34
quickCheckFail = assert <=< map isLeft <<< try <<< quickCheck
32
35
33
36
37
+ testResize :: (forall a . Size -> Gen a -> Gen a ) -> Boolean
38
+ testResize resize' =
39
+ let
40
+ initialSize = 2
41
+ gen = do
42
+ s1 <- sized pure
43
+ s2 <- resize' 1 (sized pure)
44
+ s3 <- sized pure
45
+ pure $ [ s1, s2, s3 ] == [ initialSize, 1 , initialSize ]
46
+ in
47
+ fst $ runGen gen { newSeed: mkSeed 0 , size: initialSize }
48
+
49
+
34
50
main :: Eff (assert :: ASSERT , console :: CONSOLE , random :: RANDOM , exception :: EXCEPTION ) Unit
35
51
main = do
52
+ log " MonadGen.resize"
53
+ assert (testResize (MGen .resize <<< const))
54
+ log " Gen.resize"
55
+ assert (testResize (resize))
56
+
36
57
log " Try with some little Gens first"
37
58
logShow =<< go 10
38
59
logShow =<< go 100
0 commit comments