hnetcdf-0.1.0.0: test/test-raw-metadata.hs
import Test.Framework (defaultMain, testGroup, Test)
import Test.Framework.Providers.HUnit
import Test.HUnit hiding (Test)
import Data.Char
import Control.Monad
import Data.NetCDF.Raw
main :: IO ()
main = defaultMain tests
infile :: FilePath
infile = "test/tst-bathymetry.nc"
tests :: [Test]
tests =
[ testGroup "Raw basic functions"
[ testCase "Raw basic functions #1" rawBasic1 ]
, testGroup "Raw NetCDF file access 1"
[ testCase "Raw meta-data access: counts" rawMetaDataNums
, testCase "Raw meta-data access: dimensions" rawMetaDataDims
, testCase "Raw meta-data access: variables" rawMetaDataVars ]
]
rawBasic1 :: Assertion
rawBasic1 = do
let vers = nc_inq_libvers
assertBool ("bad nc_inq_libvers value: " ++ vers) (isDigit $ head vers)
rawMetaDataNums :: Assertion
rawMetaDataNums = do
(res1, ncid) <- nc_open infile 0
assertBool ("nc_open error:" ++ nc_strerror res1) (res1 == 0)
(res2, ndims) <- nc_inq_ndims ncid
assertBool ("nc_inq_ndims error:" ++ nc_strerror res2) (res2 == 0)
assertEqual "ndims /= 2" 2 ndims
(res3, nvars) <- nc_inq_nvars ncid
assertBool ("nc_inq_nvars error:" ++ nc_strerror res3) (res3 == 0)
assertEqual "nvars /= 4" 4 nvars
(res4, natts) <- nc_inq_natts ncid
assertBool ("nc_inq_natts error:" ++ nc_strerror res4) (res4 == 0)
assertEqual "natts /= 3" 3 natts
res5 <- nc_close ncid
assertBool ("nc_close error:" ++ nc_strerror res5) (res5 == 0)
rawMetaDataDims :: Assertion
rawMetaDataDims = do
(res1, ncid) <- nc_open infile 0
assertBool ("nc_open error:" ++ nc_strerror res1) (res1 == 0)
(res2, did1) <- nc_inq_dimid ncid "lat"
assertBool ("nc_inq_dimid error:" ++ nc_strerror res2) (res2 == 0)
assertEqual "did(lat) /= 0" 0 did1
(res3, did2) <- nc_inq_dimid ncid "lon"
assertBool ("nc_inq_dimid error:" ++ nc_strerror res3) (res3 == 0)
assertEqual "did(lon) /= 1" 1 did2
(res4, _) <- nc_inq_dimid ncid "foo"
assertBool "nc_inq_dimid error" (res4 /= 0)
(res5, dimname0) <- nc_inq_dimname ncid 0
assertBool ("nc_inq_dimname error:" ++ nc_strerror res5) (res5 == 0)
assertEqual "dimname0 /= 'lat'" "lat" dimname0
(res6, dimname1) <- nc_inq_dimname ncid 1
assertBool ("nc_inq_dimname error:" ++ nc_strerror res6) (res6 == 0)
assertEqual "dimname1 /= 'lon'" "lon" dimname1
(res7, _) <- nc_inq_dimname ncid 2
assertBool "nc_inq_dimname error" (res7 /= 0)
(res8, dimlen0) <- nc_inq_dimlen ncid 0
assertBool ("nc_inq_dimlen error:" ++ nc_strerror res8) (res8 == 0)
assertEqual "dimlen0 /= 144" 144 dimlen0
(res9, dimlen1) <- nc_inq_dimlen ncid 1
assertBool ("nc_inq_dimlen error:" ++ nc_strerror res9) (res9 == 0)
assertEqual "dimlen1 /= 288" 288 dimlen1
(res10, _) <- nc_inq_dimlen ncid 2
assertBool "nc_inq_dimlen error" (res10 /= 0)
(res11, dimname0', dimlen0') <- nc_inq_dim ncid 0
assertBool ("nc_inq_dim error:" ++ nc_strerror res11) (res11 == 0)
assertEqual "dimname0' /= 'lat'" "lat" dimname0'
assertEqual "dimlen0' /= 144" 144 dimlen0'
(res12, dimname1', dimlen1') <- nc_inq_dim ncid 1
assertBool ("nc_inq_dim error:" ++ nc_strerror res12) (res12 == 0)
assertEqual "dimname1' /= 'lon'" "lon" dimname1'
assertEqual "dimlen1' /= 288" 288 dimlen1'
(res13, _, _) <- nc_inq_dim ncid 2
assertBool "nc_inq_dim error" (res13 /= 0)
res14 <- nc_close ncid
assertBool ("nc_close error:" ++ nc_strerror res14) (res14 == 0)
data Var = Var { _varId :: Int
, _varName :: String
, _varNcType :: Int
, _varDims :: [Int]
, _varNAtts :: Int }
vars :: [Var]
vars = [ Var 0 "bathorig" 5 [0,1] 3
, Var 1 "depthmask" 5 [0,1] 3
, Var 2 "lat" 5 [0] 3
, Var 3 "lon" 5 [1] 3 ]
rawMetaDataVars :: Assertion
rawMetaDataVars = do
(res1, ncid) <- nc_open infile 0
assertBool ("nc_open error:" ++ nc_strerror res1) (res1 == 0)
forM_ vars $ \(Var vid' name' nctype' dims' natts') -> do
(res2, vid) <- nc_inq_varid ncid name'
assertBool ("nc_inq_varid error:" ++ nc_strerror res2) (res2 == 0)
assertEqual ("vid(" ++ name' ++ ") /= " ++ show vid') vid' vid
(res3, name, nctype, ndims, dims, natts) <- nc_inq_var ncid vid
assertBool ("nc_inq_var error:" ++ nc_strerror res3) (res3 == 0)
assertEqual ("name(" ++ name' ++ ") /= '" ++ name' ++ "'") name' name
assertEqual ("nctype(" ++ name' ++ ") /= " ++ show nctype') nctype' nctype
assertEqual ("ndims(" ++ name' ++ ") /= " ++ show (length dims'))
(length dims') ndims
assertEqual ("dims(" ++ name' ++ ") /= " ++ show dims')
dims' (take ndims dims)
assertEqual ("natts(" ++ name' ++ ") /= " ++ show natts') natts' natts
res4 <- nc_close ncid
assertBool ("nc_close error:" ++ nc_strerror res4) (res4 == 0)