packages feed

hasktorch-ffi-thc-0.0.1.0: tests/NNSpec.hs

{-# LANGUAGE ConstraintKinds #-}
module NNSpec (spec) where

import Foreign hiding (void)
import Control.Monad (void)
import Foreign.C.Types

import Test.Hspec

import Torch.Types.THC

import qualified Torch.FFI.TH.Random as R
import qualified Torch.FFI.THC.General as General

import qualified Torch.FFI.THC.NN.Double as D
import qualified Torch.FFI.THC.Double.Tensor as D
import qualified Torch.FFI.THC.Double.TensorMath as D
import qualified Torch.FFI.THC.Double.TensorMathReduce as D
import qualified Torch.FFI.THC.Double.TensorRandom as D

{-
import Torch.FFI.THCUNN.Float as F
import Torch.FFI.THC.Float.Tensor as F
import Torch.FFI.THC.Float.TensorMath as F
import Torch.FFI.THC.Float.TensorRandom as F
-}

import Torch.FFI.TestsNN

main :: IO ()
main = hspec spec

spec :: Spec
spec = do
  s <- runIO (General.c_THCState_alloc >>= \s -> General.c_THCudaInit s >> pure s)
  afterAll_ (void $ General.c_THCState_free s) $ do
    -- describe "Float NNs"  $ testSuite nullPtr floatBook
    describe "Double NNs" $ testSuite s doubleBook


doubleBook :: NNTestSuite (Ptr C'THCState) (Ptr C'THCudaDoubleTensor) CDouble CDouble (Ptr ())
doubleBook = NNTestSuite
  { _newWithSize1d = D.c_newWithSize1d
  , _newWithSize2d = D.c_newWithSize2d
  , _newGen = pure nullPtr
  , _normal = Right D.c_normal
  , _fill = D.c_fill
  , _sumall = D.c_sumall
  , _free = D.c_free
  , _nnAbsUpdateOutput = D.c_Abs_updateOutput
  , _nnHSUpdateOutput = Nothing
  , _nnL1UpdateOutput = D.c_L1Cost_updateOutput
  , _nnRReLUUpdateOutput = D.c_RReLU_updateOutput
  }

{-
floatBook :: NNTestSuite (Ptr C'THNNState) (Ptr C'THFloatTensor) CFloat CDouble
floatBook = NNTestSuite
  { _newWithSize1d = F.c_newWithSize1d
  , _newWithSize2d = F.c_newWithSize2d
  , _newGen = R.c_THGenerator_new
  , _normal = F.c_normal
  , _fill = F.c_fill
  , _sumall = F.c_sumall
  , _free = F.c_free
  , _nnAbsUpdateOutput = F.c_Abs_updateOutput
  , _nnHSUpdateOutput = F.c_HardShrink_updateOutput
  , _nnL1UpdateOutput = F.c_L1Cost_updateOutput
  , _nnRReLUUpdateOutput = F.c_RReLU_updateOutput
  }
-}