{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE RankNTypes #-}
module Data.Array.Accelerate.Test.NoFib.Issues.Issue228 (
test_issue228
) where
import Data.Array.Accelerate as A
import Data.Array.Accelerate.Test.NoFib.Base
import Test.Tasty
import Test.Tasty.HUnit
import Prelude as P
test_issue228 :: RunN -> TestTree
test_issue228 runN =
testGroup "228"
[ testCase "A" $ ref1 @=? runN (A.fold mergeExp z1 (use test1))
, testCase "B" $ ref1 @=? runN (A.fold1 mergeExp (use test1))
]
test1 :: Vector (Int,Int)
test1 = fromList (Z:.3) [(1,1),(0,0),(1,1)]
z1 :: Exp (Int,Int)
z1 = constant (1,0)
ref1 :: Scalar (Int,Int)
ref1 = fromList Z [(0,1)]
merge :: P.Num a => (a,a) -> (a,a) -> (a,a)
merge (onL, lenL) (onR, lenR) = (onL * onR, onL * lenR + lenL)
mergeExp :: Exp (Int,Int) -> Exp (Int,Int) -> Exp (Int,Int)
mergeExp e1 e2 =
let
v1 = unlift e1 :: (Exp Int,Exp Int)
v2 = unlift e2 :: (Exp Int,Exp Int)
in
lift $ merge v1 v2