packages feed

numhask-array-0.5.1: test/test.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -Wall #-}

module Main where

import GHC.Exts (IsList (..))
import qualified Hedgehog as H
import NumHask.Array.Fixed
import NumHask.Array.Shape
import NumHask.Hedgehog
import NumHask.Prelude as P
import Test.DocTest
import qualified Prelude

genAIntegral :: forall a m r. (HasShape r, H.MonadGen m, Additive a, Bounded a, ToInteger a, FromInteger a) => m (Array (r :: [Nat]) a)
genAIntegral = fromList <$> replicateM (fromIntegral n) integral_
  where
    n = product $ shapeVal $ toShape @r

genARational :: forall a m r. (H.MonadGen m, HasShape r, Field a, ToRatio a Integer, FromRatio a Integer) => m (Array (r :: [Nat]) a)
genARational = fromList <$> replicateM (fromIntegral n) negUniform
  where
    n = product $ shapeVal $ toShape @r

main :: IO ()
main = do
  putStrLn ("NumHask.Array.Fixed DocTest turned on" :: Text)
  doctest ["src/NumHask/Array/Fixed.hs"]
  putStrLn ("NumHask.Array.Shape DocTest turned on" :: Text)
  doctest ["src/NumHask/Array/Shape.hs"]
  putStrLn ("NumHask.Array.Dynamic DocTest turned on" :: Text)
  doctest ["src/NumHask/Array/Dynamic.hs"]
  bVInt <-
    assertProps
      "Vector Int 6"
      (Prelude.fromInteger 100)
      (genAIntegral :: H.Gen (Vector 6 Int))
      numhaskProps
  bMInt <-
    assertProps
      "Matrix '[3,4] Int"
      (Prelude.fromInteger 100)
      (genAIntegral :: H.Gen (Array '[3, 4] Int))
      numhaskProps
  unless
    (bVInt && bMInt)
    exitFailure

numhaskProps ::
  forall a.
  ( Show a,
    Eq a,
    Subtractive a
  ) =>
  H.Gen a ->
  [(H.PropertyName, H.Property)]
numhaskProps g =
  mconcat $
    (\x -> x g)
      <$> [ isAdditive,
            isSubtractive
          ]