/other/netcdf_write_matrix/src/nctest/val.c
C | 245 lines | 219 code | 14 blank | 12 comment | 34 complexity | b68153687976d081dc435fdd2485218c MD5 | raw file
Possible License(s): AGPL-1.0
- /*********************************************************************
- * Copyright 1993, UCAR/Unidata
- * See netcdf/COPYRIGHT file for copying and redistribution conditions.
- * $Header: /upc/share/CVS/netcdf-3/nctest/val.c,v 1.12 1996/08/19 22:10:15 davis Exp $
- *********************************************************************/
- #include <stdio.h>
- #include "netcdf.h"
- #include "testcdf.h"
- #include "val.h"
- #include "error.h"
- /* fill typed value block with values of specified type */
- void
- val_fill(type, len, vals)
- nc_type type; /* netcdf type, NC_BYTE, ..., NC_DOUBLE */
- long len; /* number of elements to fill with */
- void *vals; /* start of first block of values */
- {
- static char pname[] = "val_fill";
- long half = len/2;
- int iel;
- union {
- char *cp;
- short *sp;
- nclong *lp;
- float *fp;
- double *dp;
- } gp;
- switch (type) {
- case NC_BYTE:
- case NC_CHAR:
- gp.cp = (char *) vals;
- for (iel = 0; iel < len; iel++)
- *gp.cp++ = (char) iel;
- break;
- case NC_SHORT:
- gp.sp = (short *) vals;
- for (iel = 0; iel < len; iel++)
- *gp.sp++ = (short) (iel - half); /* negative and positive values */
- break;
- case NC_LONG:
- gp.lp = (nclong *) vals;
- for (iel = 0; iel < len; iel++)
- *gp.lp++ = (nclong) (iel - half);
- break;
- case NC_FLOAT:
- gp.fp = (float *) vals;
- for (iel = 0; iel < len; iel++)
- *gp.fp++ = (float) (iel+1);
- break;
- case NC_DOUBLE:
- gp.dp = (double *) vals;
- for (iel = 0; iel < len; iel++)
- *gp.dp++ = (double) (iel - half);
- break;
- default:
- error("%s: bad type, test program error", pname);
- }
- }
- /* fill typed value block with zeros of specified type */
- void
- val_fill_zero(type, len, vals)
- nc_type type; /* netcdf type, NC_BYTE, ..., NC_DOUBLE */
- long len; /* number of elements to fill with */
- void *vals; /* start of first block of values */
- {
- static char pname[] = "val_fill_zero";
- int iel;
- union {
- char *cp;
- short *sp;
- nclong *lp;
- float *fp;
- double *dp;
- } gp;
- switch (type) {
- case NC_BYTE:
- case NC_CHAR:
- gp.cp = (char *) vals;
- for (iel = 0; iel < len; iel++)
- *gp.cp++ = (char) 0;
- break;
- case NC_SHORT:
- gp.sp = (short *) vals;
- for (iel = 0; iel < len; iel++)
- *gp.sp++ = (short) 0;
- break;
- case NC_LONG:
- gp.lp = (nclong *) vals;
- for (iel = 0; iel < len; iel++)
- *gp.lp++ = (nclong) 0;
- break;
- case NC_FLOAT:
- gp.fp = (float *) vals;
- for (iel = 0; iel < len; iel++)
- *gp.fp++ = (float) 0;
- break;
- case NC_DOUBLE:
- gp.dp = (double *) vals;
- for (iel = 0; iel < len; iel++)
- *gp.dp++ = (double) 0;
- break;
- default:
- error("%s: bad type, test program error", pname);
- }
- }
- /*
- * compare two typed value blocks, return 0 if equal, 1+n otherwise,
- * where n is the index of the first differing element.
- */
- int
- val_cmp (type, len, v1, v2)
- nc_type type; /* netcdf type, NC_BYTE, ..., NC_DOUBLE */
- long len; /* number of elements of type to compare */
- void *v1; /* start of first block of values */
- void *v2; /* start of second block of values */
- {
- static char pname[] = "val_cmp";
- int iel;
- union {
- char *cp;
- short *sp;
- nclong *lp;
- float *fp;
- double *dp;
- } gp, hp;
- switch (type) {
- case NC_CHAR:
- case NC_BYTE:
- gp.cp = (char *) v1;
- hp.cp = (char *) v2;
- for (iel = 0; iel < len; iel++) {
- if (*gp.cp != *hp.cp)
- return (iel + 1);
- gp.cp++;
- hp.cp++;
- }
- break;
- case NC_SHORT:
- gp.sp = (short *) v1;
- hp.sp = (short *) v2;
- for (iel = 0; iel < len; iel++) {
- if (*gp.sp != *hp.sp)
- return (iel + 1);
- gp.sp++;
- hp.sp++;
- }
- break;
- case NC_LONG:
- gp.lp = (nclong *) v1;
- hp.lp = (nclong *) v2;
- for (iel = 0; iel < len; iel++) {
- if (*gp.lp != *hp.lp)
- return (iel + 1);
- gp.lp++;
- hp.lp++;
- }
- break;
- case NC_FLOAT:
- gp.fp = (float *) v1;
- hp.fp = (float *) v2;
- for (iel = 0; iel < len; iel++) {
- if (*gp.fp != *hp.fp)
- return (iel + 1);
- gp.fp++;
- hp.fp++;
- }
- break;
- case NC_DOUBLE:
- gp.dp = (double *) v1;
- hp.dp = (double *) v2;
- for (iel = 0; iel < len; iel++) {
- if (*gp.dp != *hp.dp)
- return (iel + 1);
- gp.dp++;
- hp.dp++;
- }
- break;
- default:
- error("%s: bad type, test program error", pname);
- }
- return 0; /* all values agree */
- }
- /* print typed value block with values of specified type */
- void
- val_out(type, len, vals)
- nc_type type; /* netcdf type, NC_BYTE, ..., NC_DOUBLE */
- long len; /* number of elements to fill with */
- void *vals; /* start of first block of values */
- {
- static char pname[] = "val_oout";
- int iel;
- union {
- char *cp;
- short *sp;
- nclong *lp;
- float *fp;
- double *dp;
- } gp;
- (void) fprintf(stderr," ");
- switch (type) {
- case NC_BYTE:
- case NC_CHAR:
- gp.cp = (char *) vals;
- for (iel = 0; iel < len; iel++)
- (void)fprintf(stderr,"%d%s",*gp.cp++,iel<len-1 ? ", " : "");
- break;
- case NC_SHORT:
- gp.sp = (short *) vals;
- for (iel = 0; iel < len; iel++)
- (void)fprintf(stderr,"%d%s",*gp.sp++,iel<len-1 ? ", " : "");
- break;
- case NC_LONG:
- gp.lp = (nclong *) vals;
- for (iel = 0; iel < len; iel++)
- (void)fprintf(stderr,"%d%s",*gp.lp++,iel<len-1 ? ", " : "");
- break;
- case NC_FLOAT:
- gp.fp = (float *) vals;
- for (iel = 0; iel < len; iel++)
- (void)fprintf(stderr,"%g%s",*gp.fp++,iel<len-1 ? ", " : "");
- break;
- case NC_DOUBLE:
- gp.dp = (double *) vals;
- for (iel = 0; iel < len; iel++)
- (void)fprintf(stderr,"%g%s",*gp.dp++,iel<len-1 ? ", " : "");
- break;
- default:
- error("%s: bad type, test program error", pname);
- }
- (void) putc('\n',stderr);
- }