9a5ddda511
Drop support for building with ghc older than 8.4.4, and with older versions of serveral haskell libraries than will be included in Debian 10. The only remaining version ifdefs in the entire code base are now a couple for aws! This commit should only be merged after the Debian 10 release. And perhaps it will need to wait longer than that; it would make backporting new versions of git-annex to Debian 9 (stretch) which has been actively happening as recently as this year. This commit was sponsored by Ilya Shlyakhter.
52 lines
1.4 KiB
Haskell
52 lines
1.4 KiB
Haskell
{- QuickCheck with additional instances
|
|
-
|
|
- Copyright 2012-2014 Joey Hess <id@joeyh.name>
|
|
-
|
|
- License: BSD-2-clause
|
|
-}
|
|
|
|
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
|
{-# LANGUAGE TypeSynonymInstances #-}
|
|
|
|
module Utility.QuickCheck
|
|
( module X
|
|
, module Utility.QuickCheck
|
|
) where
|
|
|
|
import Test.QuickCheck as X
|
|
import Data.Time.Clock.POSIX
|
|
import Data.Ratio
|
|
import System.Posix.Types
|
|
import Data.List.NonEmpty (NonEmpty(..))
|
|
import Prelude
|
|
|
|
{- Times before the epoch are excluded. Half with decimal and half without. -}
|
|
instance Arbitrary POSIXTime where
|
|
arbitrary = do
|
|
n <- nonNegative arbitrarySizedBoundedIntegral :: Gen Int
|
|
d <- nonNegative arbitrarySizedIntegral
|
|
withd <- arbitrary
|
|
return $ if withd
|
|
then fromIntegral n + fromRational (1 % max d 1)
|
|
else fromIntegral n
|
|
|
|
{- Pids are never negative, or 0. -}
|
|
instance Arbitrary ProcessID where
|
|
arbitrary = positive arbitrarySizedBoundedIntegral
|
|
|
|
{- Inodes are never negative. -}
|
|
instance Arbitrary FileID where
|
|
arbitrary = nonNegative arbitrarySizedIntegral
|
|
|
|
{- File sizes are never negative. -}
|
|
instance Arbitrary FileOffset where
|
|
arbitrary = nonNegative arbitrarySizedIntegral
|
|
|
|
instance Arbitrary l => Arbitrary (NonEmpty l) where
|
|
arbitrary = (:|) <$> arbitrary <*> arbitrary
|
|
|
|
nonNegative :: (Num a, Ord a) => Gen a -> Gen a
|
|
nonNegative g = g `suchThat` (>= 0)
|
|
|
|
positive :: (Num a, Ord a) => Gen a -> Gen a
|
|
positive g = g `suchThat` (> 0)
|