{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedLists #-} module Main ( main ) where import Control.Composition ((.$)) import qualified Data.Array.Accelerate as A import Data.Array.Accelerate.KullbackLiebler (kullbackLiebler) import qualified Data.Array.Accelerate.LLVM.Native as CPU #ifdef ACCELERATE_GPU import qualified Data.Array.Accelerate.LLVM.PTX as GPU #endif import Data.Array.Accelerate.Test (randDist, the) import Test.Tasty import Test.Tasty.HUnit main :: IO () main = defaultMain accTests accTests :: TestTree accTests = testGroup "Unit tests" [ #ifdef ACCELERATE_GPU testCase "Setup (GPU)" $ assertBool "simple unit test" =<< selfGPU , testCase "Setup (CPU)" $ #else testCase "Setup (CPU)" $ #endif assertBool "simple unit test" =<< selfCPU ] --TODO: random gen/normalization? commonData :: IO (A.Acc (A.Scalar Double)) commonData = do datums <- randDist (A.Z A.:. 1000000) pure $ kullbackLiebler .$ datums #ifdef ACCELERATE_GPU selfGPU :: IO Bool selfGPU = do datums <- commonData let res = the $ GPU.run datums pure $ res == 0 #endif selfCPU :: IO Bool selfCPU = do datums <- commonData let res = the $ CPU.run datums pure $ res == 0