quickcheck-instances 0.3.20 → 0.3.21
raw patch · 7 files changed
+98/−12 lines, 7 filesdep +time-compatdep ~hashabledep ~semigroupsdep ~time
Dependencies added: time-compat
Dependency ranges changed: hashable, semigroups, time
Files
- CHANGES +5/−0
- quickcheck-instances.cabal +11/−7
- src/Test/QuickCheck/Instances/Natural.hs +4/−2
- src/Test/QuickCheck/Instances/Scientific.hs +5/−0
- src/Test/QuickCheck/Instances/Time.hs +53/−3
- src/Test/QuickCheck/Instances/UnorderedContainers.hs +6/−0
- src/Test/QuickCheck/Instances/Vector.hs +14/−0
CHANGES view
@@ -1,3 +1,8 @@+0.3.21++* Use time-compat+* Add `Function` instances for vector, unordered-containers, scientific, nats+ 0.3.20 * Support QuickCheck-2.13
quickcheck-instances.cabal view
@@ -1,5 +1,5 @@ Name: quickcheck-instances-Version: 0.3.20+Version: 0.3.21 Synopsis: Common quickcheck instances Description: QuickCheck instances.@@ -18,11 +18,11 @@ License: BSD3 License-file: LICENSE-Author: Antoine Latter <aslatter@gmail.com>+Author: Antoine Latter <aslatter@gmail.com>, Oleg Grenrus <oleg.grenrus@iki.fi> Maintainer: Oleg Grenrus <oleg.grenrus@iki.fi> Homepage: https://github.com/phadej/qc-instances Bug-reports: https://github.com/phadej/qc-instances/issues-Copyright: Copyright Antoine Latter, 2012-2014+Copyright: Copyright 2012-2016 Antoine Latter, 2017-2019 Oleg Grenrus Category: Testing Build-type: Simple Extra-source-files: CHANGES@@ -35,7 +35,8 @@ GHC==8.0.2, GHC==8.2.2, GHC==8.4.4,- GHC==8.6.4+ GHC==8.6.5,+ GHC==8.8.1 Source-repository head type: git@@ -75,21 +76,24 @@ bytestring >=0.9.2.1 && <0.11, case-insensitive >=1.2.0.4 && <1.3, containers >=0.4.2.1 && <0.7,- hashable >=1.2.5.0 && <1.3,+ hashable >=1.2.5.0 && <1.4, old-time >=1.1.0.0 && <1.2, scientific >=0.2.0.0 && <0.4, tagged >=0.8.5 && <0.9, text >=1.0.0.0 && <1.3,- time >=1.4 && <1.9,+ time-compat >=1.9.2.2 && <1.10, transformers >=0.3.0.0 && <0.6, transformers-compat >=0.5 && <0.7, unordered-containers >=0.2.2.0 && <0.3, uuid-types >=1.0.3 && <1.1, vector >=0.9 && <0.13 + -- version is irrelevant.+ Build-depends: time+ if !impl(ghc >= 8.0) build-depends:- semigroups >=0.18 && <0.19+ semigroups >=0.18.5 && <0.20 if !impl(ghc >= 7.10) build-depends:
src/Test/QuickCheck/Instances/Natural.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Test.QuickCheck.Instances.Natural () where@@ -8,7 +8,9 @@ import Numeric.Natural (Natural) import Test.QuickCheck-import Test.QuickCheck.Function (functionIntegral)+ (Arbitrary (..), CoArbitrary (..), arbitrarySizedNatural,+ coarbitraryIntegral, shrinkIntegral)+import Test.QuickCheck.Function (Function (..), functionIntegral) ------------------------------------------------------------------------------- -- nats
src/Test/QuickCheck/Instances/Scientific.hs view
@@ -24,3 +24,8 @@ instance CoArbitrary Scientific.Scientific where coarbitrary s = coarbitrary (Scientific.coefficient s, Scientific.base10Exponent s)++instance Function Scientific.Scientific where+ function = functionMap+ (\s -> (Scientific.coefficient s, Scientific.base10Exponent s))+ (uncurry Scientific.scientific)
src/Test/QuickCheck/Instances/Time.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Test.QuickCheck.Instances.Time () where@@ -8,8 +8,11 @@ import Test.QuickCheck -import qualified Data.Time as Time-import qualified Data.Time.Clock.TAI as Time+import qualified Data.Time.Calendar.Compat as Time+import qualified Data.Time.Clock.Compat as Time+import qualified Data.Time.Clock.System.Compat as Time+import qualified Data.Time.Clock.TAI.Compat as Time+import qualified Data.Time.LocalTime.Compat as Time ------------------------------------------------------------------------------- -- time@@ -70,6 +73,9 @@ instance CoArbitrary Time.NominalDiffTime where coarbitrary = coarbitraryReal +instance Function Time.NominalDiffTime where+ function = functionMap toRational fromRational+ instance Arbitrary Time.TimeZone where arbitrary = Time.TimeZone@@ -136,3 +142,47 @@ instance CoArbitrary Time.AbsoluteTime where coarbitrary = coarbitrary . flip Time.diffAbsoluteTime Time.taiEpoch++instance Arbitrary Time.DayOfWeek where+ arbitrary = elements [Time.Monday .. Time.Sunday]++instance CoArbitrary Time.DayOfWeek where+ coarbitrary = coarbitrary . fromEnum++instance Function Time.DayOfWeek where+ function = functionMap fromEnum toEnum++instance Arbitrary Time.SystemTime where+ arbitrary = Time.MkSystemTime <$> arbitrary <*> nano where+ -- generate 0 often.+ nano = frequency+ [ (1, pure 0)+ , (15, choose (0, 999999999))+ ]+ shrink (Time.MkSystemTime s n) = map (uncurry Time.MkSystemTime) (shrink (s, n))+instance CoArbitrary Time.SystemTime where+ coarbitrary (Time.MkSystemTime s n) = coarbitrary (s, n)+instance Function Time.SystemTime where+ function = functionMap+ (\(Time.MkSystemTime s n) -> (s, n))+ (uncurry Time.MkSystemTime)++instance Arbitrary Time.CalendarDiffDays where+ arbitrary = Time.CalendarDiffDays <$> arbitrary <*> arbitrary+ shrink (Time.CalendarDiffDays m d) = map (uncurry Time.CalendarDiffDays) (shrink (m, d))+instance CoArbitrary Time.CalendarDiffDays where+ coarbitrary (Time.CalendarDiffDays m d) = coarbitrary (m, d)+instance Function Time.CalendarDiffDays where+ function = functionMap+ (\(Time.CalendarDiffDays m d) -> (m, d))+ (uncurry Time.CalendarDiffDays)++instance Arbitrary Time.CalendarDiffTime where+ arbitrary = Time.CalendarDiffTime <$> arbitrary <*> arbitrary+ shrink (Time.CalendarDiffTime m d) = map (uncurry Time.CalendarDiffTime) (shrink (m, d))+instance CoArbitrary Time.CalendarDiffTime where+ coarbitrary (Time.CalendarDiffTime m nt) = coarbitrary (m, nt)+instance Function Time.CalendarDiffTime where+ function = functionMap+ (\(Time.CalendarDiffTime m nt) -> (m, nt))+ (uncurry Time.CalendarDiffTime)
src/Test/QuickCheck/Instances/UnorderedContainers.hs view
@@ -24,6 +24,9 @@ instance CoArbitrary a => CoArbitrary (HS.HashSet a) where coarbitrary = coarbitrary . HS.toList +instance (Hashable a, Eq a, Function a) => Function (HS.HashSet a) where+ function = functionMap HS.toList HS.fromList+ instance (Hashable k, Eq k, Arbitrary k) => Arbitrary1 (HML.HashMap k) where liftArbitrary arb = HML.fromList <$> liftArbitrary (liftArbitrary2 arbitrary arb)@@ -36,3 +39,6 @@ instance (CoArbitrary k, CoArbitrary v) => CoArbitrary (HML.HashMap k v) where coarbitrary = coarbitrary . HML.toList++instance (Hashable k, Eq k, Function k, Function v) => Function (HML.HashMap k v) where+ function = functionMap HML.toList HML.fromList
src/Test/QuickCheck/Instances/Vector.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE TypeOperators #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Test.QuickCheck.Instances.Vector () where @@ -7,6 +8,7 @@ import Prelude.Compat import Test.QuickCheck+import Test.QuickCheck.Function ((:->)) import qualified Data.Vector as Vector import qualified Data.Vector.Generic as GVector@@ -28,7 +30,10 @@ instance CoArbitrary a => CoArbitrary (Vector.Vector a) where coarbitrary = coarbitraryVector +instance Function a => Function (Vector.Vector a) where+ function = functionVector + instance (SVector.Storable a, Arbitrary a) => Arbitrary (SVector.Vector a) where arbitrary = arbitraryVector shrink = shrinkVector@@ -36,6 +41,9 @@ instance (SVector.Storable a, CoArbitrary a) => CoArbitrary (SVector.Vector a) where coarbitrary = coarbitraryVector +instance (SVector.Storable a, Function a) => Function (SVector.Vector a) where+ function = functionVector+ instance (UVector.Unbox a, Arbitrary a) => Arbitrary (UVector.Vector a) where arbitrary = arbitraryVector shrink = shrinkVector@@ -43,6 +51,9 @@ instance (UVector.Unbox a, CoArbitrary a) => CoArbitrary (UVector.Vector a) where coarbitrary = coarbitraryVector +instance (UVector.Unbox a, Function a) => Function (UVector.Vector a) where+ function = functionVector+ arbitraryVector :: (GVector.Vector v a, Arbitrary a) => Gen (v a) arbitraryVector = GVector.fromList `fmap` arbitrary @@ -51,3 +62,6 @@ coarbitraryVector :: (GVector.Vector v a, CoArbitrary a) => v a -> Gen b -> Gen b coarbitraryVector = coarbitrary . GVector.toList++functionVector :: (GVector.Vector v a, Function a) => (v a -> c) -> v a :-> c+functionVector = functionMap GVector.toList GVector.fromList