{-# LANGUAGE TypeApplications #-} module ArrayFire.UtilSpec where import qualified ArrayFire as A import Data.Complex import Data.Int import Data.Proxy import Data.Word import Foreign.C.Types import System.Directory import Test.Hspec spec :: Spec spec = describe "Util spec" $ do it "Should get size of" $ do A.getSizeOf (Proxy @Int) `shouldBe` 8 A.getSizeOf (Proxy @Int64) `shouldBe` 8 A.getSizeOf (Proxy @Int32) `shouldBe` 4 A.getSizeOf (Proxy @Int16) `shouldBe` 2 A.getSizeOf (Proxy @Word) `shouldBe` 8 A.getSizeOf (Proxy @Word64) `shouldBe` 8 A.getSizeOf (Proxy @Word32) `shouldBe` 4 A.getSizeOf (Proxy @Word16) `shouldBe` 2 A.getSizeOf (Proxy @Word8) `shouldBe` 1 A.getSizeOf (Proxy @CBool) `shouldBe` 1 A.getSizeOf (Proxy @Double) `shouldBe` 8 A.getSizeOf (Proxy @Float) `shouldBe` 4 A.getSizeOf (Proxy @(Complex Float)) `shouldBe` 8 A.getSizeOf (Proxy @(Complex Double)) `shouldBe` 16 it "Should get version" $ do x <- A.getVersion x `shouldBe` (3,8,2) it "Should get revision" $ do x <- A.getRevision x `shouldSatisfy` (not . null) it "Should save / read array" $ do let arr = A.constant @Int [1,1,1,1] 10 idx <- A.saveArray "key" arr "file.array" False doesFileExist "file.array" `shouldReturn` True (`shouldBe` idx) =<< A.readArrayKeyCheck "file.array" "key" (`shouldBe` arr) =<< A.readArrayIndex "file.array" idx (`shouldBe` arr) =<< A.readArrayKey "file.array" "key" removeFile "file.array"