packages feed

accelerate-examples-1.0.0.0: examples/nofib/Test/Base.hs

{-# LANGUAGE TypeOperators #-}

module Test.Base where

import Prelude                                          as P
import Data.Array.Accelerate                            as A
import Data.Array.Accelerate.Array.Sugar


-- Miscellaneous
--
indexHead :: sh:.Int -> Int
indexHead (_ :. sz) = sz

indexTail :: sh:.Int -> sh
indexTail (sh :. _) = sh

isEmptyArray :: Shape sh => Array sh e -> Bool
isEmptyArray arr = arraySize (arrayShape arr) P.== 0

mkDim :: Shape sh => Int -> sh
mkDim n = listToShape (P.replicate n 0)

dim0 :: DIM0
dim0 = mkDim 0

dim1 :: DIM1
dim1 = mkDim 1

dim2 :: DIM2
dim2 = mkDim 2

dim3 :: DIM3
dim3 = mkDim 3

dim4 :: DIM4
dim4 = mkDim 4

splitEvery :: Int -> [a] -> [[a]]
splitEvery _ [] = cycle [[]]
splitEvery n xs =
  let (h,t) = splitAt n xs
  in  h : splitEvery n t

splitPlaces :: P.Integral i => [i] -> [a] -> [[a]]
splitPlaces []     _  = []
splitPlaces (i:is) vs =
  let (h,t) = splitAt (P.fromIntegral i) vs
  in  h : splitPlaces is t