quickcheck-special 0.1.0.5 → 0.1.0.6
raw patch · 2 files changed
+8/−111 lines, 2 filesdep +special-valuesdep −bytestringdep −ieee754dep −natsdep ~QuickCheckPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: special-values
Dependencies removed: bytestring, ieee754, nats, scientific, text
Dependency ranges changed: QuickCheck
API changes (from Hackage documentation)
- Test.QuickCheck.Special: instance (Test.QuickCheck.Arbitrary.Arbitrary a, Test.QuickCheck.Special.SpecialValues a) => Test.QuickCheck.Arbitrary.Arbitrary (Test.QuickCheck.Special.Special a)
- Test.QuickCheck.Special: instance (Test.QuickCheck.Special.SpecialValues a, Test.QuickCheck.Special.SpecialValues b) => Test.QuickCheck.Special.SpecialValues (Data.Either.Either a b)
- Test.QuickCheck.Special: instance (Test.QuickCheck.Special.SpecialValues a, Test.QuickCheck.Special.SpecialValues b) => Test.QuickCheck.Special.SpecialValues (a, b)
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues ()
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues Data.ByteString.Internal.ByteString
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues Data.ByteString.Lazy.Internal.ByteString
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues Data.Scientific.Scientific
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues Data.Text.Internal.Lazy.Text
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues Data.Text.Internal.Text
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues GHC.Int.Int16
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues GHC.Int.Int32
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues GHC.Int.Int64
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues GHC.Int.Int8
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues GHC.Integer.Type.Integer
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues GHC.Natural.Natural
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues GHC.Real.Rational
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues GHC.Types.Bool
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues GHC.Types.Char
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues GHC.Types.Double
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues GHC.Types.Float
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues GHC.Types.Int
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues GHC.Types.Word
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues GHC.Word.Word16
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues GHC.Word.Word32
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues GHC.Word.Word64
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues GHC.Word.Word8
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues a => Test.QuickCheck.Special.SpecialValues (GHC.Base.Maybe a)
- Test.QuickCheck.Special: instance Test.QuickCheck.Special.SpecialValues a => Test.QuickCheck.Special.SpecialValues [a]
+ Test.QuickCheck.Special: instance (Test.QuickCheck.Arbitrary.Arbitrary a, Data.SpecialValues.SpecialValues a) => Test.QuickCheck.Arbitrary.Arbitrary (Test.QuickCheck.Special.Special a)
Files
- quickcheck-special.cabal +7/−11
- src/Test/QuickCheck/Special.hs +1/−100
quickcheck-special.cabal view
@@ -1,9 +1,9 @@--- This file has been generated from package.yaml by hpack version 0.17.0.+-- This file has been generated from package.yaml by hpack version 0.18.1. -- -- see: https://github.com/sol/hpack name: quickcheck-special-version: 0.1.0.5+version: 0.1.0.6 synopsis: Edge cases and special values for QuickCheck Arbitrary instances description: The standard Arbitrary instances of QuickCheck don't generate special values. This is fixed by this package which provides the newtype Special with an Arbitrary instance. The special values are given by the SpecialValues typeclass. category: Testing@@ -27,15 +27,11 @@ src ghc-options: -Wall build-depends:- base < 6- , bytestring >= 0.9 && < 0.11- , QuickCheck >= 2.1 && < 2.11- , scientific >= 0.2 && < 0.4- , text >= 0.7 && < 1.3- , ieee754 >= 0.8 && < 0.9- if impl(ghc < 7.10)- build-depends:- nats >= 1+ base < 6+ , special-values >= 0.1 && < 1.0+ , QuickCheck >= 2.1 && < 2.11 exposed-modules: Test.QuickCheck.Special+ other-modules:+ Paths_quickcheck_special default-language: Haskell2010
src/Test/QuickCheck/Special.hs view
@@ -15,96 +15,19 @@ {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE FlexibleInstances #-} module Test.QuickCheck.Special ( Special(..), SpecialValues(..), ) where -import Data.Int-import Data.Word-import Data.Ratio-import Numeric.Natural (Natural)-import Numeric.IEEE+import Data.SpecialValues (SpecialValues(..)) import Test.QuickCheck-import qualified Data.ByteString as BS-import qualified Data.ByteString.Lazy as BL-import qualified Data.Scientific as Scientific-import qualified Data.Text as TS-import qualified Data.Text.Lazy as TL -- | Additionally to the standard Arbitrary instances, -- this generates special values with a small probability. newtype Special a = Special { getSpecial :: a } deriving (Show, Read, Functor, Bounded, Enum, Eq, Ord, Num, Real, Integral) --- | Provides a list of special values or edge cases-class SpecialValues a where- -- | Finite list of special values- specialValues :: [a]--instance SpecialValues Int where specialValues = specialInt-instance SpecialValues Int8 where specialValues = specialInt-instance SpecialValues Int16 where specialValues = specialInt-instance SpecialValues Int32 where specialValues = specialInt-instance SpecialValues Int64 where specialValues = specialInt-instance SpecialValues Word where specialValues = specialBoundedEnum-instance SpecialValues Word8 where specialValues = specialBoundedEnum-instance SpecialValues Word16 where specialValues = specialBoundedEnum-instance SpecialValues Word32 where specialValues = specialBoundedEnum-instance SpecialValues Word64 where specialValues = specialBoundedEnum-instance SpecialValues Bool where specialValues = [True, False]-instance SpecialValues () where specialValues = [()]-instance SpecialValues Float where specialValues = specialIEEE-instance SpecialValues Double where specialValues = specialIEEE--instance SpecialValues Integer where- specialValues = [ 0, 1, -1, 2, -2- , fromIntegral (minBound :: Int64) - 1- , fromIntegral (maxBound :: Int64) + 1- , fromIntegral (maxBound :: Word64) + 1- ]--instance SpecialValues Natural where- specialValues = [ 0, 1, 2, fromIntegral (maxBound :: Word64) + 1 ]--instance SpecialValues Rational where- specialValues = [ 0, 1, -1, 2, -2, 0 % 1, - 0 % 1]--instance SpecialValues Char where- specialValues = specialBoundedEnum ++ "\0\a\b\f\n\r\t\v\'\"\\aä "--instance SpecialValues TS.Text where- specialValues = fmap TS.pack specialValues--instance SpecialValues TL.Text where- specialValues = fmap TL.pack specialValues--instance SpecialValues BS.ByteString where- specialValues = fmap BS.pack specialValues--instance SpecialValues BL.ByteString where- specialValues = fmap BL.pack specialValues--instance SpecialValues Scientific.Scientific where- specialValues = [ 0- , 1, negate 1- , Scientific.scientific 1 (-1000), negate $ Scientific.scientific 1 (-1000)- , Scientific.scientific 1 1000, negate $ Scientific.scientific 1 1000- ]--instance SpecialValues a => SpecialValues [a] where- specialValues = [[], specialValues]--instance SpecialValues a => SpecialValues (Maybe a) where- specialValues = Nothing : fmap Just specialValues--instance (SpecialValues a, SpecialValues b) => SpecialValues (Either a b) where- specialValues = fmap Left specialValues ++ fmap Right specialValues--instance (SpecialValues a, SpecialValues b) => SpecialValues (a, b) where- specialValues = zip specialValues specialValues- instance (Arbitrary a, SpecialValues a) => Arbitrary (Special a) where shrink = fmap Special . shrink . getSpecial arbitrary = fmap Special $ frequency $ list specialValues@@ -112,25 +35,3 @@ instance CoArbitrary a => CoArbitrary (Special a) where coarbitrary = coarbitrary . getSpecial--specialIEEE :: IEEE a => [a]-specialIEEE = list ++ map negate list- where list = [ nan, 0, 1, epsilon, infinity- , minDenormal, succIEEE minDenormal- , minNormal, succIEEE minNormal- , succIEEE minNormal- , maxFinite, predIEEE maxFinite- , 0x1000000, predIEEE 0x1000000, succIEEE 0x1000000 -- Integer range representable by Float- , 0x20000000000000, predIEEE 0x20000000000000, succIEEE 0x20000000000000 -- Integer range representable by Double- , 0x7FFFFFFFFFFFFC00, predIEEE 0x7FFFFFFFFFFFFC00, succIEEE 0x7FFFFFFFFFFFFC00 -- Largest Int64 value representable by Double- , 0x8000000000000000, predIEEE 0x8000000000000000, succIEEE 0x8000000000000000 -- Largest Word64 value representable by Float and Double- , 0x7000000000000000, predIEEE 0x7000000000000000, succIEEE 0x7000000000000000 -- Largest Int64 value representable by Float- , 0x7000000, predIEEE 0x7000000, succIEEE 0x7000000 -- Largest Int32 value representable by Float and Double- , 0x8000000, predIEEE 0x8000000, succIEEE 0x8000000 -- Largest Word32 value representable by Float and Double- ]--specialInt :: (Num a, Bounded a) => [a]-specialInt = [0, 1, -1, 2, -2, minBound, maxBound, minBound + 1, maxBound - 1, minBound + 2, maxBound - 2]--specialBoundedEnum :: (Enum a, Bounded a) => [a]-specialBoundedEnum = [minBound, maxBound, succ minBound, pred maxBound]