{-# LANGUAGE CPP #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
#if __GLASGOW_HASKELL__ >= 706
{-# LANGUAGE DataKinds #-}
#endif
{-# OPTIONS_GHC -fno-warn-orphans #-}
{-|
Module: Instances.Trace.Hpc
Copyright: (C) 2014-2017 Ryan Scott
License: BSD-style (see the file LICENSE)
Maintainer: Ryan Scott
Stability: Provisional
Portability: GHC
Provides 'Arbitrary' instances for data types in the @hpc@ library.
-}
module Instances.Trace.Hpc () where
import qualified Generics.Deriving.TH as Generics (deriveAll0)
import Instances.Utils ((<@>))
import Instances.Utils.GenericArbitrary (genericArbitrary)
import Prelude ()
import Prelude.Compat
import Test.QuickCheck (Arbitrary(..), arbitraryBoundedEnum)
import Test.QuickCheck.Instances ()
import Trace.Hpc.Mix (Mix(..), MixEntry, BoxLabel(..), CondBox(..))
import Trace.Hpc.Tix (Tix(..), TixModule(..))
import Trace.Hpc.Util (HpcPos, Hash, toHpcPos)
instance Arbitrary Mix where
arbitrary = Mix <$> arbitrary <*> arbitrary <*> arbitrary
<*> arbitrary <@> [fMixEntry]
-- arbitrary = Mix <$> arbitrary <*> arbitrary <*> arbitrary
-- <*> arbitrary <*> arbitrary
instance Arbitrary BoxLabel where
arbitrary = genericArbitrary
deriving instance Bounded CondBox
deriving instance Enum CondBox
instance Arbitrary CondBox where
arbitrary = arbitraryBoundedEnum
instance Arbitrary Tix where
arbitrary = genericArbitrary
instance Arbitrary TixModule where
arbitrary = genericArbitrary
instance Arbitrary HpcPos where
arbitrary = genericArbitrary
instance Arbitrary Hash where
arbitrary = genericArbitrary
-------------------------------------------------------------------------------
-- Workarounds to make Arbitrary instances faster
-------------------------------------------------------------------------------
fMixEntry :: MixEntry
fMixEntry = (toHpcPos (0, 1, 2, 3), ExpBox True)
$(Generics.deriveAll0 ''BoxLabel)
$(Generics.deriveAll0 ''Tix)
$(Generics.deriveAll0 ''TixModule)
$(Generics.deriveAll0 ''HpcPos)
$(Generics.deriveAll0 ''Hash)