Skip to content

Commit 48b33b4

Browse files
authored
Allow full Number range for chooseFloat (#97)
1 parent 94b7d73 commit 48b33b4

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

src/Test/QuickCheck/Gen.purs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,11 @@ resize sz g = Gen $ state \{ newSeed, size } ->
122122
-- | Create a random generator which samples a range of `Number`s i
123123
-- | with uniform probability.
124124
choose :: Number -> Number -> Gen Number
125-
choose a b = (*) (max' - min') >>> (+) min' <$> uniform where
126-
min' = min a b
127-
max' = max a b
125+
choose a b = (*) (max' - min') >>> (+) min' >>> unscale <$> uniform where
126+
unscale = (_ * 2.0)
127+
scale = (_ * 0.5)
128+
min' = scale $ min a b
129+
max' = scale $ max a b
128130

129131
-- | Create a random generator which chooses uniformly distributed
130132
-- | integers from the closed interval `[a, b]`.

test/Main.purs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,24 @@ module Test.Main where
22

33
import Prelude
44

5-
import Effect (Effect)
6-
import Effect.Console (log, logShow)
7-
import Effect.Exception (try)
85
import Control.Monad.Gen.Class as MGen
6+
import Data.Array (all)
97
import Data.Array.Partial (head)
108
import Data.Either (isLeft)
119
import Data.Foldable (sum)
1210
import Data.Generic.Rep (class Generic)
1311
import Data.Generic.Rep.Show (genericShow)
1412
import Data.Tuple (fst)
13+
import Effect (Effect)
14+
import Effect.Console (log, logShow)
15+
import Effect.Exception (try)
16+
import Global (isFinite)
1517
import Partial.Unsafe (unsafePartial)
18+
import Random.LCG (mkSeed)
1619
import Test.Assert (assert)
1720
import Test.QuickCheck (class Testable, quickCheck, (/=?), (<=?), (<?), (==?), (>=?), (>?))
1821
import Test.QuickCheck.Arbitrary (arbitrary, genericArbitrary, class Arbitrary)
19-
import Test.QuickCheck.Gen (Gen, vectorOf, randomSample', resize, Size, runGen, sized)
20-
import Random.LCG (mkSeed)
22+
import Test.QuickCheck.Gen (Gen, Size, randomSample, randomSample', resize, runGen, sized, vectorOf)
2123

2224
data Foo a = F0 a | F1 a a | F2 { foo :: a, bar :: Array a }
2325
derive instance genericFoo :: Generic (Foo a) _
@@ -84,6 +86,9 @@ main = do
8486
quickCheck $ 4 >? 3
8587
quickCheckFail $ 4 <=? 3
8688

89+
log "Checking that chooseFloat over the whole Number range always yields a finite value"
90+
randomSample (MGen.chooseFloat ((-1.7976931348623157e+308)) (1.7976931348623157e+308)) >>= assert <<< all isFinite
91+
8792
where
8893
go n = map (sum <<< unsafeHead) $ randomSample' 1 (vectorOf n (arbitrary :: Gen Int))
8994

0 commit comments

Comments
 (0)