hnetcdf-0.3.0.0: test/test-hmatrix.hs
{-# LANGUAGE ScopedTypeVariables #-}
import Test.Framework (defaultMain, testGroup, Test)
import Test.Framework.Providers.HUnit
import Test.Framework.Providers.QuickCheck2
import Test.HUnit hiding (Test, assert)
import Test.QuickCheck
import Test.QuickCheck.Monadic
import qualified Data.Map as M
import Data.Maybe
import qualified Data.Vector.Storable as SV
import Numeric.LinearAlgebra.HMatrix
import Control.Error
import Control.Monad
import Foreign.C
import Data.NetCDF
import Data.NetCDF.Vector
import Data.NetCDF.HMatrix
type HMatrixRet a = IO (Either NcError (HMatrix a))
main :: IO ()
main = defaultMain tests
tests :: [Test]
tests =
[ testGroup "HMatrix handling"
[ testCase "Data ordering" hmatrixDataOrdering
]
]
hmatrixDataOrdering :: Assertion
hmatrixDataOrdering = do
let xdim = NcDim "x" 5 False
ydim = NcDim "y" 10 False
ncout = emptyNcInfo "tst-hmatrix.nc" #
addNcDim xdim #
addNcDim ydim #
addNcVar (NcVar "x" NcDouble [xdim] M.empty) #
addNcVar (NcVar "y" NcDouble [ydim] M.empty) #
addNcVar (NcVar "z1" NcDouble [ydim, xdim] M.empty) #
addNcVar (NcVar "z2" NcDouble [ydim, xdim] M.empty)
z1 = cmap realToFrac $ matrix 5 [1..50] :: Matrix CDouble
z2 = fromColumns $ toColumns z1 :: Matrix CDouble
let write nc = do
let xvar = fromJust $ ncVar nc "x"
yvar = fromJust $ ncVar nc "y"
z1var = fromJust $ ncVar nc "z1"
z2var = fromJust $ ncVar nc "z2"
put nc xvar $ SV.fromList [1..5 :: CDouble]
put nc yvar $ SV.fromList [1..10 :: CDouble]
put nc z1var $ HMatrix z1
put nc z2var $ HMatrix z2
return ()
withCreateFile ncout write (putStrLn . ("ERROR: " ++) . show)
let read nc = do
let z1var = fromJust $ ncVar nc "z1"
z2var = fromJust $ ncVar nc "z2"
Right (HMatrix z1) <- get nc z1var :: HMatrixRet CDouble
Right (HMatrix z2) <- get nc z2var :: HMatrixRet CDouble
return (z1, z2)
(z1tst, z2tst) <-
withReadFile "tst-hmatrix.nc" read (error . ("ERROR: " ++) . show)
assertBool "Straightforward write/read" (flatten z1tst == flatten z1)
assertBool "Columnar write/read" (flatten z2tst == flatten z2)