/other_authors/netcdf/mexnc_common/tests/test_put_get_att.m

http://m--pack.googlecode.com/ · MATLAB · 394 lines · 303 code · 57 blank · 34 comment · 51 complexity · d1aaa6da1e62cf73a35b0fed9730f8ff MD5 · raw file

  1. function test_put_get_att ( ncfile )
  2. % TEST_PUT_ATT
  3. %
  4. % Tests the functions
  5. % PUT_ATT_TEXT
  6. % PUT_ATT_UCHAR
  7. % PUT_ATT_SCHAR
  8. % PUT_ATT_SHORT
  9. % PUT_ATT_INT
  10. % PUT_ATT_FLOAT
  11. % PUT_ATT_DOUBLE
  12. % GET_ATT_TEXT
  13. % GET_ATT_UCHAR
  14. % GET_ATT_SCHAR
  15. % GET_ATT_SHORT
  16. % GET_ATT_INT
  17. % GET_ATT_FLOAT
  18. % GET_ATT_DOUBLE
  19. %
  20. [ncid, status] = mexnc ( 'create', ncfile, nc_clobber_mode );
  21. if ( status < 0 )
  22. ncerr = mexnc ( 'strerror', status );
  23. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  24. error ( err_msg );
  25. end
  26. %
  27. % DIMDEF
  28. [xdimid, status] = mexnc ( 'def_dim', ncid, 'x', 20 );
  29. if ( status < 0 )
  30. ncerr = mexnc ( 'strerror', status );
  31. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  32. error ( err_msg );
  33. end
  34. [varid, status] = mexnc ( 'def_var', ncid, 'x', nc_double, 1, xdimid );
  35. if ( status < 0 )
  36. ncerr = mexnc ( 'strerror', status );
  37. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  38. error ( err_msg );
  39. end
  40. %
  41. % Double test
  42. input_data = 3.14159;
  43. status = mexnc ( 'put_att_double', ncid, varid, 'test_double', nc_double, 1, input_data );
  44. if ( status < 0 )
  45. ncerr = mexnc ( 'strerror', status );
  46. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  47. error ( err_msg );
  48. end
  49. [status] = mexnc ( 'enddef', ncid );
  50. if ( status < 0 )
  51. ncerr = mexnc ( 'strerror', status );
  52. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  53. error ( err_msg );
  54. end
  55. status = mexnc ( 'sync', ncid );
  56. if ( status < 0 )
  57. ncerr = mexnc ( 'strerror', status );
  58. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  59. error ( err_msg );
  60. end
  61. [return_value, status] = mexnc ( 'get_att_double', ncid, varid, 'test_double' );
  62. if ( status < 0 )
  63. ncerr = mexnc ( 'strerror', status );
  64. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  65. error ( err_msg );
  66. end
  67. if ( return_value ~= input_data )
  68. err_msg = sprintf ( '%s: return value did not match input for [PUT,GET]_ATT_DOUBLE\n', mfilename );
  69. error ( err_msg );
  70. end
  71. fprintf ( 1, 'PUT_ATT_DOUBLE succeeded.\n' );
  72. fprintf ( 1, 'GET_ATT_DOUBLE succeeded.\n' );
  73. %
  74. % float test
  75. status = mexnc ( 'redef', ncid );
  76. if ( status < 0 )
  77. ncerr = mexnc ( 'strerror', status );
  78. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  79. error ( err_msg );
  80. end
  81. input_data = single(3.14159);
  82. status = mexnc ( 'put_att_float', ncid, varid, 'test_float', nc_float, 1, input_data );
  83. if ( status < 0 )
  84. ncerr = mexnc ( 'strerror', status );
  85. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  86. error ( err_msg );
  87. end
  88. [status] = mexnc ( 'enddef', ncid );
  89. if ( status < 0 )
  90. ncerr = mexnc ( 'strerror', status );
  91. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  92. error ( err_msg );
  93. end
  94. status = mexnc ( 'sync', ncid );
  95. if ( status < 0 )
  96. ncerr = mexnc ( 'strerror', status );
  97. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  98. error ( err_msg );
  99. end
  100. [return_value, status] = mexnc ( 'get_att_float', ncid, varid, 'test_float' );
  101. if ( status < 0 )
  102. ncerr = mexnc ( 'strerror', status );
  103. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  104. error ( err_msg );
  105. end
  106. if ~strcmp(class(return_value),'single')
  107. err_msg = sprintf ( '%s: return value class did not match ''single''\n', mfilename );
  108. error ( err_msg );
  109. end
  110. if ( double(return_value) ~= double(input_data) )
  111. err_msg = sprintf ( '%s: return value did not match input for [PUT,GET]_ATT_FLOAT\n', mfilename );
  112. error ( err_msg );
  113. end
  114. fprintf ( 1, 'PUT_ATT_FLOAT succeeded.\n' );
  115. fprintf ( 1, 'GET_ATT_FLOAT succeeded.\n' );
  116. %
  117. % int test
  118. status = mexnc ( 'redef', ncid );
  119. if ( status < 0 )
  120. ncerr = mexnc ( 'strerror', status );
  121. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  122. error ( err_msg );
  123. end
  124. input_data = int32(3.14159);
  125. status = mexnc ( 'put_att_int', ncid, varid, 'test_int', nc_int, 1, input_data );
  126. if ( status < 0 )
  127. ncerr = mexnc ( 'strerror', status );
  128. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  129. error ( err_msg );
  130. end
  131. [status] = mexnc ( 'enddef', ncid );
  132. if ( status < 0 )
  133. ncerr = mexnc ( 'strerror', status );
  134. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  135. error ( err_msg );
  136. end
  137. status = mexnc ( 'sync', ncid );
  138. if ( status < 0 )
  139. ncerr = mexnc ( 'strerror', status );
  140. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  141. error ( err_msg );
  142. end
  143. [return_value, status] = mexnc ( 'get_att_int', ncid, varid, 'test_int' );
  144. if ( status < 0 )
  145. ncerr = mexnc ( 'strerror', status );
  146. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  147. error ( err_msg );
  148. end
  149. if ~strcmp(class(return_value),'int32')
  150. err_msg = sprintf ( '%s: return value class did not match ''int32''\n', mfilename );
  151. error ( err_msg );
  152. end
  153. if ( double(return_value) ~= double(input_data) )
  154. err_msg = sprintf ( '%s: return value did not match input for [PUT,GET]_ATT_INT\n', mfilename );
  155. error ( err_msg );
  156. end
  157. fprintf ( 1, 'PUT_ATT_INT succeeded.\n' );
  158. fprintf ( 1, 'GET_ATT_INT succeeded.\n' );
  159. %
  160. % short test
  161. status = mexnc ( 'redef', ncid );
  162. if ( status < 0 )
  163. ncerr = mexnc ( 'strerror', status );
  164. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  165. error ( err_msg );
  166. end
  167. input_data = int16(-235);
  168. status = mexnc ( 'put_att_short', ncid, varid, 'test_short', nc_short, 1, input_data );
  169. if ( status < 0 )
  170. ncerr = mexnc ( 'strerror', status );
  171. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  172. error ( err_msg );
  173. end
  174. [status] = mexnc ( 'enddef', ncid );
  175. if ( status < 0 )
  176. ncerr = mexnc ( 'strerror', status );
  177. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  178. error ( err_msg );
  179. end
  180. status = mexnc ( 'sync', ncid );
  181. if ( status < 0 )
  182. ncerr = mexnc ( 'strerror', status );
  183. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  184. error ( err_msg );
  185. end
  186. [return_value, status] = mexnc ( 'get_att_short', ncid, varid, 'test_short' );
  187. if ( status < 0 )
  188. ncerr = mexnc ( 'strerror', status );
  189. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  190. error ( err_msg );
  191. end
  192. if ~strcmp(class(return_value),'int16')
  193. err_msg = sprintf ( '%s: return value class did not match ''int16''\n', mfilename );
  194. error ( err_msg );
  195. end
  196. if ( double(return_value) ~= double(input_data) )
  197. err_msg = sprintf ( '%s: return value did not match input for [PUT,GET]_ATT_SHORT\n', mfilename );
  198. error ( err_msg );
  199. end
  200. fprintf ( 1, 'PUT_ATT_SHORT succeeded.\n' );
  201. fprintf ( 1, 'GET_ATT_SHORT succeeded.\n' );
  202. %
  203. % schar test
  204. status = mexnc ( 'redef', ncid );
  205. if ( status < 0 )
  206. ncerr = mexnc ( 'strerror', status );
  207. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  208. error ( err_msg );
  209. end
  210. input_data = int8(-100);
  211. status = mexnc ( 'put_att_schar', ncid, varid, 'test_schar', nc_byte, 1, input_data );
  212. if ( status < 0 )
  213. ncerr = mexnc ( 'strerror', status );
  214. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  215. error ( err_msg );
  216. end
  217. [status] = mexnc ( 'enddef', ncid );
  218. if ( status < 0 )
  219. ncerr = mexnc ( 'strerror', status );
  220. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  221. error ( err_msg );
  222. end
  223. status = mexnc ( 'sync', ncid );
  224. if ( status < 0 )
  225. ncerr = mexnc ( 'strerror', status );
  226. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  227. error ( err_msg );
  228. end
  229. [return_value, status] = mexnc ( 'get_att_schar', ncid, varid, 'test_schar' );
  230. if ( status < 0 )
  231. ncerr = mexnc ( 'strerror', status );
  232. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  233. error ( err_msg );
  234. end
  235. if ~strcmp(class(return_value),'int8')
  236. err_msg = sprintf ( '%s: return value class did not match ''int8''\n', mfilename );
  237. error ( err_msg );
  238. end
  239. if ( double(return_value) ~= double(input_data) )
  240. err_msg = sprintf ( '%s: return value did not match input for [PUT,GET]_ATT_SCHAR\n', mfilename );
  241. error ( err_msg );
  242. end
  243. fprintf ( 1, 'PUT_ATT_SCHAR succeeded.\n' );
  244. fprintf ( 1, 'GET_ATT_SCHAR succeeded.\n' );
  245. %
  246. % uchar test
  247. status = mexnc ( 'redef', ncid );
  248. if ( status < 0 )
  249. ncerr = mexnc ( 'strerror', status );
  250. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  251. error ( err_msg );
  252. end
  253. input_data = uint8(100);
  254. status = mexnc ( 'put_att_schar', ncid, varid, 'test_uchar', nc_byte, 1, input_data );
  255. if ( status < 0 )
  256. ncerr = mexnc ( 'strerror', status );
  257. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  258. error ( err_msg );
  259. end
  260. [status] = mexnc ( 'enddef', ncid );
  261. if ( status < 0 )
  262. ncerr = mexnc ( 'strerror', status );
  263. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  264. error ( err_msg );
  265. end
  266. status = mexnc ( 'sync', ncid );
  267. if ( status < 0 )
  268. ncerr = mexnc ( 'strerror', status );
  269. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  270. error ( err_msg );
  271. end
  272. [return_value, status] = mexnc ( 'get_att_uchar', ncid, varid, 'test_uchar' );
  273. if ( status < 0 )
  274. ncerr = mexnc ( 'strerror', status );
  275. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  276. error ( err_msg );
  277. end
  278. if ~strcmp(class(return_value),'uint8')
  279. err_msg = sprintf ( '%s: return value class did not match ''uint8''\n', mfilename );
  280. error ( err_msg );
  281. end
  282. if ( double(return_value) ~= double(input_data) )
  283. err_msg = sprintf ( '%s: return value did not match input for [PUT,GET]_ATT_UCHAR\n', mfilename );
  284. error ( err_msg );
  285. end
  286. fprintf ( 1, 'PUT_ATT_UCHAR succeeded.\n' );
  287. fprintf ( 1, 'GET_ATT_UCHAR succeeded.\n' );
  288. %
  289. % char test
  290. status = mexnc ( 'redef', ncid );
  291. if ( status < 0 )
  292. ncerr = mexnc ( 'strerror', status );
  293. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  294. error ( err_msg );
  295. end
  296. input_data = 'It was a dark and stormy night. Suddenly a shot rang out.';
  297. status = mexnc ( 'put_att_text', ncid, varid, 'test_char', nc_char, length(input_data), input_data );
  298. if ( status < 0 )
  299. ncerr = mexnc ( 'strerror', status );
  300. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  301. error ( err_msg );
  302. end
  303. [status] = mexnc ( 'enddef', ncid );
  304. if ( status < 0 )
  305. ncerr = mexnc ( 'strerror', status );
  306. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  307. error ( err_msg );
  308. end
  309. status = mexnc ( 'sync', ncid );
  310. if ( status < 0 )
  311. ncerr = mexnc ( 'strerror', status );
  312. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  313. error ( err_msg );
  314. end
  315. [return_value, status] = mexnc ( 'get_att_text', ncid, varid, 'test_char' );
  316. if ( status < 0 )
  317. ncerr = mexnc ( 'strerror', status );
  318. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  319. error ( err_msg );
  320. end
  321. if ~strcmp(class(return_value),'char')
  322. err_msg = sprintf ( '%s: return value class did not match ''char''\n', mfilename );
  323. error ( err_msg );
  324. end
  325. if ( ~strcmp(return_value,input_data ) )
  326. err_msg = sprintf ( '%s: return value did not match input for [PUT,GET]_ATT_TEXT\n', mfilename );
  327. error ( err_msg );
  328. end
  329. fprintf ( 1, 'PUT_ATT_TEXT succeeded.\n' );
  330. fprintf ( 1, 'GET_ATT_TEXT succeeded.\n' );
  331. status = mexnc ( 'close', ncid );
  332. if ( status < 0 )
  333. ncerr = mexnc ( 'strerror', status );
  334. err_msg = sprintf ( '%s: ''%s''\n', mfilename, ncerr );
  335. error ( err_msg );
  336. end
  337. return