module MathSpec (spec) where
import Foreign.C.Types
import Test.Hspec
-- import Torch.FFI.THC.Random
import qualified Torch.FFI.THC.Double.Tensor as D
import qualified Torch.FFI.THC.Double.TensorMath as D
import qualified Torch.FFI.THC.Double.TensorMathPointwise as D
import qualified Torch.FFI.THC.Double.TensorRandom as D
import Internal
main :: IO ()
main = hspec spec
spec :: Spec
spec =
describe "something true" $ it "is true" $ True `shouldBe` True
--describe "Math" $ withCudaState $ \g -> do
-- it "Can initialize values with the fill method" $ do
-- t1 <- D.c_newWithSize2d g 2 2
-- D.c_fill g t1 3.1
-- r <- D.c_get2d g t1 0 0
-- r `shouldBe` (3.1 :: CDouble)
-- D.c_free g t1
-- it "Can invert double values with cinv" $ do
-- t1 <- D.c_newWithSize2d g 3 2
-- D.c_fill g t1 2.0
-- result <- D.c_newWithSize2d g 3 2
-- D.c_cinv g result t1
-- r <- D.c_get2d g result 0 0
-- r `shouldBe` (0.5 :: CDouble)
-- r <- D.c_get2d g t1 0 0
-- r `shouldBe` (2.0 :: CDouble)
-- D.c_free g t1
-- D.c_free g result
-- cinv doesn't seem to be excluded by the preprocessor, yet is not implemented
-- for Int
-- it "Can invert int values with cinv (?)" $ do
-- t1 <- c_THIntTensor_newWithSize2d 3 2
-- c_THIntTensor_fill t1 2
-- result <- c_THIntTensor_newWithSize2d 3 2
-- c_THIntTensor_cinv result t1
-- c_THIntTensor_get2d result 0 0 `shouldBe` (0 :: CInt)
-- c_THIntTensor_get2d t1 0 0 `shouldBe` (2 :: CInt)
-- c_THIntTensor_free t1
-- c_THIntTensor_free result