accelerate-examples-1.0.0.0: examples/nofib/Test/Imaginary/SASUM.hs
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeOperators #-}
module Test.Imaginary.SASUM (
test_sasum,
) where
import Config
import QuickCheck.Arbitrary.Array ()
import Prelude as P
import Data.Array.Accelerate as A
import Data.Array.Accelerate.Examples.Internal as A
import Data.Label
import Data.Maybe
import Data.Typeable
import Test.QuickCheck
test_sasum :: Backend -> Config -> Test
test_sasum backend opt = testGroup "sasum" $ catMaybes
[ testElt configInt8 (undefined :: Int8)
, testElt configInt16 (undefined :: Int16)
, testElt configInt32 (undefined :: Int32)
, testElt configInt64 (undefined :: Int64)
, testElt configWord8 (undefined :: Word8)
, testElt configWord16 (undefined :: Word16)
, testElt configWord32 (undefined :: Word32)
, testElt configWord64 (undefined :: Word64)
, testElt configFloat (undefined :: Float)
, testElt configDouble (undefined :: Double)
]
where
testElt :: forall a. (P.Num a, A.Num a, Similar a, Arbitrary a)
=> (Config :-> Bool)
-> a
-> Maybe Test
testElt ok _
| P.not (get ok opt) = Nothing
| otherwise = Just
$ testProperty (show (typeOf (undefined :: a))) (run_sasum :: Vector a -> Property)
run_sasum xs =
run1 backend sasum xs `indexArray` Z
~?=
P.sum (P.map abs (toList xs))
-- Accelerate implementation ---------------------------------------------------
sasum :: A.Num e => Acc (Vector e) -> Acc (Scalar e)
sasum = A.fold (+) 0 . A.map abs