PageRenderTime 126ms CodeModel.GetById 26ms RepoModel.GetById 1ms app.codeStats 2ms

/other/netcdf_write_matrix/src/nc_test/test_get.c

https://github.com/jbeezley/wrf-fire
C | 6251 lines | 5857 code | 148 blank | 246 comment | 1944 complexity | 22a84c44940594b76318a681103f5c92 MD5 | raw file
Possible License(s): AGPL-1.0

Large files files are truncated, but you can click here to view the full file

  1. /* Do not edit this file. It is produced from the corresponding .m4 source */
  2. /*********************************************************************
  3. * Copyright 1996, UCAR/Unidata
  4. * See netcdf/COPYRIGHT file for copying and redistribution conditions.
  5. * $Id: test_get.m4,v 1.16 2005/03/08 03:04:19 ed Exp $
  6. *********************************************************************/
  7. #include "tests.h"
  8. void
  9. test_nc_get_var1_text(void)
  10. {
  11. int ncid;
  12. int i;
  13. int j;
  14. int err;
  15. int nok = 0; /* count of valid comparisons */
  16. size_t index[MAX_RANK];
  17. double expect;
  18. int canConvert; /* Both text or both numeric */
  19. text value;
  20. err = nc_open(testfile, NC_NOWRITE, &ncid);
  21. IF (err)
  22. error("nc_open: %s", nc_strerror(err));
  23. for (i = 0; i < NVARS; i++) {
  24. canConvert = (var_type[i] == NC_CHAR) == (NCT_TEXT == NCT_TEXT);
  25. for (j = 0; j < var_rank[i]; j++)
  26. index[j] = 0;
  27. err = nc_get_var1_text(BAD_ID, i, index, &value);
  28. IF (err != NC_EBADID)
  29. error("bad ncid: status = %d", err);
  30. err = nc_get_var1_text(ncid, BAD_VARID, index, &value);
  31. IF (err != NC_ENOTVAR)
  32. error("bad var id: status = %d", err);
  33. for (j = 0; j < var_rank[i]; j++) {
  34. index[j] = var_shape[i][j];
  35. err = nc_get_var1_text(ncid, i, index, &value);
  36. if(!canConvert) {
  37. IF(err != NC_ECHAR)
  38. error("conversion: status = %d", err);
  39. } else IF (err != NC_EINVALCOORDS)
  40. error("bad index: status = %d", err);
  41. index[j] = 0;
  42. }
  43. for (j = 0; j < var_nels[i]; j++) {
  44. err = toMixedBase(j, var_rank[i], var_shape[i], index);
  45. IF (err)
  46. error("error in toMixedBase 1");
  47. expect = hash4( var_type[i], var_rank[i], index, NCT_TEXT );
  48. if (var_rank[i] == 0 && i%2 )
  49. err = nc_get_var1_text(ncid, i, NULL, &value);
  50. else
  51. err = nc_get_var1_text(ncid, i, index, &value);
  52. if (canConvert) {
  53. if (inRange3(expect,var_type[i], NCT_TEXT)) {
  54. if (expect >= text_min && expect <= text_max) {
  55. IF (err) {
  56. error("%s", nc_strerror(err));
  57. } else {
  58. IF (!equal(value,expect,var_type[i],NCT_TEXT)) {
  59. error("expected: %G, got: %G", expect,
  60. (double) value);
  61. } else {
  62. nok++;
  63. }
  64. }
  65. } else {
  66. IF (err != NC_ERANGE)
  67. error("Range error: status = %d", err);
  68. }
  69. } else {
  70. IF (err != 0 && err != NC_ERANGE)
  71. error("OK or Range error: status = %d", err);
  72. }
  73. } else {
  74. IF (err != NC_ECHAR)
  75. error("wrong type: status = %d", err);
  76. }
  77. }
  78. }
  79. err = nc_close(ncid);
  80. IF (err)
  81. error("nc_close: %s", nc_strerror(err));
  82. print_nok(nok);
  83. }
  84. void
  85. test_nc_get_var1_uchar(void)
  86. {
  87. int ncid;
  88. int i;
  89. int j;
  90. int err;
  91. int nok = 0; /* count of valid comparisons */
  92. size_t index[MAX_RANK];
  93. double expect;
  94. int canConvert; /* Both text or both numeric */
  95. uchar value;
  96. err = nc_open(testfile, NC_NOWRITE, &ncid);
  97. IF (err)
  98. error("nc_open: %s", nc_strerror(err));
  99. for (i = 0; i < NVARS; i++) {
  100. canConvert = (var_type[i] == NC_CHAR) == (NCT_UCHAR == NCT_TEXT);
  101. for (j = 0; j < var_rank[i]; j++)
  102. index[j] = 0;
  103. err = nc_get_var1_uchar(BAD_ID, i, index, &value);
  104. IF (err != NC_EBADID)
  105. error("bad ncid: status = %d", err);
  106. err = nc_get_var1_uchar(ncid, BAD_VARID, index, &value);
  107. IF (err != NC_ENOTVAR)
  108. error("bad var id: status = %d", err);
  109. for (j = 0; j < var_rank[i]; j++) {
  110. index[j] = var_shape[i][j];
  111. err = nc_get_var1_uchar(ncid, i, index, &value);
  112. if(!canConvert) {
  113. IF(err != NC_ECHAR)
  114. error("conversion: status = %d", err);
  115. } else IF (err != NC_EINVALCOORDS)
  116. error("bad index: status = %d", err);
  117. index[j] = 0;
  118. }
  119. for (j = 0; j < var_nels[i]; j++) {
  120. err = toMixedBase(j, var_rank[i], var_shape[i], index);
  121. IF (err)
  122. error("error in toMixedBase 1");
  123. expect = hash4( var_type[i], var_rank[i], index, NCT_UCHAR );
  124. if (var_rank[i] == 0 && i%2 )
  125. err = nc_get_var1_uchar(ncid, i, NULL, &value);
  126. else
  127. err = nc_get_var1_uchar(ncid, i, index, &value);
  128. if (canConvert) {
  129. if (inRange3(expect,var_type[i], NCT_UCHAR)) {
  130. if (expect >= uchar_min && expect <= uchar_max) {
  131. IF (err) {
  132. error("%s", nc_strerror(err));
  133. } else {
  134. IF (!equal(value,expect,var_type[i],NCT_UCHAR)) {
  135. error("expected: %G, got: %G", expect,
  136. (double) value);
  137. } else {
  138. nok++;
  139. }
  140. }
  141. } else {
  142. IF (err != NC_ERANGE)
  143. error("Range error: status = %d", err);
  144. }
  145. } else {
  146. IF (err != 0 && err != NC_ERANGE)
  147. error("OK or Range error: status = %d", err);
  148. }
  149. } else {
  150. IF (err != NC_ECHAR)
  151. error("wrong type: status = %d", err);
  152. }
  153. }
  154. }
  155. err = nc_close(ncid);
  156. IF (err)
  157. error("nc_close: %s", nc_strerror(err));
  158. print_nok(nok);
  159. }
  160. void
  161. test_nc_get_var1_schar(void)
  162. {
  163. int ncid;
  164. int i;
  165. int j;
  166. int err;
  167. int nok = 0; /* count of valid comparisons */
  168. size_t index[MAX_RANK];
  169. double expect;
  170. int canConvert; /* Both text or both numeric */
  171. schar value;
  172. err = nc_open(testfile, NC_NOWRITE, &ncid);
  173. IF (err)
  174. error("nc_open: %s", nc_strerror(err));
  175. for (i = 0; i < NVARS; i++) {
  176. canConvert = (var_type[i] == NC_CHAR) == (NCT_SCHAR == NCT_TEXT);
  177. for (j = 0; j < var_rank[i]; j++)
  178. index[j] = 0;
  179. err = nc_get_var1_schar(BAD_ID, i, index, &value);
  180. IF (err != NC_EBADID)
  181. error("bad ncid: status = %d", err);
  182. err = nc_get_var1_schar(ncid, BAD_VARID, index, &value);
  183. IF (err != NC_ENOTVAR)
  184. error("bad var id: status = %d", err);
  185. for (j = 0; j < var_rank[i]; j++) {
  186. index[j] = var_shape[i][j];
  187. err = nc_get_var1_schar(ncid, i, index, &value);
  188. if(!canConvert) {
  189. IF(err != NC_ECHAR)
  190. error("conversion: status = %d", err);
  191. } else IF (err != NC_EINVALCOORDS)
  192. error("bad index: status = %d", err);
  193. index[j] = 0;
  194. }
  195. for (j = 0; j < var_nels[i]; j++) {
  196. err = toMixedBase(j, var_rank[i], var_shape[i], index);
  197. IF (err)
  198. error("error in toMixedBase 1");
  199. expect = hash4( var_type[i], var_rank[i], index, NCT_SCHAR );
  200. if (var_rank[i] == 0 && i%2 )
  201. err = nc_get_var1_schar(ncid, i, NULL, &value);
  202. else
  203. err = nc_get_var1_schar(ncid, i, index, &value);
  204. if (canConvert) {
  205. if (inRange3(expect,var_type[i], NCT_SCHAR)) {
  206. if (expect >= schar_min && expect <= schar_max) {
  207. IF (err) {
  208. error("%s", nc_strerror(err));
  209. } else {
  210. IF (!equal(value,expect,var_type[i],NCT_SCHAR)) {
  211. error("expected: %G, got: %G", expect,
  212. (double) value);
  213. } else {
  214. nok++;
  215. }
  216. }
  217. } else {
  218. IF (err != NC_ERANGE)
  219. error("Range error: status = %d", err);
  220. }
  221. } else {
  222. IF (err != 0 && err != NC_ERANGE)
  223. error("OK or Range error: status = %d", err);
  224. }
  225. } else {
  226. IF (err != NC_ECHAR)
  227. error("wrong type: status = %d", err);
  228. }
  229. }
  230. }
  231. err = nc_close(ncid);
  232. IF (err)
  233. error("nc_close: %s", nc_strerror(err));
  234. print_nok(nok);
  235. }
  236. void
  237. test_nc_get_var1_short(void)
  238. {
  239. int ncid;
  240. int i;
  241. int j;
  242. int err;
  243. int nok = 0; /* count of valid comparisons */
  244. size_t index[MAX_RANK];
  245. double expect;
  246. int canConvert; /* Both text or both numeric */
  247. short value;
  248. err = nc_open(testfile, NC_NOWRITE, &ncid);
  249. IF (err)
  250. error("nc_open: %s", nc_strerror(err));
  251. for (i = 0; i < NVARS; i++) {
  252. canConvert = (var_type[i] == NC_CHAR) == (NCT_SHORT == NCT_TEXT);
  253. for (j = 0; j < var_rank[i]; j++)
  254. index[j] = 0;
  255. err = nc_get_var1_short(BAD_ID, i, index, &value);
  256. IF (err != NC_EBADID)
  257. error("bad ncid: status = %d", err);
  258. err = nc_get_var1_short(ncid, BAD_VARID, index, &value);
  259. IF (err != NC_ENOTVAR)
  260. error("bad var id: status = %d", err);
  261. for (j = 0; j < var_rank[i]; j++) {
  262. index[j] = var_shape[i][j];
  263. err = nc_get_var1_short(ncid, i, index, &value);
  264. if(!canConvert) {
  265. IF(err != NC_ECHAR)
  266. error("conversion: status = %d", err);
  267. } else IF (err != NC_EINVALCOORDS)
  268. error("bad index: status = %d", err);
  269. index[j] = 0;
  270. }
  271. for (j = 0; j < var_nels[i]; j++) {
  272. err = toMixedBase(j, var_rank[i], var_shape[i], index);
  273. IF (err)
  274. error("error in toMixedBase 1");
  275. expect = hash4( var_type[i], var_rank[i], index, NCT_SHORT );
  276. if (var_rank[i] == 0 && i%2 )
  277. err = nc_get_var1_short(ncid, i, NULL, &value);
  278. else
  279. err = nc_get_var1_short(ncid, i, index, &value);
  280. if (canConvert) {
  281. if (inRange3(expect,var_type[i], NCT_SHORT)) {
  282. if (expect >= short_min && expect <= short_max) {
  283. IF (err) {
  284. error("%s", nc_strerror(err));
  285. } else {
  286. IF (!equal(value,expect,var_type[i],NCT_SHORT)) {
  287. error("expected: %G, got: %G", expect,
  288. (double) value);
  289. } else {
  290. nok++;
  291. }
  292. }
  293. } else {
  294. IF (err != NC_ERANGE)
  295. error("Range error: status = %d", err);
  296. }
  297. } else {
  298. IF (err != 0 && err != NC_ERANGE)
  299. error("OK or Range error: status = %d", err);
  300. }
  301. } else {
  302. IF (err != NC_ECHAR)
  303. error("wrong type: status = %d", err);
  304. }
  305. }
  306. }
  307. err = nc_close(ncid);
  308. IF (err)
  309. error("nc_close: %s", nc_strerror(err));
  310. print_nok(nok);
  311. }
  312. void
  313. test_nc_get_var1_int(void)
  314. {
  315. int ncid;
  316. int i;
  317. int j;
  318. int err;
  319. int nok = 0; /* count of valid comparisons */
  320. size_t index[MAX_RANK];
  321. double expect;
  322. int canConvert; /* Both text or both numeric */
  323. int value;
  324. err = nc_open(testfile, NC_NOWRITE, &ncid);
  325. IF (err)
  326. error("nc_open: %s", nc_strerror(err));
  327. for (i = 0; i < NVARS; i++) {
  328. canConvert = (var_type[i] == NC_CHAR) == (NCT_INT == NCT_TEXT);
  329. for (j = 0; j < var_rank[i]; j++)
  330. index[j] = 0;
  331. err = nc_get_var1_int(BAD_ID, i, index, &value);
  332. IF (err != NC_EBADID)
  333. error("bad ncid: status = %d", err);
  334. err = nc_get_var1_int(ncid, BAD_VARID, index, &value);
  335. IF (err != NC_ENOTVAR)
  336. error("bad var id: status = %d", err);
  337. for (j = 0; j < var_rank[i]; j++) {
  338. index[j] = var_shape[i][j];
  339. err = nc_get_var1_int(ncid, i, index, &value);
  340. if(!canConvert) {
  341. IF(err != NC_ECHAR)
  342. error("conversion: status = %d", err);
  343. } else IF (err != NC_EINVALCOORDS)
  344. error("bad index: status = %d", err);
  345. index[j] = 0;
  346. }
  347. for (j = 0; j < var_nels[i]; j++) {
  348. err = toMixedBase(j, var_rank[i], var_shape[i], index);
  349. IF (err)
  350. error("error in toMixedBase 1");
  351. expect = hash4( var_type[i], var_rank[i], index, NCT_INT );
  352. if (var_rank[i] == 0 && i%2 )
  353. err = nc_get_var1_int(ncid, i, NULL, &value);
  354. else
  355. err = nc_get_var1_int(ncid, i, index, &value);
  356. if (canConvert) {
  357. if (inRange3(expect,var_type[i], NCT_INT)) {
  358. if (expect >= int_min && expect <= int_max) {
  359. IF (err) {
  360. error("%s", nc_strerror(err));
  361. } else {
  362. IF (!equal(value,expect,var_type[i],NCT_INT)) {
  363. error("expected: %G, got: %G", expect,
  364. (double) value);
  365. } else {
  366. nok++;
  367. }
  368. }
  369. } else {
  370. IF (err != NC_ERANGE)
  371. error("Range error: status = %d", err);
  372. }
  373. } else {
  374. IF (err != 0 && err != NC_ERANGE)
  375. error("OK or Range error: status = %d", err);
  376. }
  377. } else {
  378. IF (err != NC_ECHAR)
  379. error("wrong type: status = %d", err);
  380. }
  381. }
  382. }
  383. err = nc_close(ncid);
  384. IF (err)
  385. error("nc_close: %s", nc_strerror(err));
  386. print_nok(nok);
  387. }
  388. void
  389. test_nc_get_var1_long(void)
  390. {
  391. int ncid;
  392. int i;
  393. int j;
  394. int err;
  395. int nok = 0; /* count of valid comparisons */
  396. size_t index[MAX_RANK];
  397. double expect;
  398. int canConvert; /* Both text or both numeric */
  399. long value;
  400. err = nc_open(testfile, NC_NOWRITE, &ncid);
  401. IF (err)
  402. error("nc_open: %s", nc_strerror(err));
  403. for (i = 0; i < NVARS; i++) {
  404. canConvert = (var_type[i] == NC_CHAR) == (NCT_LONG == NCT_TEXT);
  405. for (j = 0; j < var_rank[i]; j++)
  406. index[j] = 0;
  407. err = nc_get_var1_long(BAD_ID, i, index, &value);
  408. IF (err != NC_EBADID)
  409. error("bad ncid: status = %d", err);
  410. err = nc_get_var1_long(ncid, BAD_VARID, index, &value);
  411. IF (err != NC_ENOTVAR)
  412. error("bad var id: status = %d", err);
  413. for (j = 0; j < var_rank[i]; j++) {
  414. index[j] = var_shape[i][j];
  415. err = nc_get_var1_long(ncid, i, index, &value);
  416. if(!canConvert) {
  417. IF(err != NC_ECHAR)
  418. error("conversion: status = %d", err);
  419. } else IF (err != NC_EINVALCOORDS)
  420. error("bad index: status = %d", err);
  421. index[j] = 0;
  422. }
  423. for (j = 0; j < var_nels[i]; j++) {
  424. err = toMixedBase(j, var_rank[i], var_shape[i], index);
  425. IF (err)
  426. error("error in toMixedBase 1");
  427. expect = hash4( var_type[i], var_rank[i], index, NCT_LONG );
  428. if (var_rank[i] == 0 && i%2 )
  429. err = nc_get_var1_long(ncid, i, NULL, &value);
  430. else
  431. err = nc_get_var1_long(ncid, i, index, &value);
  432. if (canConvert) {
  433. if (inRange3(expect,var_type[i], NCT_LONG)) {
  434. if (expect >= long_min && expect <= long_max) {
  435. IF (err) {
  436. error("%s", nc_strerror(err));
  437. } else {
  438. IF (!equal(value,expect,var_type[i],NCT_LONG)) {
  439. error("expected: %G, got: %G", expect,
  440. (double) value);
  441. } else {
  442. nok++;
  443. }
  444. }
  445. } else {
  446. IF (err != NC_ERANGE)
  447. error("Range error: status = %d", err);
  448. }
  449. } else {
  450. IF (err != 0 && err != NC_ERANGE)
  451. error("OK or Range error: status = %d", err);
  452. }
  453. } else {
  454. IF (err != NC_ECHAR)
  455. error("wrong type: status = %d", err);
  456. }
  457. }
  458. }
  459. err = nc_close(ncid);
  460. IF (err)
  461. error("nc_close: %s", nc_strerror(err));
  462. print_nok(nok);
  463. }
  464. void
  465. test_nc_get_var1_float(void)
  466. {
  467. int ncid;
  468. int i;
  469. int j;
  470. int err;
  471. int nok = 0; /* count of valid comparisons */
  472. size_t index[MAX_RANK];
  473. double expect;
  474. int canConvert; /* Both text or both numeric */
  475. float value;
  476. err = nc_open(testfile, NC_NOWRITE, &ncid);
  477. IF (err)
  478. error("nc_open: %s", nc_strerror(err));
  479. for (i = 0; i < NVARS; i++) {
  480. canConvert = (var_type[i] == NC_CHAR) == (NCT_FLOAT == NCT_TEXT);
  481. for (j = 0; j < var_rank[i]; j++)
  482. index[j] = 0;
  483. err = nc_get_var1_float(BAD_ID, i, index, &value);
  484. IF (err != NC_EBADID)
  485. error("bad ncid: status = %d", err);
  486. err = nc_get_var1_float(ncid, BAD_VARID, index, &value);
  487. IF (err != NC_ENOTVAR)
  488. error("bad var id: status = %d", err);
  489. for (j = 0; j < var_rank[i]; j++) {
  490. index[j] = var_shape[i][j];
  491. err = nc_get_var1_float(ncid, i, index, &value);
  492. if(!canConvert) {
  493. IF(err != NC_ECHAR)
  494. error("conversion: status = %d", err);
  495. } else IF (err != NC_EINVALCOORDS)
  496. error("bad index: status = %d", err);
  497. index[j] = 0;
  498. }
  499. for (j = 0; j < var_nels[i]; j++) {
  500. err = toMixedBase(j, var_rank[i], var_shape[i], index);
  501. IF (err)
  502. error("error in toMixedBase 1");
  503. expect = hash4( var_type[i], var_rank[i], index, NCT_FLOAT );
  504. if (var_rank[i] == 0 && i%2 )
  505. err = nc_get_var1_float(ncid, i, NULL, &value);
  506. else
  507. err = nc_get_var1_float(ncid, i, index, &value);
  508. if (canConvert) {
  509. if (inRange3(expect,var_type[i], NCT_FLOAT)) {
  510. if (expect >= float_min && expect <= float_max) {
  511. IF (err) {
  512. error("%s", nc_strerror(err));
  513. } else {
  514. IF (!equal(value,expect,var_type[i],NCT_FLOAT)) {
  515. error("expected: %G, got: %G", expect,
  516. (double) value);
  517. } else {
  518. nok++;
  519. }
  520. }
  521. } else {
  522. IF (err != NC_ERANGE)
  523. error("Range error: status = %d", err);
  524. }
  525. } else {
  526. IF (err != 0 && err != NC_ERANGE)
  527. error("OK or Range error: status = %d", err);
  528. }
  529. } else {
  530. IF (err != NC_ECHAR)
  531. error("wrong type: status = %d", err);
  532. }
  533. }
  534. }
  535. err = nc_close(ncid);
  536. IF (err)
  537. error("nc_close: %s", nc_strerror(err));
  538. print_nok(nok);
  539. }
  540. void
  541. test_nc_get_var1_double(void)
  542. {
  543. int ncid;
  544. int i;
  545. int j;
  546. int err;
  547. int nok = 0; /* count of valid comparisons */
  548. size_t index[MAX_RANK];
  549. double expect;
  550. int canConvert; /* Both text or both numeric */
  551. double value;
  552. err = nc_open(testfile, NC_NOWRITE, &ncid);
  553. IF (err)
  554. error("nc_open: %s", nc_strerror(err));
  555. for (i = 0; i < NVARS; i++) {
  556. canConvert = (var_type[i] == NC_CHAR) == (NCT_DOUBLE == NCT_TEXT);
  557. for (j = 0; j < var_rank[i]; j++)
  558. index[j] = 0;
  559. err = nc_get_var1_double(BAD_ID, i, index, &value);
  560. IF (err != NC_EBADID)
  561. error("bad ncid: status = %d", err);
  562. err = nc_get_var1_double(ncid, BAD_VARID, index, &value);
  563. IF (err != NC_ENOTVAR)
  564. error("bad var id: status = %d", err);
  565. for (j = 0; j < var_rank[i]; j++) {
  566. index[j] = var_shape[i][j];
  567. err = nc_get_var1_double(ncid, i, index, &value);
  568. if(!canConvert) {
  569. IF(err != NC_ECHAR)
  570. error("conversion: status = %d", err);
  571. } else IF (err != NC_EINVALCOORDS)
  572. error("bad index: status = %d", err);
  573. index[j] = 0;
  574. }
  575. for (j = 0; j < var_nels[i]; j++) {
  576. err = toMixedBase(j, var_rank[i], var_shape[i], index);
  577. IF (err)
  578. error("error in toMixedBase 1");
  579. expect = hash4( var_type[i], var_rank[i], index, NCT_DOUBLE );
  580. if (var_rank[i] == 0 && i%2 )
  581. err = nc_get_var1_double(ncid, i, NULL, &value);
  582. else
  583. err = nc_get_var1_double(ncid, i, index, &value);
  584. if (canConvert) {
  585. if (inRange3(expect,var_type[i], NCT_DOUBLE)) {
  586. if (expect >= double_min && expect <= double_max) {
  587. IF (err) {
  588. error("%s", nc_strerror(err));
  589. } else {
  590. IF (!equal(value,expect,var_type[i],NCT_DOUBLE)) {
  591. error("expected: %G, got: %G", expect,
  592. (double) value);
  593. } else {
  594. nok++;
  595. }
  596. }
  597. } else {
  598. IF (err != NC_ERANGE)
  599. error("Range error: status = %d", err);
  600. }
  601. } else {
  602. IF (err != 0 && err != NC_ERANGE)
  603. error("OK or Range error: status = %d", err);
  604. }
  605. } else {
  606. IF (err != NC_ECHAR)
  607. error("wrong type: status = %d", err);
  608. }
  609. }
  610. }
  611. err = nc_close(ncid);
  612. IF (err)
  613. error("nc_close: %s", nc_strerror(err));
  614. print_nok(nok);
  615. }
  616. void
  617. test_nc_get_var_text(void)
  618. {
  619. int ncid;
  620. int i;
  621. int j;
  622. int err;
  623. int allInExtRange; /* all values within external range? */
  624. int allInIntRange; /* all values within internal range? */
  625. int nels;
  626. int nok = 0; /* count of valid comparisons */
  627. size_t index[MAX_RANK];
  628. int canConvert; /* Both text or both numeric */
  629. text value[MAX_NELS];
  630. double expect[MAX_NELS];
  631. err = nc_open(testfile, NC_NOWRITE, &ncid);
  632. IF (err)
  633. error("nc_open: %s", nc_strerror(err));
  634. for (i = 0; i < NVARS; i++) {
  635. canConvert = (var_type[i] == NC_CHAR) == (NCT_TEXT == NCT_TEXT);
  636. assert(var_rank[i] <= MAX_RANK);
  637. assert(var_nels[i] <= MAX_NELS);
  638. err = nc_get_var_text(BAD_ID, i, value);
  639. IF (err != NC_EBADID)
  640. error("bad ncid: status = %d", err);
  641. err = nc_get_var_text(ncid, BAD_VARID, value);
  642. IF (err != NC_ENOTVAR)
  643. error("bad var id: status = %d", err);
  644. nels = 1;
  645. for (j = 0; j < var_rank[i]; j++) {
  646. nels *= var_shape[i][j];
  647. }
  648. allInExtRange = allInIntRange = 1;
  649. for (j = 0; j < nels; j++) {
  650. err = toMixedBase(j, var_rank[i], var_shape[i], index);
  651. IF (err)
  652. error("error in toMixedBase 1");
  653. expect[j] = hash4(var_type[i], var_rank[i], index, NCT_TEXT);
  654. if (inRange3(expect[j],var_type[i], NCT_TEXT)) {
  655. allInIntRange = allInIntRange && expect[j] >= text_min
  656. && expect[j] <= text_max;
  657. } else {
  658. allInExtRange = 0;
  659. }
  660. }
  661. err = nc_get_var_text(ncid, i, value);
  662. if (canConvert) {
  663. if (allInExtRange) {
  664. if (allInIntRange) {
  665. IF (err)
  666. error("%s", nc_strerror(err));
  667. } else {
  668. IF (err != NC_ERANGE)
  669. error("Range error: status = %d", err);
  670. }
  671. } else {
  672. IF (err != 0 && err != NC_ERANGE)
  673. error("OK or Range error: status = %d", err);
  674. }
  675. for (j = 0; j < nels; j++) {
  676. if (inRange3(expect[j],var_type[i],NCT_TEXT)
  677. && expect[j] >= text_min && expect[j] <= text_max) {
  678. IF (!equal(value[j],expect[j],var_type[i],NCT_TEXT)){
  679. error("value read not that expected");
  680. if (verbose) {
  681. error("\n");
  682. error("varid: %d, ", i);
  683. error("var_name: %s, ", var_name[i]);
  684. error("element number: %d ", j);
  685. error("expect: %g", expect[j]);
  686. error("got: %g", (double) value[j]);
  687. }
  688. } else {
  689. nok++;
  690. }
  691. }
  692. }
  693. } else {
  694. IF (nels > 0 && err != NC_ECHAR)
  695. error("wrong type: status = %d", err);
  696. }
  697. }
  698. err = nc_close(ncid);
  699. IF (err)
  700. error("nc_close: %s", nc_strerror(err));
  701. print_nok(nok);
  702. }
  703. void
  704. test_nc_get_var_uchar(void)
  705. {
  706. int ncid;
  707. int i;
  708. int j;
  709. int err;
  710. int allInExtRange; /* all values within external range? */
  711. int allInIntRange; /* all values within internal range? */
  712. int nels;
  713. int nok = 0; /* count of valid comparisons */
  714. size_t index[MAX_RANK];
  715. int canConvert; /* Both text or both numeric */
  716. uchar value[MAX_NELS];
  717. double expect[MAX_NELS];
  718. err = nc_open(testfile, NC_NOWRITE, &ncid);
  719. IF (err)
  720. error("nc_open: %s", nc_strerror(err));
  721. for (i = 0; i < NVARS; i++) {
  722. canConvert = (var_type[i] == NC_CHAR) == (NCT_UCHAR == NCT_TEXT);
  723. assert(var_rank[i] <= MAX_RANK);
  724. assert(var_nels[i] <= MAX_NELS);
  725. err = nc_get_var_uchar(BAD_ID, i, value);
  726. IF (err != NC_EBADID)
  727. error("bad ncid: status = %d", err);
  728. err = nc_get_var_uchar(ncid, BAD_VARID, value);
  729. IF (err != NC_ENOTVAR)
  730. error("bad var id: status = %d", err);
  731. nels = 1;
  732. for (j = 0; j < var_rank[i]; j++) {
  733. nels *= var_shape[i][j];
  734. }
  735. allInExtRange = allInIntRange = 1;
  736. for (j = 0; j < nels; j++) {
  737. err = toMixedBase(j, var_rank[i], var_shape[i], index);
  738. IF (err)
  739. error("error in toMixedBase 1");
  740. expect[j] = hash4(var_type[i], var_rank[i], index, NCT_UCHAR);
  741. if (inRange3(expect[j],var_type[i], NCT_UCHAR)) {
  742. allInIntRange = allInIntRange && expect[j] >= uchar_min
  743. && expect[j] <= uchar_max;
  744. } else {
  745. allInExtRange = 0;
  746. }
  747. }
  748. err = nc_get_var_uchar(ncid, i, value);
  749. if (canConvert) {
  750. if (allInExtRange) {
  751. if (allInIntRange) {
  752. IF (err)
  753. error("%s", nc_strerror(err));
  754. } else {
  755. IF (err != NC_ERANGE)
  756. error("Range error: status = %d", err);
  757. }
  758. } else {
  759. IF (err != 0 && err != NC_ERANGE)
  760. error("OK or Range error: status = %d", err);
  761. }
  762. for (j = 0; j < nels; j++) {
  763. if (inRange3(expect[j],var_type[i],NCT_UCHAR)
  764. && expect[j] >= uchar_min && expect[j] <= uchar_max) {
  765. IF (!equal(value[j],expect[j],var_type[i],NCT_UCHAR)){
  766. error("value read not that expected");
  767. if (verbose) {
  768. error("\n");
  769. error("varid: %d, ", i);
  770. error("var_name: %s, ", var_name[i]);
  771. error("element number: %d ", j);
  772. error("expect: %g", expect[j]);
  773. error("got: %g", (double) value[j]);
  774. }
  775. } else {
  776. nok++;
  777. }
  778. }
  779. }
  780. } else {
  781. IF (nels > 0 && err != NC_ECHAR)
  782. error("wrong type: status = %d", err);
  783. }
  784. }
  785. err = nc_close(ncid);
  786. IF (err)
  787. error("nc_close: %s", nc_strerror(err));
  788. print_nok(nok);
  789. }
  790. void
  791. test_nc_get_var_schar(void)
  792. {
  793. int ncid;
  794. int i;
  795. int j;
  796. int err;
  797. int allInExtRange; /* all values within external range? */
  798. int allInIntRange; /* all values within internal range? */
  799. int nels;
  800. int nok = 0; /* count of valid comparisons */
  801. size_t index[MAX_RANK];
  802. int canConvert; /* Both text or both numeric */
  803. schar value[MAX_NELS];
  804. double expect[MAX_NELS];
  805. err = nc_open(testfile, NC_NOWRITE, &ncid);
  806. IF (err)
  807. error("nc_open: %s", nc_strerror(err));
  808. for (i = 0; i < NVARS; i++) {
  809. canConvert = (var_type[i] == NC_CHAR) == (NCT_SCHAR == NCT_TEXT);
  810. assert(var_rank[i] <= MAX_RANK);
  811. assert(var_nels[i] <= MAX_NELS);
  812. err = nc_get_var_schar(BAD_ID, i, value);
  813. IF (err != NC_EBADID)
  814. error("bad ncid: status = %d", err);
  815. err = nc_get_var_schar(ncid, BAD_VARID, value);
  816. IF (err != NC_ENOTVAR)
  817. error("bad var id: status = %d", err);
  818. nels = 1;
  819. for (j = 0; j < var_rank[i]; j++) {
  820. nels *= var_shape[i][j];
  821. }
  822. allInExtRange = allInIntRange = 1;
  823. for (j = 0; j < nels; j++) {
  824. err = toMixedBase(j, var_rank[i], var_shape[i], index);
  825. IF (err)
  826. error("error in toMixedBase 1");
  827. expect[j] = hash4(var_type[i], var_rank[i], index, NCT_SCHAR);
  828. if (inRange3(expect[j],var_type[i], NCT_SCHAR)) {
  829. allInIntRange = allInIntRange && expect[j] >= schar_min
  830. && expect[j] <= schar_max;
  831. } else {
  832. allInExtRange = 0;
  833. }
  834. }
  835. err = nc_get_var_schar(ncid, i, value);
  836. if (canConvert) {
  837. if (allInExtRange) {
  838. if (allInIntRange) {
  839. IF (err)
  840. error("%s", nc_strerror(err));
  841. } else {
  842. IF (err != NC_ERANGE)
  843. error("Range error: status = %d", err);
  844. }
  845. } else {
  846. IF (err != 0 && err != NC_ERANGE)
  847. error("OK or Range error: status = %d", err);
  848. }
  849. for (j = 0; j < nels; j++) {
  850. if (inRange3(expect[j],var_type[i],NCT_SCHAR)
  851. && expect[j] >= schar_min && expect[j] <= schar_max) {
  852. IF (!equal(value[j],expect[j],var_type[i],NCT_SCHAR)){
  853. error("value read not that expected");
  854. if (verbose) {
  855. error("\n");
  856. error("varid: %d, ", i);
  857. error("var_name: %s, ", var_name[i]);
  858. error("element number: %d ", j);
  859. error("expect: %g", expect[j]);
  860. error("got: %g", (double) value[j]);
  861. }
  862. } else {
  863. nok++;
  864. }
  865. }
  866. }
  867. } else {
  868. IF (nels > 0 && err != NC_ECHAR)
  869. error("wrong type: status = %d", err);
  870. }
  871. }
  872. err = nc_close(ncid);
  873. IF (err)
  874. error("nc_close: %s", nc_strerror(err));
  875. print_nok(nok);
  876. }
  877. void
  878. test_nc_get_var_short(void)
  879. {
  880. int ncid;
  881. int i;
  882. int j;
  883. int err;
  884. int allInExtRange; /* all values within external range? */
  885. int allInIntRange; /* all values within internal range? */
  886. int nels;
  887. int nok = 0; /* count of valid comparisons */
  888. size_t index[MAX_RANK];
  889. int canConvert; /* Both text or both numeric */
  890. short value[MAX_NELS];
  891. double expect[MAX_NELS];
  892. err = nc_open(testfile, NC_NOWRITE, &ncid);
  893. IF (err)
  894. error("nc_open: %s", nc_strerror(err));
  895. for (i = 0; i < NVARS; i++) {
  896. canConvert = (var_type[i] == NC_CHAR) == (NCT_SHORT == NCT_TEXT);
  897. assert(var_rank[i] <= MAX_RANK);
  898. assert(var_nels[i] <= MAX_NELS);
  899. err = nc_get_var_short(BAD_ID, i, value);
  900. IF (err != NC_EBADID)
  901. error("bad ncid: status = %d", err);
  902. err = nc_get_var_short(ncid, BAD_VARID, value);
  903. IF (err != NC_ENOTVAR)
  904. error("bad var id: status = %d", err);
  905. nels = 1;
  906. for (j = 0; j < var_rank[i]; j++) {
  907. nels *= var_shape[i][j];
  908. }
  909. allInExtRange = allInIntRange = 1;
  910. for (j = 0; j < nels; j++) {
  911. err = toMixedBase(j, var_rank[i], var_shape[i], index);
  912. IF (err)
  913. error("error in toMixedBase 1");
  914. expect[j] = hash4(var_type[i], var_rank[i], index, NCT_SHORT);
  915. if (inRange3(expect[j],var_type[i], NCT_SHORT)) {
  916. allInIntRange = allInIntRange && expect[j] >= short_min
  917. && expect[j] <= short_max;
  918. } else {
  919. allInExtRange = 0;
  920. }
  921. }
  922. err = nc_get_var_short(ncid, i, value);
  923. if (canConvert) {
  924. if (allInExtRange) {
  925. if (allInIntRange) {
  926. IF (err)
  927. error("%s", nc_strerror(err));
  928. } else {
  929. IF (err != NC_ERANGE)
  930. error("Range error: status = %d", err);
  931. }
  932. } else {
  933. IF (err != 0 && err != NC_ERANGE)
  934. error("OK or Range error: status = %d", err);
  935. }
  936. for (j = 0; j < nels; j++) {
  937. if (inRange3(expect[j],var_type[i],NCT_SHORT)
  938. && expect[j] >= short_min && expect[j] <= short_max) {
  939. IF (!equal(value[j],expect[j],var_type[i],NCT_SHORT)){
  940. error("value read not that expected");
  941. if (verbose) {
  942. error("\n");
  943. error("varid: %d, ", i);
  944. error("var_name: %s, ", var_name[i]);
  945. error("element number: %d ", j);
  946. error("expect: %g", expect[j]);
  947. error("got: %g", (double) value[j]);
  948. }
  949. } else {
  950. nok++;
  951. }
  952. }
  953. }
  954. } else {
  955. IF (nels > 0 && err != NC_ECHAR)
  956. error("wrong type: status = %d", err);
  957. }
  958. }
  959. err = nc_close(ncid);
  960. IF (err)
  961. error("nc_close: %s", nc_strerror(err));
  962. print_nok(nok);
  963. }
  964. void
  965. test_nc_get_var_int(void)
  966. {
  967. int ncid;
  968. int i;
  969. int j;
  970. int err;
  971. int allInExtRange; /* all values within external range? */
  972. int allInIntRange; /* all values within internal range? */
  973. int nels;
  974. int nok = 0; /* count of valid comparisons */
  975. size_t index[MAX_RANK];
  976. int canConvert; /* Both text or both numeric */
  977. int value[MAX_NELS];
  978. double expect[MAX_NELS];
  979. err = nc_open(testfile, NC_NOWRITE, &ncid);
  980. IF (err)
  981. error("nc_open: %s", nc_strerror(err));
  982. for (i = 0; i < NVARS; i++) {
  983. canConvert = (var_type[i] == NC_CHAR) == (NCT_INT == NCT_TEXT);
  984. assert(var_rank[i] <= MAX_RANK);
  985. assert(var_nels[i] <= MAX_NELS);
  986. err = nc_get_var_int(BAD_ID, i, value);
  987. IF (err != NC_EBADID)
  988. error("bad ncid: status = %d", err);
  989. err = nc_get_var_int(ncid, BAD_VARID, value);
  990. IF (err != NC_ENOTVAR)
  991. error("bad var id: status = %d", err);
  992. nels = 1;
  993. for (j = 0; j < var_rank[i]; j++) {
  994. nels *= var_shape[i][j];
  995. }
  996. allInExtRange = allInIntRange = 1;
  997. for (j = 0; j < nels; j++) {
  998. err = toMixedBase(j, var_rank[i], var_shape[i], index);
  999. IF (err)
  1000. error("error in toMixedBase 1");
  1001. expect[j] = hash4(var_type[i], var_rank[i], index, NCT_INT);
  1002. if (inRange3(expect[j],var_type[i], NCT_INT)) {
  1003. allInIntRange = allInIntRange && expect[j] >= int_min
  1004. && expect[j] <= int_max;
  1005. } else {
  1006. allInExtRange = 0;
  1007. }
  1008. }
  1009. err = nc_get_var_int(ncid, i, value);
  1010. if (canConvert) {
  1011. if (allInExtRange) {
  1012. if (allInIntRange) {
  1013. IF (err)
  1014. error("%s", nc_strerror(err));
  1015. } else {
  1016. IF (err != NC_ERANGE)
  1017. error("Range error: status = %d", err);
  1018. }
  1019. } else {
  1020. IF (err != 0 && err != NC_ERANGE)
  1021. error("OK or Range error: status = %d", err);
  1022. }
  1023. for (j = 0; j < nels; j++) {
  1024. if (inRange3(expect[j],var_type[i],NCT_INT)
  1025. && expect[j] >= int_min && expect[j] <= int_max) {
  1026. IF (!equal(value[j],expect[j],var_type[i],NCT_INT)){
  1027. error("value read not that expected");
  1028. if (verbose) {
  1029. error("\n");
  1030. error("varid: %d, ", i);
  1031. error("var_name: %s, ", var_name[i]);
  1032. error("element number: %d ", j);
  1033. error("expect: %g", expect[j]);
  1034. error("got: %g", (double) value[j]);
  1035. }
  1036. } else {
  1037. nok++;
  1038. }
  1039. }
  1040. }
  1041. } else {
  1042. IF (nels > 0 && err != NC_ECHAR)
  1043. error("wrong type: status = %d", err);
  1044. }
  1045. }
  1046. err = nc_close(ncid);
  1047. IF (err)
  1048. error("nc_close: %s", nc_strerror(err));
  1049. print_nok(nok);
  1050. }
  1051. void
  1052. test_nc_get_var_long(void)
  1053. {
  1054. int ncid;
  1055. int i;
  1056. int j;
  1057. int err;
  1058. int allInExtRange; /* all values within external range? */
  1059. int allInIntRange; /* all values within internal range? */
  1060. int nels;
  1061. int nok = 0; /* count of valid comparisons */
  1062. size_t index[MAX_RANK];
  1063. int canConvert; /* Both text or both numeric */
  1064. long value[MAX_NELS];
  1065. double expect[MAX_NELS];
  1066. err = nc_open(testfile, NC_NOWRITE, &ncid);
  1067. IF (err)
  1068. error("nc_open: %s", nc_strerror(err));
  1069. for (i = 0; i < NVARS; i++) {
  1070. canConvert = (var_type[i] == NC_CHAR) == (NCT_LONG == NCT_TEXT);
  1071. assert(var_rank[i] <= MAX_RANK);
  1072. assert(var_nels[i] <= MAX_NELS);
  1073. err = nc_get_var_long(BAD_ID, i, value);
  1074. IF (err != NC_EBADID)
  1075. error("bad ncid: status = %d", err);
  1076. err = nc_get_var_long(ncid, BAD_VARID, value);
  1077. IF (err != NC_ENOTVAR)
  1078. error("bad var id: status = %d", err);
  1079. nels = 1;
  1080. for (j = 0; j < var_rank[i]; j++) {
  1081. nels *= var_shape[i][j];
  1082. }
  1083. allInExtRange = allInIntRange = 1;
  1084. for (j = 0; j < nels; j++) {
  1085. err = toMixedBase(j, var_rank[i], var_shape[i], index);
  1086. IF (err)
  1087. error("error in toMixedBase 1");
  1088. expect[j] = hash4(var_type[i], var_rank[i], index, NCT_LONG);
  1089. if (inRange3(expect[j],var_type[i], NCT_LONG)) {
  1090. allInIntRange = allInIntRange && expect[j] >= long_min
  1091. && expect[j] <= long_max;
  1092. } else {
  1093. allInExtRange = 0;
  1094. }
  1095. }
  1096. err = nc_get_var_long(ncid, i, value);
  1097. if (canConvert) {
  1098. if (allInExtRange) {
  1099. if (allInIntRange) {
  1100. IF (err)
  1101. error("%s", nc_strerror(err));
  1102. } else {
  1103. IF (err != NC_ERANGE)
  1104. error("Range error: status = %d", err);
  1105. }
  1106. } else {
  1107. IF (err != 0 && err != NC_ERANGE)
  1108. error("OK or Range error: status = %d", err);
  1109. }
  1110. for (j = 0; j < nels; j++) {
  1111. if (inRange3(expect[j],var_type[i],NCT_LONG)
  1112. && expect[j] >= long_min && expect[j] <= long_max) {
  1113. IF (!equal(value[j],expect[j],var_type[i],NCT_LONG)){
  1114. error("value read not that expected");
  1115. if (verbose) {
  1116. error("\n");
  1117. error("varid: %d, ", i);
  1118. error("var_name: %s, ", var_name[i]);
  1119. error("element number: %d ", j);
  1120. error("expect: %g", expect[j]);
  1121. error("got: %g", (double) value[j]);
  1122. }
  1123. } else {
  1124. nok++;
  1125. }
  1126. }
  1127. }
  1128. } else {
  1129. IF (nels > 0 && err != NC_ECHAR)
  1130. error("wrong type: status = %d", err);
  1131. }
  1132. }
  1133. err = nc_close(ncid);
  1134. IF (err)
  1135. error("nc_close: %s", nc_strerror(err));
  1136. print_nok(nok);
  1137. }
  1138. void
  1139. test_nc_get_var_float(void)
  1140. {
  1141. int ncid;
  1142. int i;
  1143. int j;
  1144. int err;
  1145. int allInExtRange; /* all values within external range? */
  1146. int allInIntRange; /* all values within internal range? */
  1147. int nels;
  1148. int nok = 0; /* count of valid comparisons */
  1149. size_t index[MAX_RANK];
  1150. int canConvert; /* Both text or both numeric */
  1151. float value[MAX_NELS];
  1152. double expect[MAX_NELS];
  1153. err = nc_open(testfile, NC_NOWRITE, &ncid);
  1154. IF (err)
  1155. error("nc_open: %s", nc_strerror(err));
  1156. for (i = 0; i < NVARS; i++) {
  1157. canConvert = (var_type[i] == NC_CHAR) == (NCT_FLOAT == NCT_TEXT);
  1158. assert(var_rank[i] <= MAX_RANK);
  1159. assert(var_nels[i] <= MAX_NELS);
  1160. err = nc_get_var_float(BAD_ID, i, value);
  1161. IF (err != NC_EBADID)
  1162. error("bad ncid: status = %d", err);
  1163. err = nc_get_var_float(ncid, BAD_VARID, value);
  1164. IF (err != NC_ENOTVAR)
  1165. error("bad var id: status = %d", err);
  1166. nels = 1;
  1167. for (j = 0; j < var_rank[i]; j++) {
  1168. nels *= var_shape[i][j];
  1169. }
  1170. allInExtRange = allInIntRange = 1;
  1171. for (j = 0; j < nels; j++) {
  1172. err = toMixedBase(j, var_rank[i], var_shape[i], index);
  1173. IF (err)
  1174. error("error in toMixedBase 1");
  1175. expect[j] = hash4(var_type[i], var_rank[i], index, NCT_FLOAT);
  1176. if (inRange3(expect[j],var_type[i], NCT_FLOAT)) {
  1177. allInIntRange = allInIntRange && expect[j] >= float_min
  1178. && expect[j] <= float_max;
  1179. } else {
  1180. allInExtRange = 0;
  1181. }
  1182. }
  1183. err = nc_get_var_float(ncid, i, value);
  1184. if (canConvert) {
  1185. if (allInExtRange) {
  1186. if (allInIntRange) {
  1187. IF (err)
  1188. error("%s", nc_strerror(err));
  1189. } else {
  1190. IF (err != NC_ERANGE)
  1191. error("Range error: status = %d", err);
  1192. }
  1193. } else {
  1194. IF (err != 0 && err != NC_ERANGE)
  1195. error("OK or Range error: status = %d", err);
  1196. }
  1197. for (j = 0; j < nels; j++) {
  1198. if (inRange3(expect[j],var_type[i],NCT_FLOAT)
  1199. && expect[j] >= float_min && expect[j] <= float_max) {
  1200. IF (!equal(value[j],expect[j],var_type[i],NCT_FLOAT)){
  1201. error("value read not that expected");
  1202. if (verbose) {
  1203. error("\n");
  1204. error("varid: %d, ", i);
  1205. error("var_name: %s, ", var_name[i]);
  1206. error("element number: %d ", j);
  1207. error("expect: %g", expect[j]);
  1208. error("got: %g", (double) value[j]);
  1209. }
  1210. } else {
  1211. nok++;
  1212. }
  1213. }
  1214. }
  1215. } else {
  1216. IF (nels > 0 && err != NC_ECHAR)
  1217. error("wrong type: status = %d", err);
  1218. }
  1219. }
  1220. err = nc_close(ncid);
  1221. IF (err)
  1222. error("nc_close: %s", nc_strerror(err));
  1223. print_nok(nok);
  1224. }
  1225. void
  1226. test_nc_get_var_double(void)
  1227. {
  1228. int ncid;
  1229. int i;
  1230. int j;
  1231. int err;
  1232. int allInExtRange; /* all values within external range? */
  1233. int allInIntRange; /* all values within internal range? */
  1234. int nels;
  1235. int nok = 0; /* count of valid comparisons */
  1236. size_t index[MAX_RANK];
  1237. int canConvert; /* Both text or both numeric */
  1238. double value[MAX_NELS];
  1239. double expect[MAX_NELS];
  1240. err = nc_open(testfile, NC_NOWRITE, &ncid);
  1241. IF (err)
  1242. error("nc_open: %s", nc_strerror(err));
  1243. for (i = 0; i < NVARS; i++) {
  1244. canConvert = (var_type[i] == NC_CHAR) == (NCT_DOUBLE == NCT_TEXT);
  1245. assert(var_rank[i] <= MAX_RANK);
  1246. assert(var_nels[i] <= MAX_NELS);
  1247. err = nc_get_var_double(BAD_ID, i, value);
  1248. IF (err != NC_EBADID)
  1249. error("bad ncid: status = %d", err);
  1250. err = nc_get_var_double(ncid, BAD_VARID, value);
  1251. IF (err != NC_ENOTVAR)
  1252. error("bad var id: status = %d", err);
  1253. nels = 1;
  1254. for (j = 0; j < var_rank[i]; j++) {
  1255. nels *= var_shape[i][j];
  1256. }
  1257. allInExtRange = allInIntRange = 1;
  1258. for (j = 0; j < nels; j++) {
  1259. err = toMixedBase(j, var_rank[i], var_shape[i], index);
  1260. IF (err)
  1261. error("error in toMixedBase 1");
  1262. expect[j] = hash4(var_type[i], var_rank[i], index, NCT_DOUBLE);
  1263. if (inRange3(expect[j],var_type[i], NCT_DOUBLE)) {
  1264. allInIntRange = allInIntRange && expect[j] >= double_min
  1265. && expect[j] <= double_max;
  1266. } else {
  1267. allInExtRange = 0;
  1268. }
  1269. }
  1270. err = nc_get_var_double(ncid, i, value);
  1271. if (canConvert) {
  1272. if (allInExtRange) {
  1273. if (allInIntRange) {
  1274. IF (err)
  1275. error("%s", nc_strerror(err));
  1276. } else {
  1277. IF (err != NC_ERANGE)
  1278. error("Range error: status = %d", err);
  1279. }
  1280. } else {
  1281. IF (err != 0 && err != NC_ERANGE)
  1282. error("OK or Range error: status = %d", err);
  1283. }
  1284. for (j = 0; j < nels; j++) {
  1285. if (inRange3(expect[j],var_type[i],NCT_DOUBLE)
  1286. && expect[j] >= double_min && expect[j] <= double_max) {
  1287. IF (!equal(value[j],expect[j],var_type[i],NCT_DOUBLE)){
  1288. error("value read not that expected");
  1289. if (verbose) {
  1290. error("\n");
  1291. error("varid: %d, ", i);
  1292. error("var_name: %s, ", var_name[i]);
  1293. error("element number: %d ", j);
  1294. error("expect: %g", expect[j]);
  1295. error("got: %g", (double) value[j]);
  1296. }
  1297. } else {
  1298. nok++;
  1299. }
  1300. }
  1301. }
  1302. } else {
  1303. IF (nels > 0 && err != NC_ECHAR)
  1304. error("wrong type: status = %d", err);
  1305. }
  1306. }
  1307. err = nc_close(ncid);
  1308. IF (err)
  1309. error("nc_close: %s", nc_strerror(err));
  1310. print_nok(nok);
  1311. }
  1312. void
  1313. test_nc_get_vara_text(void)
  1314. {
  1315. int ncid;
  1316. int d;
  1317. int i;
  1318. int j;
  1319. int k;
  1320. int err;
  1321. int allInExtRange; /* all values within external range? */
  1322. int allInIntRange; /* all values within internal range? */
  1323. int nels;
  1324. int nslabs;
  1325. int nok = 0; /* count of valid comparisons */
  1326. size_t start[MAX_RANK];
  1327. size_t edge[MAX_RANK];
  1328. size_t index[MAX_RANK];
  1329. size_t mid[MAX_RANK];
  1330. int canConvert; /* Both text or both numeric */
  1331. text value[MAX_NELS];
  1332. double expect[MAX_NELS];
  1333. err = nc_open(testfile, NC_NOWRITE, &ncid);
  1334. IF (err)
  1335. error("nc_open: %s", nc_strerror(err));
  1336. for (i = 0; i < NVARS; i++) {
  1337. canConvert = (var_type[i] == NC_CHAR) == (NCT_TEXT == NCT_TEXT);
  1338. assert(var_rank[i] <= MAX_RANK);
  1339. assert(var_nels[i] <= MAX_NELS);
  1340. for (j = 0; j < var_rank[i]; j++) {
  1341. start[j] = 0;
  1342. edge[j] = 1;
  1343. }
  1344. err = nc_get_vara_text(BAD_ID, i, start, edge, value);
  1345. IF (err != NC_EBADID)
  1346. error("bad ncid: status = %d", err);
  1347. err = nc_get_vara_text(ncid, BAD_VARID, start, edge, value);
  1348. IF (err != NC_ENOTVAR)
  1349. error("bad var id: status = %d", err);
  1350. for (j = 0; j < var_rank[i]; j++) {
  1351. start[j] = var_shape[i][j];
  1352. err = nc_get_vara_text(ncid, i, start, edge, value);
  1353. IF (canConvert && err != NC_EINVALCOORDS)
  1354. error("bad index: status = %d", err);
  1355. start[j] = 0;
  1356. edge[j] = var_shape[i][j] + 1;
  1357. err = nc_get_vara_text(ncid, i, start, edge, value);
  1358. IF (canConvert && err != NC_EEDGE)
  1359. error("bad edge: status = %d", err);
  1360. edge[j] = 1;
  1361. }
  1362. /* Check non-scalars for correct error returned even when */
  1363. /* there is nothing to get (edge[j]==0) */
  1364. if(var_rank[i] > 0) {
  1365. for (j = 0; j < var_rank[i]; j++) {
  1366. edge[j] = 0;
  1367. }
  1368. err = nc_get_vara_text(BAD_ID, i, start, edge, value);
  1369. IF (err != NC_EBADID)
  1370. error("bad ncid: status = %d", err);
  1371. err = nc_get_vara_text(ncid, BAD_VARID, start, edge, value);
  1372. IF (err != NC_ENOTVAR)
  1373. error("bad var id: status = %d", err);
  1374. for (j = 0; j < var_rank[i]; j++) {
  1375. if (var_dimid[i][j] > 0) { /* skip record dim */
  1376. start[j] = var_shape[i][j];
  1377. err = nc_get_vara_text(ncid, i, start, edge, value);
  1378. IF (canConvert && err != NC_EINVALCOORDS)
  1379. error("bad start: status = %d", err);
  1380. start[j] = 0;
  1381. }
  1382. }
  1383. err = nc_get_vara_text(ncid, i, start, edge, value);
  1384. if (canConvert) {
  1385. IF (err)
  1386. error("%s", nc_strerror(err));
  1387. } else {
  1388. IF (err != NC_ECHAR)
  1389. error("wrong type: status = %d", err);
  1390. }
  1391. for (j = 0; j < var_rank[i]; j++) {
  1392. edge[j] = 1;
  1393. }
  1394. } /* Choose a random point dividing each dim into 2 parts */
  1395. /* get 2^rank (nslabs) slabs so defined */
  1396. nslabs = 1;
  1397. for (j = 0; j < var_rank[i]; j++) {
  1398. mid[j] = roll( var_shape[i][j] );
  1399. nslabs *= 2;
  1400. }
  1401. /* bits of k determine whether to get lower or upper part of dim */
  1402. for (k = 0; k < nslabs; k++) {
  1403. nels = 1;
  1404. for (j = 0; j < var_rank[i]; j++) {
  1405. if ((k >> j) & 1) {
  1406. start[j] = 0;
  1407. edge[j] = mid[j];
  1408. }else{
  1409. start[j] = mid[j];
  1410. edge[j] = var_shape[i][j] - mid[j];
  1411. }
  1412. nels *= edge[j];
  1413. }
  1414. allInExtRange = allInIntRange = 1;
  1415. for (j = 0; j < nels; j++) {
  1416. err = toMixedBase(j, var_rank[i], edge, index);
  1417. IF (err)
  1418. error("error in toMixedBase 1");
  1419. for (d = 0; d < var_rank[i]; d++)
  1420. index[d] += start[d];
  1421. expect[j] = hash4(var_type[i], var_rank[i], index, NCT_TEXT);
  1422. if (inRange3(expect[j],var_type[i], NCT_TEXT)) {
  1423. allInIntRange = allInIntRange && expect[j] >= text_min
  1424. && expect[j] <= text_max;
  1425. } else {
  1426. allInExtRange = 0;
  1427. }
  1428. }
  1429. if (var_rank[i] == 0 && i%2)
  1430. err = nc_get_vara_text(ncid, i, NULL, NULL, value);
  1431. else
  1432. err = nc_get_vara_text(ncid, i, start, edge, value);
  1433. if (canConvert) {
  1434. if (allInExtRange) {
  1435. if (allInIntRange) {
  1436. IF (err)
  1437. error("%s", nc_strerror(err));
  1438. } else {
  1439. IF (err != NC_ERANGE)
  1440. error("Range error: status = %d", err);
  1441. }
  1442. } else {
  1443. IF (err != 0 && err != NC_ERANGE)
  1444. error("OK or Range error: status = %d", err);
  1445. }
  1446. for (j = 0; j < nels; j++) {
  1447. if (inRange3(expect[j],var_type[i],NCT_TEXT)
  1448. && expect[j] >= text_min && expect[j] <= text_max) {
  1449. IF (!equal(value[j],expect[j],var_type[i],NCT_TEXT)){
  1450. error("value read not that expected");
  1451. if (verbose) {
  1452. error("\n");
  1453. error("varid: %d, ", i);
  1454. error("var_name: %s, ", var_name[i]);
  1455. error("element number: %d ", j);
  1456. error("expect: %g", expect[j]);
  1457. error("got: %g", (double) value[j]);
  1458. }
  1459. } else {
  1460. nok++;
  1461. }
  1462. }
  1463. }
  1464. } else {
  1465. IF (nels > 0 && err != NC_ECHAR)
  1466. error("wrong type: status = %d", err);
  1467. }
  1468. }
  1469. }
  1470. err = nc_close(ncid);
  1471. IF (err)
  1472. error("nc_close: %s", nc_strerror(err));
  1473. print_nok(nok);
  1474. }
  1475. void
  1476. test_nc_get_vara_uchar(void)
  1477. {
  1478. int ncid;
  1479. int d;
  1480. int i;
  1481. int j;
  1482. int k;
  1483. int err;
  1484. int allInExtRange; /* all values within external range? */
  1485. int allInIntRange; /* all values within internal range? */
  1486. int nels;
  1487. int nslabs;
  1488. int nok = 0; /* count of valid comparisons */
  1489. size_t start[MAX_RANK];
  1490. size_t edge[MAX_RANK];
  1491. size_t index[MAX_RANK];
  1492. size_t mid[MAX_RANK];
  1493. int canConvert; /* Both text or both numeric */
  1494. uchar value[MAX_NELS];
  1495. double expect[MAX_NELS];
  1496. err = nc_open(testfile, NC_NOWRITE, &ncid);
  1497. IF (err)
  1498. error("nc_open: %s", nc_strerror(err));
  1499. for (i = 0; i < NVARS; i++) {
  1500. canConvert = (var_type[i] == NC_CHAR) == (NCT_UCHAR == NCT_TEXT);
  1501. assert(var_rank[i] <= MAX_RANK);
  1502. assert(var_nels[i] <= MAX_NELS);
  1503. for (j = 0; j < var_rank[i]; j++) {
  1504. start[j] = 0;
  1505. edge[j] = 1;
  1506. }
  1507. err = nc_get_vara_uchar(BAD_ID, i, start, edge, value);
  1508. IF (err != NC_EBADID)
  1509. error("bad ncid: status = %d", err);
  1510. err = nc_get_vara_uchar(ncid, BAD_VARID, start, edge, value);
  1511. IF (err != NC_ENOTVAR)
  1512. error("bad var id: status = %d", err);
  1513. for (j = 0; j < var_rank[i]; j++) {
  1514. start[j] = var_shape[i][j];
  1515. err = nc_get_vara_uchar(ncid, i, start, edge, value);
  1516. IF (canConvert && err != NC_EINVALCOORDS)
  1517. error("bad index: status = %d", err);
  1518. start[j] = 0;
  1519. edge[j] = var_shape[i][j] + 1;
  1520. err = nc_get_vara_uchar(ncid, i, start, edge, value);
  1521. IF (canConvert && err != NC_EEDGE)
  1522. error("bad edge: status = %d", err);
  1523. edge[j] = 1;
  1524. }
  1525. /* Check non-scalars for correct error returned even when */
  1526. /* there is nothing to get (edge[j]==0) */
  1527. if(var_rank[i] > 0) {
  1528. for (j = 0; j < var_rank[i]; j++) {
  1529. edge[j] = 0;
  1530. }
  1531. err = nc_get_vara_uchar(BAD_ID, i, start, edge, value);
  1532. IF (err != NC_EBADID)
  1533. error("bad ncid: status = %d", err);
  1534. err = nc_get_vara_uchar(ncid, BAD_VARID, start, edge, value);
  1535. IF (err != NC_ENOTVAR)
  1536. error("bad var id: status = %d", err);
  1537. for (j = 0; j < var_rank[i]; j++) {
  1538. if (var_dimid[i][j] > 0) { /* skip record dim */
  1539. start[j] = var_shape[i][j];
  1540. err = nc_get_vara_uchar(ncid, i, start, edge, value);
  1541. IF (canConvert && err != NC_EINVALCOORDS)
  1542. error("bad start: status = %d", err);
  1543. start[j] = 0;
  1544. }
  1545. }
  1546. err = nc_get_vara_uchar(ncid, i, start, edge, value);
  1547. if (canConvert) {
  1548. IF (err)
  1549. error("%s", nc_strerror(err));
  1550. } else {
  1551. IF (err != NC_ECHAR)
  1552. error("wrong type: status = %d", err);
  1553. }
  1554. for (j = 0; j < var_rank[i]; j++) {
  1555. edge[j] = 1;
  1556. }
  1557. } /* Choose a random point dividing each dim into 2 parts */
  1558. /* get 2^rank (nslabs) slabs so defined */
  1559. nslabs = 1;
  1560. for (j = 0; j < var_rank[i]; j++) {
  1561. mid[j] = roll( var_shape[i][j] );
  1562. nslabs *= 2;
  1563. }
  1564. /* bits of k determine whether to get lower or upper part of dim */
  1565. for (k = 0; k < nslabs; k++) {
  1566. nels = 1;
  1567. for (j = 0; j < var_rank[i]; j++) {
  1568. if ((k >> j) & 1) {
  1569. start[j] = 0;
  1570. edge[j] = mid[j];
  1571. }else{
  1572. start[j] = mid[j];
  1573. edge[j] = var_shape[i][j] - mid[j];
  1574. }
  1575. nels *= edge[j];
  1576. }
  1577. allInExtRange = allInIntRange = 1;
  1578. for (j = 0; j < nels; j++) {
  1579. err = toMixedBase(j, var_rank[i], edge, index);
  1580. IF (err)
  1581. error("error in toMixedBase 1");
  1582. for (d = 0; d < var_rank[i]; d++)
  1583. index[d] += start[d];
  1584. expect[j] = hash4(var_type[i], var_rank[i], index, NCT_UCHAR);
  1585. if (inRange3(expect[j],var_type[i], NCT_UCHAR)) {
  1586. allInIntRange = allInIntRange && expect[j] >= uchar_min
  1587. && expect[j] <= uchar_max;
  1588. } else {
  1589. allInExtRange = 0;
  1590. }
  1591. }
  1592. if (var_rank[i] == 0 && i%2)
  1593. err = nc_get_vara_uchar(ncid, i, NULL, NULL, value);
  1594. else
  1595. err = nc_get_vara_uchar(ncid, i, start, edge, value);
  1596. if (canConvert) {
  1597. if (allInExtRange) {
  1598. if (allInIntRange) {
  1599. IF (err)
  1600. error("%s", nc_strerror(err));
  1601. } else {
  1602. IF (err != NC_ERANGE)
  1603. error("Range error: status = %d", err);
  1604. }
  1605. } else {
  1606. IF (err != 0 && err != NC_ERANGE)
  1607. error("OK or Range error: status = %d", err);
  1608. }
  1609. for (j = 0; j < nels; j++) {
  1610. if (inRange3(expect[j],var_type[i],NCT_UCHAR)
  1611. && expect[j] >= uchar_min && expect[j] <= uchar_max) {
  1612. IF (!equal(value[j],expect[j],var_type[i],NCT_UCHAR)){
  1613. error("value read not that expected");
  1614. if (verbose) {
  1615. error("\n");
  1616. error("varid: %d, ", i);
  1617. error("var_name: %s, ", var_name[i]);
  1618. error("element number: %d ", j);
  1619. error("expect: %g", expect[j]);
  1620. error("got: %g", (double) value[j]);
  1621. }
  1622. } else {
  1623. nok++;
  1624. }
  1625. }
  1626. }
  1627. } else {
  1628. IF (nels > 0 && err != NC_ECHAR)
  1629. error("wrong type: status = %d", err);
  1630. }
  1631. }
  1632. }
  1633. err = nc_close(ncid);
  1634. IF (err)
  1635. error("nc_close: %s", nc_strerror(err));
  1636. print_nok(nok);
  1637. }
  1638. void
  1639. test_nc_get_vara_schar(void)
  1640. {
  1641. int ncid;
  1642. int d;
  1643. int i;
  1644. int j;
  1645. int k;
  1646. int err;
  1647. int allInExtRange; /* all values within external range? */
  1648. int allInIntRange; /* all …

Large files files are truncated, but you can click here to view the full file