{-# LANGUAGE BangPatterns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE TemplateHaskell #-} module Level2 ( tests ) where import Backend import Similar import Data.Array.Accelerate as A import Data.Array.Accelerate.Data.Complex as A import Data.Array.Accelerate.Numeric.LinearAlgebra.BLAS.Level2 import Hedgehog import Hedgehog.Gen.Array import qualified Hedgehog.Gen as Gen import qualified Hedgehog.Range as Range import Data.String import Text.Printf import Prelude as P tests :: Backend -> IO Bool tests backend = checkParallel $ Group (fromString $ printf "Tests.Level2.%s" (show backend)) [ ("gemv.float32", test_gemv backend r f32) , ("gemv.float64", test_gemv backend r f64) , ("gemv.complex32", test_gemv backend r c32) , ("gemv.complex64", test_gemv backend r c64) ] where r = Range.linearFrom 0 1 128 f32 = Gen.float (Range.linearFracFrom 0 (-1) 1) f64 = Gen.double (Range.linearFracFrom 0 (-1) 1) c32 = (:+) <$> f32 <*> f32 c64 = (:+) <$> f64 <*> f64 test_gemv :: (Numeric e, Similar e) => Backend -> Range Int -> Gen e -> Property test_gemv backend r g = property $ do alpha <- forAll g m <- forAll (Gen.int r) n <- forAll (Gen.int r) opA <- forAll (Gen.element [N,T,H]) vecx <- forAll (genArray (Z :. n) g) matA <- forAll $ case opA of N -> genArray (Z :. m :. n) g _ -> genArray (Z :. n :. m) g -- let t = gemv (constant alpha) opA (use matA) (use vecx) -- run Interpreter t ~~~ run backend t