packages feed

accelerate-examples-0.15.0.0: examples/nofib/Test/Issues/Issue168.hs

module Test.Issues.Issue168 (test_issue168)
  where

import Config
import ParseArgs
import Test.Base
import Test.Framework
import Test.Framework.Providers.HUnit

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


test_issue168 :: Config -> Test
test_issue168 conf = testGroup "168"
  [ testCase "A" (assertEqual ref1 $ run backend (A.fill sh test1))
  , testCase "B" (assertEqual ref2 $ run backend (A.fill sh test2))
  , testCase "C" (assertEqual ref3 $ run backend (A.fill sh test3))
  ]
  where
    backend     = get configBackend conf
    sh          = index1 (constant 1) :: Exp DIM1

    -- Test 1
    -- ------
    dqc1 :: (Exp Float, Exp Float)
    dqc1 = (2,1)

    qMult1 :: (Exp Float, Exp Float) -> (Exp Float, Exp Float)
    qMult1 (a1,_) = (3, a1)

    ref1 = fromList (Z:.1) [(3.0,2.0)]

    test1 :: Exp (Float, Float)
    test1 = P.iterate (lift1 qMult1) (lift dqc1) P.!! 1

    ref2 = ref1

    test2 :: Exp (Float, Float)
    test2 = A.iterate (constant 1) (lift1 qMult1) (lift dqc1)

    -- Test 2
    -- ------
    ref3 = fromList (Z:.1) [(1.0,2.0,3.0,4.0,5.0,6.0)]

    dqc3 :: (Exp Float, Exp Float, Exp Float, Exp Float, Exp Float, Exp Float)
    dqc3 = (6,5,4,3,2,1)

    qMult3 :: (Exp Float, Exp Float, Exp Float, Exp Float, Exp Float, Exp Float)
           -> (Exp Float, Exp Float, Exp Float, Exp Float, Exp Float, Exp Float)
    qMult3 (a1,b1,c1,d1,e1,f1) = (f1,e1,d1,c1,b1,a1)

    test3 :: Exp (Float,Float,Float,Float,Float,Float)
    test3 = A.iterate (constant 1) (lift1 qMult3) (lift dqc3)