{-# 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,6,4) 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"