1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
|
{-# LANGUAGE CPP #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE StandaloneDeriving #-}
#if MIN_VERSION_base(4,10,0)
{-# LANGUAGE TypeApplications #-}
#endif
module Tests.Orphanage where
#if !MIN_VERSION_base(4,8,0)
import Control.Applicative
import Data.Monoid as Monoid
#endif
#if MIN_VERSION_base(4,9,0) && !MIN_VERSION_QuickCheck(2,10,0)
import qualified Data.Semigroup as Semigroup
#endif
#if MIN_VERSION_base(4,10,0)
import Data.Proxy
import qualified Type.Reflection as Refl
#endif
import GHC.Fingerprint.Type
import Data.Ord
#if !MIN_VERSION_QuickCheck(2,10,0)
import Foreign.C.Types
import System.Exit (ExitCode(..))
import Test.QuickCheck.Gen
#endif
import Test.QuickCheck.Arbitrary
import qualified Data.Vector.Primitive as Vector.Primitive
#if !MIN_VERSION_quickcheck_instances(0,3,17)
import qualified Data.ByteString.Short as BSS
#endif
--------------------------------------------------------------------------------
-- QuickCheck Orphans
-- A _LOT_ of orphans instances for QuickCheck. Some are already in
-- git HEAD and some are still waiting as pull request
--
-- [https://github.com/nick8325/quickcheck/pull/90]
-- Foreign C types
#if !MIN_VERSION_QuickCheck(2,10,0)
instance Arbitrary CChar where
arbitrary = CChar <$> arbitrary
shrink (CChar x) = CChar <$> shrink x
instance Arbitrary CSChar where
arbitrary = CSChar <$> arbitrary
shrink (CSChar x) = CSChar <$> shrink x
instance Arbitrary CUChar where
arbitrary = CUChar <$> arbitrary
shrink (CUChar x) = CUChar <$> shrink x
instance Arbitrary CShort where
arbitrary = CShort <$> arbitrary
shrink (CShort x) = CShort <$> shrink x
instance Arbitrary CUShort where
arbitrary = CUShort <$> arbitrary
shrink (CUShort x) = CUShort <$> shrink x
instance Arbitrary CInt where
arbitrary = CInt <$> arbitrary
shrink (CInt x) = CInt <$> shrink x
instance Arbitrary CUInt where
arbitrary = CUInt <$> arbitrary
shrink (CUInt x) = CUInt <$> shrink x
instance Arbitrary CLong where
arbitrary = CLong <$> arbitrary
shrink (CLong x) = CLong <$> shrink x
instance Arbitrary CULong where
arbitrary = CULong <$> arbitrary
shrink (CULong x) = CULong <$> shrink x
instance Arbitrary CPtrdiff where
arbitrary = CPtrdiff <$> arbitrary
shrink (CPtrdiff x) = CPtrdiff <$> shrink x
instance Arbitrary CSize where
arbitrary = CSize <$> arbitrary
shrink (CSize x) = CSize <$> shrink x
instance Arbitrary CWchar where
arbitrary = CWchar <$> arbitrary
shrink (CWchar x) = CWchar <$> shrink x
instance Arbitrary CSigAtomic where
arbitrary = CSigAtomic <$> arbitrary
shrink (CSigAtomic x) = CSigAtomic <$> shrink x
instance Arbitrary CLLong where
arbitrary = CLLong <$> arbitrary
shrink (CLLong x) = CLLong <$> shrink x
instance Arbitrary CULLong where
arbitrary = CULLong <$> arbitrary
shrink (CULLong x) = CULLong <$> shrink x
instance Arbitrary CIntPtr where
arbitrary = CIntPtr <$> arbitrary
shrink (CIntPtr x) = CIntPtr <$> shrink x
instance Arbitrary CUIntPtr where
arbitrary = CUIntPtr <$> arbitrary
shrink (CUIntPtr x) = CUIntPtr <$> shrink x
instance Arbitrary CIntMax where
arbitrary = CIntMax <$> arbitrary
shrink (CIntMax x) = CIntMax <$> shrink x
instance Arbitrary CUIntMax where
arbitrary = CUIntMax <$> arbitrary
shrink (CUIntMax x) = CUIntMax <$> shrink x
instance Arbitrary CClock where
arbitrary = CClock <$> arbitrary
shrink (CClock x) = CClock <$> shrink x
instance Arbitrary CTime where
arbitrary = CTime <$> arbitrary
shrink (CTime x) = CTime <$> shrink x
instance Arbitrary CUSeconds where
arbitrary = CUSeconds <$> arbitrary
shrink (CUSeconds x) = CUSeconds <$> shrink x
instance Arbitrary CSUSeconds where
arbitrary = CSUSeconds <$> arbitrary
shrink (CSUSeconds x) = CSUSeconds <$> shrink x
instance Arbitrary CFloat where
arbitrary = CFloat <$> arbitrary
shrink (CFloat x) = CFloat <$> shrink x
instance Arbitrary CDouble where
arbitrary = CDouble <$> arbitrary
shrink (CDouble x) = CDouble <$> shrink x
#endif
-- Miscellaneous types from base
#if MIN_VERSION_base(4,9,0) && !MIN_VERSION_QuickCheck(2,10,0)
instance Arbitrary a => Arbitrary (Semigroup.Min a) where
arbitrary = fmap Semigroup.Min arbitrary
shrink = map Semigroup.Min . shrink . Semigroup.getMin
instance Arbitrary a => Arbitrary (Semigroup.Max a) where
arbitrary = fmap Semigroup.Max arbitrary
shrink = map Semigroup.Max . shrink . Semigroup.getMax
instance Arbitrary a => Arbitrary (Semigroup.First a) where
arbitrary = fmap Semigroup.First arbitrary
shrink = map Semigroup.First . shrink . Semigroup.getFirst
instance Arbitrary a => Arbitrary (Semigroup.Last a) where
arbitrary = fmap Semigroup.Last arbitrary
shrink = map Semigroup.Last . shrink . Semigroup.getLast
instance Arbitrary a => Arbitrary (Semigroup.Option a) where
arbitrary = fmap Semigroup.Option arbitrary
shrink = map Semigroup.Option . shrink . Semigroup.getOption
instance Arbitrary a => Arbitrary (Semigroup.WrappedMonoid a) where
arbitrary = fmap Semigroup.WrapMonoid arbitrary
shrink = map Semigroup.WrapMonoid . shrink . Semigroup.unwrapMonoid
#endif
instance Arbitrary a => Arbitrary (Down a) where
arbitrary = fmap Down arbitrary
shrink = map Down . shrink . (\(Down a) -> a)
#if !MIN_VERSION_QuickCheck(2,10,0)
instance Arbitrary ExitCode where
arbitrary = frequency [(1, return ExitSuccess), (3, fmap ExitFailure arbitrary)]
shrink (ExitFailure x) = ExitSuccess : [ ExitFailure x' | x' <- shrink x ]
shrink _ = []
#endif
#if !MIN_VERSION_quickcheck_instances(0,3,17)
instance Arbitrary BSS.ShortByteString where
arbitrary = BSS.pack <$> arbitrary
#endif
instance (Vector.Primitive.Prim a, Arbitrary a
) => Arbitrary (Vector.Primitive.Vector a) where
arbitrary = Vector.Primitive.fromList <$> arbitrary
#if MIN_VERSION_base(4,7,0) && !MIN_VERSION_QuickCheck(2,10,0)
instance Arbitrary (Proxy a) where
arbitrary = return Proxy
#endif
instance Arbitrary Fingerprint where
arbitrary = Fingerprint <$> arbitrary <*> arbitrary
#if MIN_VERSION_base(4,10,0)
data Kind a = Type a
instance Arbitrary Refl.SomeTypeRep where
arbitrary = return (Refl.someTypeRep $ Proxy @([Either (Maybe Int) (Proxy ('Type String))]))
#endif
|