packages feed

text-show-instances-1: tests/Instances/Miscellaneous.hs

{-# LANGUAGE CPP                        #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE StandaloneDeriving         #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
{-|
Module:      Instances.Miscellaneous
Copyright:   (C) 2014-2015 Ryan Scott
License:     BSD-style (see the file LICENSE)
Maintainer:  Ryan Scott
Stability:   Provisional
Portability: GHC

Provides miscellaneous 'Arbitrary' instances (taken from @text-show@).
-}
module Instances.Miscellaneous () where

#include "HsBaseConfig.h"

import Data.Version (Version(..))

import Foreign.Ptr (Ptr, nullPtr, plusPtr)

import Prelude ()
import Prelude.Compat

import System.Exit (ExitCode(..))

import Test.QuickCheck (Arbitrary(..), oneof)

#if MIN_VERSION_base(4,5,0)

import Foreign.C.Types (CInt(..))
# if defined(HTYPE_GID_T)
import System.Posix.Types (CGid(..))
# endif
# if defined(HTYPE_UID_T)
import System.Posix.Types (CUid(..))
# endif

#else

import Foreign.C.Types (CInt)
# if defined(HTYPE_GID_T)
import System.Posix.Types (CGid)
# endif
# if defined(HTYPE_UID_T)
import System.Posix.Types (CUid)
# endif
import Test.QuickCheck (arbitrarySizedBoundedIntegral)

#endif

instance Arbitrary ExitCode where
    arbitrary = oneof [pure ExitSuccess, ExitFailure <$> arbitrary]

instance Arbitrary (Ptr a) where
    arbitrary = plusPtr nullPtr <$> arbitrary

instance Arbitrary Version where
    arbitrary = pure $ Version [0] [""]
--     arbitrary = Version <$> arbitrary <*> arbitrary

#if MIN_VERSION_base(4,5,0)

deriving instance Arbitrary CInt

# if defined(HTYPE_GID_T)
deriving instance Arbitrary CGid
# endif

# if defined(HTYPE_UID_T)
deriving instance Arbitrary CUid
# endif

#else

instance Arbitrary CInt where
    arbitrary = arbitrarySizedBoundedIntegral

# if defined(HTYPE_GID_T)
instance Arbitrary CGid where
    arbitrary = arbitrarySizedBoundedIntegral
# endif

# if defined(HTYPE_UID_T)
instance Arbitrary CUid where
    arbitrary = arbitrarySizedBoundedIntegral
# endif

#endif