{-# LANGUAGE PatternGuards #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE ViewPatterns #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
module Config where
import Data.Label
import Data.Maybe
import Data.Bits
import System.Console.GetOpt
data Config
= Config
{
-- Which QuickCheck test types to enable?
_configDouble :: Bool
, _configFloat :: Bool
, _configInt64 :: Bool
, _configInt32 :: Bool
, _configInt16 :: Bool
, _configInt8 :: Bool
, _configWord64 :: Bool
, _configWord32 :: Bool
, _configWord16 :: Bool
, _configWord8 :: Bool
}
$(mkLabel ''Config)
defaults :: Config
defaults = Config
{
_configDouble = True
, _configFloat = False
, _configInt64 = $( [e| finiteBitSize (undefined::Int) == 64 |] )
, _configInt32 = $( [e| finiteBitSize (undefined::Int) == 32 |] )
, _configInt16 = False
, _configInt8 = False
, _configWord64 = False
, _configWord32 = False
, _configWord16 = False
, _configWord8 = False
}
extensive :: Config
extensive = Config
{
_configDouble = True
, _configFloat = True
, _configInt64 = True
, _configInt32 = True
, _configInt16 = True
, _configInt8 = True
, _configWord64 = True
, _configWord32 = True
, _configWord16 = True
, _configWord8 = True
}
options :: [OptDescr (Config -> Config)]
options =
[ Option [] ["all"]
(NoArg (const extensive))
"enable tests on all primitive types"
, Option [] ["double"]
(OptArg (set configDouble . read . fromMaybe "True") "BOOL")
(describe configDouble "enable double-precision tests")
, Option [] ["float"]
(OptArg (set configFloat . read . fromMaybe "True") "BOOL")
(describe configFloat "enable single-precision tests")
, Option [] ["int64"]
(OptArg (set configInt64 . read . fromMaybe "True") "BOOL")
(describe configInt64 "enable 64-bit integer tests")
, Option [] ["int32"]
(OptArg (set configInt32 . read . fromMaybe "True") "BOOL")
(describe configInt32 "enable 32-bit integer tests")
, Option [] ["int16"]
(OptArg (set configInt16 . read . fromMaybe "True") "BOOL")
(describe configInt16 "enable 16-bit integer tests")
, Option [] ["int8"]
(OptArg (set configInt8 . read . fromMaybe "True") "BOOL")
(describe configInt8 "enable 8-bit integer tests")
, Option [] ["word64"]
(OptArg (set configWord64 . read . fromMaybe "True") "BOOL")
(describe configWord64 "enable 64-bit unsigned integer tests")
, Option [] ["word32"]
(OptArg (set configWord32 . read . fromMaybe "True") "BOOL")
(describe configWord32 "enable 32-bit unsigned integer tests")
, Option [] ["word16"]
(OptArg (set configWord16 . read . fromMaybe "True") "BOOL")
(describe configWord16 "enable 16-bit unsigned integer tests")
, Option [] ["word8"]
(OptArg (set configWord8 . read . fromMaybe "True") "BOOL")
(describe configWord8 "enable 8-bit unsigned integer tests")
]
where
describe f msg
= msg ++ " (" ++ show (get f defaults) ++ ")"
header :: [String]
header =
[ "accelerate-nofib (c) [2013] The Accelerate Team"
, ""
, "Usage: accelerate-nofib [OPTIONS]"
, ""
]
footer :: [String]
footer = [ "" ]