packages feed

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 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]