packages feed

hedgehog 1.1 → 1.1.1

raw patch · 7 files changed

+78/−16 lines, 7 filesdep ~mmorphdep ~mtldep ~textPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: mmorph, mtl, text, transformers

API changes (from Hackage documentation)

+ Hedgehog.Internal.Config: Seed :: !Word64 -> !Word64 -> Seed
+ Hedgehog.Internal.Config: [seedGamma] :: Seed -> !Word64
+ Hedgehog.Internal.Config: [seedValue] :: Seed -> !Word64
+ Hedgehog.Internal.Config: data Seed
+ Hedgehog.Internal.Config: detectSeed :: MonadIO m => m Seed
+ Hedgehog.Internal.Config: resolveSeed :: MonadIO m => Maybe Seed -> m Seed
+ Hedgehog.Internal.Runner: [runnerSeed] :: RunnerConfig -> !Maybe Seed
+ Hedgehog.Internal.Seed: instance Language.Haskell.TH.Syntax.Lift Hedgehog.Internal.Seed.Seed
- Hedgehog.Internal.Runner: RunnerConfig :: !Maybe WorkerCount -> !Maybe UseColor -> !Maybe Verbosity -> RunnerConfig
+ Hedgehog.Internal.Runner: RunnerConfig :: !Maybe WorkerCount -> !Maybe UseColor -> !Maybe Seed -> !Maybe Verbosity -> RunnerConfig
- Hedgehog.Internal.Runner: checkNamed :: MonadIO m => Region -> UseColor -> Maybe PropertyName -> Property -> m (Report Result)
+ Hedgehog.Internal.Runner: checkNamed :: MonadIO m => Region -> UseColor -> Maybe PropertyName -> Maybe Seed -> Property -> m (Report Result)

Files

CHANGELOG.md view
@@ -1,3 +1,8 @@+## Version 1.1.1 (2022-01-29)++* Support using fixed seed via `HEDGEHOG_SEED` ([#446][446], [@simfleischman][simfleischman] / [@moodmosaic][moodmosaic])+* Better 'cover' example code in haddocks ([#423][423], [@jhrcek][jhrcek])+ ## Version 1.1 (2022-01-27)  - Replace HTraversable with TraversableB (from barbies) ([#412][412], [@ocharles][ocharles])@@ -234,18 +239,26 @@   https://github.com/utdemir [patrickt]:   https://github.com/patrickt+[simfleischman]:+  https://github.com/simfleischman+[jhrcek]:+  https://github.com/jhrcek  +[446]:+  https://github.com/hedgehogqa/haskell-hedgehog/pull/446 [436]:   https://github.com/hedgehogqa/haskell-hedgehog/pull/436-[421]:-  https://github.com/hedgehogqa/haskell-hedgehog/pull/421+[423]:+  https://github.com/hedgehogqa/haskell-hedgehog/pull/423 [415]:   https://github.com/hedgehogqa/haskell-hedgehog/pull/415 [414]:   https://github.com/hedgehogqa/haskell-hedgehog/pull/414 [413]:   https://github.com/hedgehogqa/haskell-hedgehog/pull/413+[412]:+  https://github.com/hedgehogqa/haskell-hedgehog/pull/412 [409]:   https://github.com/hedgehogqa/haskell-hedgehog/pull/409 [408]:
hedgehog.cabal view
@@ -1,4 +1,4 @@-version: 1.1+version: 1.1.1  name:   hedgehog@@ -63,7 +63,7 @@     , erf                             >= 2.0        && < 2.1     , exceptions                      >= 0.7        && < 0.11     , lifted-async                    >= 0.7        && < 0.11-    , mmorph                          >= 1.0        && < 1.2+    , mmorph                          >= 1.0        && < 1.3     , monad-control                   >= 1.0        && < 1.1     , mtl                             >= 2.1        && < 2.3     , pretty-show                     >= 1.6        && < 1.11@@ -143,7 +143,7 @@       hedgehog     , base                            >= 3          && < 5     , containers                      >= 0.4        && < 0.7-    , mmorph                          >= 1.0        && < 1.2+    , mmorph                          >= 1.0        && < 1.3     , mtl                             >= 2.1        && < 2.3     , pretty-show                     >= 1.6        && < 1.11     , text                            >= 1.1        && < 1.3
src/Hedgehog/Internal/Config.hs view
@@ -9,6 +9,9 @@     UseColor(..)   , resolveColor +  , Seed(..)+  , resolveSeed+   , Verbosity(..)   , resolveVerbosity @@ -17,14 +20,20 @@    , detectMark   , detectColor+  , detectSeed   , detectVerbosity   , detectWorkers   ) where  import           Control.Monad.IO.Class (MonadIO(..)) +import qualified Data.Text as Text+ import qualified GHC.Conc as Conc +import           Hedgehog.Internal.Seed (Seed(..))+import qualified Hedgehog.Internal.Seed as Seed+ import           Language.Haskell.TH.Syntax (Lift)  import           System.Console.ANSI (hSupportsANSI)@@ -107,6 +116,28 @@           else             pure DisableColor +splitOn :: String -> String -> [String]+splitOn needle haystack =+  fmap Text.unpack $ Text.splitOn (Text.pack needle) (Text.pack haystack)++parseSeed :: String -> Maybe Seed+parseSeed env =+  case splitOn " " env of+    [value, gamma] ->+      Seed <$> readMaybe value <*> readMaybe gamma+    _ ->+      Nothing++detectSeed :: MonadIO m => m Seed+detectSeed =+  liftIO $ do+    menv <- lookupEnv "HEDGEHOG_SEED"+    case parseSeed =<< menv of+      Nothing ->+        Seed.random+      Just seed ->+        pure seed+ detectVerbosity :: MonadIO m => m Verbosity detectVerbosity =   liftIO $ do@@ -139,6 +170,13 @@ resolveColor = \case   Nothing ->     detectColor+  Just x ->+    pure x++resolveSeed :: MonadIO m => Maybe Seed -> m Seed+resolveSeed = \case+  Nothing ->+    detectSeed   Just x ->     pure x 
src/Hedgehog/Internal/Property.hs view
@@ -1248,8 +1248,8 @@ --    prop_with_coverage = --      property $ do --        match <- forAll Gen.bool---        cover 30 "True" $ match---        cover 30 "False" $ not match+--        cover 30 \"True\" $ match+--        cover 30 \"False\" $ not match -- @ -- --   The example above requires a minimum of 30% coverage for both
src/Hedgehog/Internal/Report.hs view
@@ -63,7 +63,6 @@ import           Hedgehog.Internal.Property (coverPercentage, coverageFailures) import           Hedgehog.Internal.Property (labelCovered) -import           Hedgehog.Internal.Seed (Seed) import           Hedgehog.Internal.Show import           Hedgehog.Internal.Source import           Hedgehog.Range (Size)
src/Hedgehog/Internal/Runner.hs view
@@ -48,7 +48,6 @@ import           Hedgehog.Internal.Queue import           Hedgehog.Internal.Region import           Hedgehog.Internal.Report-import           Hedgehog.Internal.Seed (Seed) import qualified Hedgehog.Internal.Seed as Seed import           Hedgehog.Internal.Tree (TreeT(..), NodeT(..)) import           Hedgehog.Range (Size)@@ -71,6 +70,9 @@       --   the environment.     , runnerColor :: !(Maybe UseColor) +      -- | The seed to use. 'Nothing' means detect from the environment.+    , runnerSeed :: !(Maybe Seed)+       -- | How verbose to be in the runner output. 'Nothing' means detect from       --   the environment.     , runnerVerbosity :: !(Maybe Verbosity)@@ -331,10 +333,11 @@   => Region   -> UseColor   -> Maybe PropertyName+  -> Maybe Seed   -> Property   -> m (Report Result)-checkNamed region color name prop = do-  seed <- liftIO Seed.random+checkNamed region color name mseed prop = do+  seed <- resolveSeed mseed   checkRegion region color name 0 seed prop  -- | Check a property.@@ -343,7 +346,7 @@ check prop = do   color <- detectColor   liftIO . displayRegion $ \region ->-    (== OK) . reportStatus <$> checkNamed region color Nothing prop+    (== OK) . reportStatus <$> checkNamed region color Nothing Nothing prop  -- | Check a property using a specific size and seed. --@@ -373,9 +376,10 @@      putStrLn $ "━━━ " ++ unGroupName group ++ " ━━━" +    seed <- resolveSeed (runnerSeed config)     verbosity <- resolveVerbosity (runnerVerbosity config)     color <- resolveColor (runnerColor config)-    summary <- checkGroupWith n verbosity color props+    summary <- checkGroupWith n verbosity color seed props      pure $       summaryFailed summary == 0 &&@@ -390,9 +394,10 @@      WorkerCount   -> Verbosity   -> UseColor+  -> Seed   -> [(PropertyName, Property)]   -> IO Summary-checkGroupWith n verbosity color props =+checkGroupWith n verbosity color seed props =   displayRegion $ \sregion -> do     svar <- atomically . TVar.newTVar $ mempty { summaryWaiting = PropertyCount (length props) } @@ -430,7 +435,7 @@     summary <-       fmap (mconcat . fmap (fromResult . reportStatus)) $         runTasks n props start finish finalize $ \(name, prop, region) -> do-          result <- checkNamed region color (Just name) prop+          result <- checkNamed region color (Just name) (Just seed) prop           updateSummary sregion svar color             (<> fromResult (reportStatus result))           pure result@@ -463,6 +468,8 @@           Just 1       , runnerColor =           Nothing+      , runnerSeed =+          Nothing       , runnerVerbosity =           Nothing       }@@ -496,6 +503,8 @@         runnerWorkers =           Nothing       , runnerColor =+          Nothing+      , runnerSeed =           Nothing       , runnerVerbosity =           Nothing
src/Hedgehog/Internal/Seed.hs view
@@ -1,5 +1,6 @@ {-# OPTIONS_HADDOCK not-home #-} {-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveLift #-} -- | -- This is a port of "Fast Splittable Pseudorandom Number Generators" by Steele -- et. al. [1].@@ -61,6 +62,8 @@ import qualified Data.IORef as IORef import           Data.Word (Word32, Word64) +import           Language.Haskell.TH.Syntax (Lift)+ import           System.IO.Unsafe (unsafePerformIO) import           System.Random (RandomGen) import qualified System.Random as Random@@ -71,7 +74,7 @@   Seed {       seedValue :: !Word64     , seedGamma :: !Word64 -- ^ must be an odd number-    } deriving (Eq, Ord)+    } deriving (Eq, Ord, Lift)  instance Show Seed where   showsPrec p (Seed v g) =