packages feed

comfort-array-shape-0.0: test/Test/Shape.hs

module Test.Shape where

import qualified Data.Array.Comfort.Shape.Static as Static
import qualified Data.Array.Comfort.Shape.Extra as ShapeExtra
import qualified Data.Array.Comfort.Shape.Test as ShapeTest
import qualified Data.Array.Comfort.Shape as Shape

import qualified Type.Data.Num.Unary.Literal as TypeNum
import qualified Type.Data.Num.Unary as Unary
import Type.Base.Proxy (Proxy)

import qualified Test.QuickCheck as QC
import Test.Utility (prefix)

import Control.Applicative ((<$>))


simplex :: (Unary.Natural n) => Proxy n -> [(String, QC.Property)]
simplex n =
   prefix
      ("Simplex." ++ show (Unary.integralFromProxy n :: Int))
      (ShapeTest.tests $
         (ShapeExtra.Simplex (Unary.unary n) . Shape.Range 'a' <$>
            QC.choose ('a','m')))

staticZeroBased :: (Unary.Natural n) => Proxy n -> [(String, QC.Property)]
staticZeroBased n =
   prefix
      ("Static.ZeroBased." ++ show (Unary.integralFromProxy n :: Int))
      (ShapeTest.tests $ return $ Static.ZeroBased $ Unary.unary n)

tests :: [(String, QC.Property)]
tests =
   simplex TypeNum.u0 ++
   simplex TypeNum.u1 ++
   simplex TypeNum.u2 ++
   simplex TypeNum.u3 ++
   simplex TypeNum.u4 ++
   staticZeroBased TypeNum.u1 ++
   staticZeroBased TypeNum.u2 ++
   staticZeroBased TypeNum.u23 ++
   []