Test harness for grib_util_set_spec improved

This commit is contained in:
Shahram Najm 2016-10-10 19:14:34 +01:00
parent d62fee70c5
commit 5bf974a3b0
2 changed files with 90 additions and 17 deletions

View File

@ -7,12 +7,31 @@
* In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
* virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
*/
#include "grib_api_internal.h"
#include "eccodes.h"
#include <assert.h>
#define STR_EQUAL(s1, s2) (strcmp((s1), (s2)) == 0)
void test_reduced_gg(const char* input_filename, const char* output_filename)
int get_packing_type_code(const char* packingType)
{
int result = GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE;
if (packingType==NULL)
return result;
if (STR_EQUAL(packingType, "grid_jpeg"))
result = GRIB_UTIL_PACKING_TYPE_JPEG;
else if (STR_EQUAL(packingType, "grid_simple"))
result = GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE;
else if (STR_EQUAL(packingType, "grid_second_order"))
result = GRIB_UTIL_PACKING_TYPE_GRID_SECOND_ORDER;
return result;
}
void test_reduced_gg(int remove_local_def, int edition, const char* packingType,
const char* input_filename, const char* output_filename)
{
/* based on copy_spec_from_ksec */
int err = 0;
@ -59,7 +78,8 @@ void test_reduced_gg(const char* input_filename, const char* output_filename)
spec.longitudeOfLastGridPointInDegrees = 357.187500;
spec.bitmapPresent = 0;
packing_spec.packing_type = GRIB_UTIL_PACKING_TYPE_GRID_SECOND_ORDER;
/*packing_spec.packing_type = GRIB_UTIL_PACKING_TYPE_GRID_SECOND_ORDER;*/
packing_spec.packing_type = get_packing_type_code(packingType);
packing_spec.bitsPerValue = 24;
packing_spec.accuracy=GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES;
packing_spec.packing=GRIB_UTIL_PACKING_USE_PROVIDED;
@ -86,7 +106,8 @@ void test_reduced_gg(const char* input_filename, const char* output_filename)
fclose(out);
}
void test_regular_ll(const char* input_filename, const char* output_filename)
void test_regular_ll(int remove_local_def, int edition, const char* packingType,
const char* input_filename, const char* output_filename)
{
/* based on copy_spec_from_ksec */
int err = 0;
@ -130,13 +151,18 @@ void test_regular_ll(const char* input_filename, const char* output_filename)
spec.longitudeOfLastGridPointInDegrees = 15.0;
spec.bitmapPresent = 0;
packing_spec.packing_type = GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE;
/*packing_spec.packing_type = GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE;*/
packing_spec.packing_type = get_packing_type_code(packingType);
packing_spec.bitsPerValue = 24;
packing_spec.accuracy=GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES;
packing_spec.packing=GRIB_UTIL_PACKING_USE_PROVIDED;
/* Convert to edition 2 and remove local use section */
packing_spec.editionNumber = 2;
packing_spec.deleteLocalDefinition = 1;
if (edition != 0) {
packing_spec.editionNumber = edition;
}
if (remove_local_def) {
packing_spec.deleteLocalDefinition = 1;
}
finalh = codes_grib_util_set_spec(
handle,
@ -160,13 +186,53 @@ void test_regular_ll(const char* input_filename, const char* output_filename)
fclose(out);
}
void usage(const char *prog)
{
fprintf(stderr, "%s: [-p packingType] [-r] [-e edition] in.grib out.grib\n", prog);
fprintf(stderr, "-p packingType: one of grid_jpeg, grid_second_order or grid_simple\n");
fprintf(stderr, "-r remove local definition\n");
fprintf(stderr, "-e edition: 1 or 2\n");
exit(1);
}
int main(int argc, char *argv[])
{
const char *infile = argv[1];
const char *outfile = argv[2];
int opt = 0, remove_local_def = 0, i = 0;
int edition = 0;
char* packingType = NULL;
const char* prog = argv[0];
char* infile_name = NULL;
char* outfile_name = NULL;
while ((opt = getopt(argc, argv, "re:p:")) != -1) {
switch (opt) {
case 'r':
remove_local_def=1;
break;
case 'p':
packingType = optarg;
break;
case 'e':
edition = atoi(optarg);
break;
default:
usage(prog);
break;
}
}
/* After option processing expect just two files */
if (argc-optind != 2) usage(prog);
for (i = optind; i < argc; i++) {
printf ("File argument %s\n", argv[i]);
}
infile_name = argv[argc-2];
outfile_name = argv[argc-1];
test_regular_ll(remove_local_def, edition, packingType, infile_name, outfile_name);
test_reduced_gg(remove_local_def, edition, packingType, infile_name, outfile_name);
test_regular_ll(infile, outfile);
test_reduced_gg(infile, outfile);
printf("ALL OK\n");
return 0;
}

View File

@ -19,8 +19,8 @@ outfile=out.grib_util_set_spec.grib
tempOut=temp.grib_util_set_spec.grib
rm -f $outfile
# GRIB1 with local definition for MARS
${test_dir}grib_util_set_spec $infile $outfile > /dev/null
# GRIB1 with local definition for MARS. Convert to edition2 and remove local def
${test_dir}grib_util_set_spec -e 2 -r $infile $outfile > /dev/null
res=`${tools_dir}grib_get -p edition,section2Used,Ni,Nj,numberOfValues,bitsPerValue $outfile`
[ "$res" = "2 0 17 14 238 24" ]
@ -35,19 +35,26 @@ ${test_dir}grib_util_set_spec $tempOut $outfile > /dev/null
# Add another grib1 local definition (which is not in grib2)
${tools_dir}grib_set -s setLocalDefinition=1,localDefinitionNumber=5 $infile $tempOut
infile=$tempOut
${test_dir}grib_util_set_spec $tempOut $outfile > /dev/null
${test_dir}grib_util_set_spec -r -e 2 $tempOut $outfile > /dev/null
res=`${tools_dir}grib_get -p edition,section2Used $outfile`
[ "$res" = "2 0" ]
# GRIB2 input with local definition
infile=../data/regular_latlon_surface.grib2
${test_dir}grib_util_set_spec $infile $outfile > /dev/null
${test_dir}grib_util_set_spec -r $infile $outfile > /dev/null
grib_check_key_equals $outfile section2Used 0
# GRIB2 input without local definition
infile=$ECCODES_SAMPLES_PATH/GRIB2.tmpl
${test_dir}grib_util_set_spec $infile $outfile > /dev/null
grib_check_key_equals $outfile section2Used 0
# Convert to edition2 and use JPEG for packing
infile=../data/latlon.grib
${test_dir}grib_util_set_spec -e 2 -p grid_jpeg $infile $outfile > /dev/null
res=`${tools_dir}grib_get -p edition,section2Used,packingType $outfile`
[ "$res" = "2 1 grid_jpeg" ]
# --------------------------------------------------
# Reduced Gaussian Grid N=32 second order packing
# --------------------------------------------------
@ -58,7 +65,7 @@ rm -f $outfile
stats_old=`${tools_dir}grib_get -F%.2f -p min,max $infile`
[ "$stats_old" = "160.25 224.45" ]
${test_dir}grib_util_set_spec $infile $outfile
${test_dir}grib_util_set_spec -p grid_second_order $infile $outfile
# Check output file. Values are scaled up by 1.1
grib_check_key_equals $outfile packingType grid_second_order