ECC-651: grib_compare/bufr_compare: Enable a 'two-way' switch for symmetric comparison

This commit is contained in:
Shahram Najm 2018-03-13 15:56:11 +00:00
commit 2eb1b016e9
4 changed files with 218 additions and 81 deletions

View File

@ -35,7 +35,7 @@ fRules=${label}.filter
f="syno_1.bufr"
echo "Test: comparing the same files" >> $fLog
echo "file: $f" >> $fLog
${tools_dir}//bufr_compare $f $f >> $fLog
${tools_dir}/bufr_compare $f $f >> $fLog
#----------------------------------------------------
# Test: comparing two completely different files
@ -45,7 +45,7 @@ f1="syno_1.bufr"
f2="aaen_55.bufr"
echo "Test: comparing two completely different files" >> $fLog
echo "file: $f" >> $fLog
${tools_dir}//bufr_compare $f1 $f2 >> $fLog
${tools_dir}/bufr_compare $f1 $f2 >> $fLog
if [ $? -eq 0 ]; then
echo "bufr_compare should have failed if files are completely different" >&2
exit 1
@ -60,10 +60,10 @@ echo "Test: comparing with and witout the -b switch" >> $fLog
echo "file: $f" >> $fLog
#Alter a key in the file
${tools_dir}//bufr_set -s dataCategory=2 $f ${fBufrTmp} >> $fLog
${tools_dir}/bufr_set -s dataCategory=2 $f ${fBufrTmp} >> $fLog
set +e
${tools_dir}//bufr_compare $f ${fBufrTmp}>> $fLog
${tools_dir}/bufr_compare $f ${fBufrTmp}>> $fLog
if [ $? -eq 0 ]; then
echo "bufr_compare should have failed if files are different" >&2
exit 1
@ -71,7 +71,7 @@ fi
set -e
# Now compare with -b switch. No difference should be found.
${tools_dir}//bufr_compare -b dataCategory $f ${fBufrTmp}>> $fLog
${tools_dir}/bufr_compare -b dataCategory $f ${fBufrTmp}>> $fLog
#----------------------------------------------------
# Test: comparing with the -r switch
@ -81,13 +81,13 @@ ${tools_dir}//bufr_compare -b dataCategory $f ${fBufrTmp}>> $fLog
#cat temp_101.bufr syno_multi.bufr > $fBufrInput2
#set +e
#${tools_dir}//bufr_compare ${fBufrInput1} ${fBufrInput2} >> $fLog
#${tools_dir}/bufr_compare ${fBufrInput1} ${fBufrInput2} >> $fLog
#if [ $? -eq 0 ]; then
# echo "bufr_compare should have failed if the message order in the files is different" >&2
# exit 1
#fi
#set -e
#${tools_dir}//bufr_compare -r ${fBufrInput1} ${fBufrInput2}>> $fLog
#${tools_dir}/bufr_compare -r ${fBufrInput1} ${fBufrInput2}>> $fLog
#----------------------------------------------------
# Change subCentre and compare
@ -138,5 +138,22 @@ ${tools_dir}/codes_bufr_filter -o $fBufrTmp $fRules $f
# Header keys have not changed
${tools_dir}/bufr_compare -H $f $fBufrTmp
#Clean up
#----------------------------------------------------
# Compare two-way (symmetric mode)
#----------------------------------------------------
f=$ECCODES_SAMPLES_PATH/BUFR3.tmpl
# Add a local section
${tools_dir}/bufr_set -s section2Present=1 $f $fBufrTmp
# Compare A with B will pass
${tools_dir}/bufr_compare $f $fBufrTmp
# Compare with -2 option
set +e
${tools_dir}/bufr_compare -2 $f $fBufrTmp > $fLog 2>&1
status=$?
set -e
[ $status -eq 1 ]
# Clean up
# -------------
rm -f $fLog $fBufrTmp $fBufrInput1 $fBufrInput2 $fRules

View File

@ -20,6 +20,7 @@ rm -f $outfile
${tools_dir}/grib_set -s shortName=2d $infile $outfile
${tools_dir}/grib_compare -b indicatorOfParameter,paramId,shortName $infile $outfile > $REDIRECT
# ----------------------------------------
# Test the -r switch
# ----------------------------------------
infile=${data_dir}/v.grib2
@ -34,6 +35,7 @@ ${tools_dir}/grib_compare -r temp_comp.123 temp_comp.321
rm -f temp_comp.1 temp_comp.2 temp_comp.3 temp_comp.123 temp_comp.321
# ----------------------------------------
# GRIB-797: test last argument being a directory
# ----------------------------------------
temp_dir=tempdir.grib_compare
@ -42,6 +44,7 @@ cp $infile $temp_dir
${tools_dir}/grib_compare $infile $temp_dir
rm -rf $temp_dir
# ----------------------------------------
# ECC-245: blacklist and 2nd order packing
# ----------------------------------------
temp1=grib_compare_temp1.grib
@ -67,6 +70,7 @@ set -e
[ $status -eq 1 ]
# ----------------------------------------
# ECC-355: -R with "all" option
# ----------------------------------------
${tools_dir}/grib_copy -w count=1 ${data_dir}/tigge_cf_ecmwf.grib2 $temp1
@ -77,6 +81,56 @@ ${tools_dir}/grib_compare -b $BLACKLIST -R referenceValue=0.03,codedValues=2 $te
# Now try the "all" option with the highest relative diff value
${tools_dir}/grib_compare -b $BLACKLIST -R all=2 $temp1 $temp2
# ----------------------------------------
# ECC-651: Two-way (symmetric) comparison
# ----------------------------------------
sample_g1=$ECCODES_SAMPLES_PATH/GRIB1.tmpl
temp_nold=$temp1
${tools_dir}/grib_set -s deleteLocalDefinition=1 $sample_g1 $temp_nold
# Now the sample has a local definition but $temp_nold does not
set +e
${tools_dir}/grib_compare $temp_nold $sample_g1 > $outfile
status=$?
set -e
[ $status -eq 1 ]
reffile=grib_compare_temp1.ref
cat > $reffile <<EOF
-- GRIB #1 -- shortName=z paramId=129 stepRange=0 levelType=pl level=500 packingType=grid_simple gridType=regular_ll --
long [totalLength]: [84] != [107]
long [section1Length]: [28] != [52]
long [section4Length]: [12] != [11]
EOF
diff $reffile $outfile
# Two-way mode enabled
set +e
${tools_dir}/grib_compare -2 $temp_nold $sample_g1 > $outfile
status=$?
set -e
[ $status -eq 1 ]
cat > $reffile <<EOF
-- GRIB #1 -- shortName=z paramId=129 stepRange=0 levelType=pl level=500 packingType=grid_simple gridType=regular_ll --
long [totalLength]: [84] != [107]
long [section1Length]: [28] != [52]
long [section4Length]: [12] != [11]
[reservedNeedNotBePresent] not found in 1st field
[localDefinitionNumber] not found in 1st field
[marsClass] not found in 1st field
[marsType] not found in 1st field
[marsStream] not found in 1st field
[experimentVersionNumber] not found in 1st field
[perturbationNumber] not found in 1st field
[numberOfForecastsInEnsemble] not found in 1st field
[padding_local1_1] not found in 1st field
EOF
diff $reffile $outfile
rm -f $reffile
# Clean up
# --------------
rm -f $temp1 $temp2
rm -f $outfile

View File

@ -59,6 +59,15 @@ int error=0;
int count=0;
int lastPrint=0;
int force=0;
/* ECC-651: Boolean 'two_way' set to 1 when '-2' option used */
int two_way=0;
/* Boolean 'handles_swapped' relevant in 'two_way' mode:
* 0 means: h1 is first file, h2 is second file
* 1 means: h1 is second file, h2 is first file
*/
int handles_swapped=0;
double maxAbsoluteError = 1e-19;
int onlyListed=1;
int headerMode=0;
@ -185,7 +194,8 @@ grib_option grib_options[]={
/* {id, args, help}, on, command_line, value*/
/*{"r",0,"Compare files in which the messages are not in the same order. This option is time expensive.\n",0,1,0},*/
{"b:",0,0,0,1,0},
{"d",0,"Write different messages on files\n",0,1,0},
{"d",0,"Write different messages on files.\n",0,1,0},
{"2",0,"Enable two-way comparison.\n",0,1,0},
{"T:",0,0,1,0,"B"},
{"c:",0,0,0,1,0},
{"S:","start","First field to be processed.\n",0,1,0},
@ -251,6 +261,9 @@ int grib_tool_init(grib_runtime_options* options)
if (grib_options_on("f")) force=1;
else force=0;
if (grib_options_on("2")) two_way=1;
else two_way=0;
if (grib_options_on("d")) write_error=1;
else write_error=0;
@ -474,7 +487,23 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
if(compare_handles(global_handle,h,options)) {
error++;
if (!force) exit(1);
if (!two_way) {
/* If two_way mode: Don't exit yet. Show further differences */
if (!force) exit(1);
}
}
if (two_way) {
/* ECC-651 and ECC-431 */
handles_swapped = 1;
if(compare_handles(h, global_handle, options)) {
error++;
if (!force) exit(1);
} else {
if (error) {
/* Error from first pass */
if (!force) exit(1);
}
}
}
grib_handle_delete(global_handle);
@ -611,6 +640,8 @@ static int compare_values(grib_runtime_options* options, grib_handle* handle1, g
double packingError1=0,packingError2=0;
double value_tolerance=0;
grib_context* c=handle1->context;
char* first_str = (handles_swapped==0? "1st" : "2nd");
char* second_str = (handles_swapped==0? "2nd" : "1st");
type1=type;
type2=type;
@ -619,7 +650,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* handle1, g
if( type1==GRIB_TYPE_UNDEFINED && (err = grib_get_native_type(handle1,name,&type1)) != GRIB_SUCCESS)
{
printInfo(handle1);
printf("Oops... cannot get type of [%s] in 1st field: %s\n",name,grib_get_error_message(err));
printf("Oops... cannot get type of [%s] in %s field: %s\n",name, first_str, grib_get_error_message(err));
save_error(c,name);
return err;
}
@ -629,12 +660,12 @@ static int compare_values(grib_runtime_options* options, grib_handle* handle1, g
if(err == GRIB_NOT_FOUND)
{
printInfo(handle1);
printf("[%s] not found in 2nd field\n",name);
printf("[%s] not found in %s field\n",name, second_str);
save_error(c,name);
return err;
}
printInfo(handle1);
printf("Oops... cannot get type of [%s] in 2nd field: %s\n",name,grib_get_error_message(err));
printf("Oops... cannot get type of [%s] in %s field: %s\n",name, second_str, grib_get_error_message(err));
save_error(c,name);
return err;
}
@ -655,7 +686,7 @@ static int compare_values(grib_runtime_options* options, grib_handle* handle1, g
if((err = grib_get_size(handle1,name,&len1)) != GRIB_SUCCESS)
{
printInfo(handle1);
printf("Oops... cannot get size of [%s] in 1st field: %s\n",name,grib_get_error_message(err));
printf("Oops... cannot get size of [%s] in %s field: %s\n",name, first_str, grib_get_error_message(err));
save_error(c,name);
return err;
}
@ -665,17 +696,21 @@ static int compare_values(grib_runtime_options* options, grib_handle* handle1, g
if(err == GRIB_NOT_FOUND)
{
printInfo(handle1);
printf("[%s] not found in 2nd field\n",name);
printf("[%s] not found in %s field\n",name,second_str);
save_error(c,name);
return err;
}
printInfo(handle1);
printf("Oops... cannot get size of [%s] in 2nd field: %s\n",name,grib_get_error_message(err));
printf("Oops... cannot get size of [%s] in %s field: %s\n",name, second_str, grib_get_error_message(err));
save_error(c,name);
return err;
}
if (handles_swapped) {
/* Comparing a second time with handles swapped. Do not compare keys common to both handles */
return GRIB_SUCCESS;
}
/* if(len1 != len2 && type1 != GRIB_TYPE_STRING) {
printInfo(handle1);
printf("[%s] has different size: 1st field: %ld, 2nd field: %ld\n",name,(long)len1,(long)len2);
@ -695,18 +730,18 @@ static int compare_values(grib_runtime_options* options, grib_handle* handle1, g
}
if (isMissing1==1) {
if (verbose) printf(" is set to missing in 1st field\n");
if (verbose) printf(" is set to missing in %s field\n", first_str);
printInfo(handle1);
printf("%s is set to missing in 1st field is not missing in 2nd field\n",name);
printf("%s is set to missing in %s field is not missing in %s field\n",name,first_str,second_str);
err1 = GRIB_VALUE_MISMATCH;
save_error(c,name);
return GRIB_VALUE_MISMATCH;
}
if (isMissing2==1) {
if (verbose) printf(" is set to missing in 1st field\n");
if (verbose) printf(" is set to missing in %s field\n", first_str);
printInfo(handle1);
printf("%s is set to missing in 2nd field is not missing in 1st field\n",name);
printf("%s is set to missing in %s field is not missing in %s field\n",name, second_str, first_str);
err1 = GRIB_VALUE_MISMATCH;
save_error(c,name);
return GRIB_VALUE_MISMATCH;
@ -724,16 +759,16 @@ static int compare_values(grib_runtime_options* options, grib_handle* handle1, g
if((err1 = grib_get_string(handle1,name,sval1,&len1)) != GRIB_SUCCESS)
{
printInfo(handle1);
printf("Oops... cannot get string value of [%s] in 1st field: %s\n",
name,grib_get_error_message(err1));
printf("Oops... cannot get string value of [%s] in %s field: %s\n",
name, first_str, grib_get_error_message(err1));
save_error(c,name);
}
if((err2 = grib_get_string(handle2,name,sval2,&len2)) != GRIB_SUCCESS)
{
printInfo(handle1);
printf("Oops... cannot get string value of [%s] in 2nd field: %s\n",
name,grib_get_error_message(err2));
printf("Oops... cannot get string value of [%s] in %s field: %s\n",
name, second_str, grib_get_error_message(err2));
save_error(c,name);
}
@ -777,16 +812,16 @@ static int compare_values(grib_runtime_options* options, grib_handle* handle1, g
if((err1 = grib_get_long_array(handle1,name,lval1,&len1)) != GRIB_SUCCESS)
{
printInfo(handle1);
printf("Oops... cannot get long value of [%s] in 1st field: %s\n",
name,grib_get_error_message(err1));
printf("Oops... cannot get long value of [%s] in %s field: %s\n",
name, first_str, grib_get_error_message(err1));
save_error(c,name);
}
if((err2 = grib_get_long_array(handle2,name,lval2,&len2)) != GRIB_SUCCESS)
{
printInfo(handle1);
printf("Oops... cannot get long value of [%s] in 2nd field: %s\n",
name,grib_get_error_message(err2));
printf("Oops... cannot get long value of [%s] in %s field: %s\n",
name,second_str,grib_get_error_message(err2));
save_error(c,name);
}
@ -869,16 +904,16 @@ static int compare_values(grib_runtime_options* options, grib_handle* handle1, g
if((err1 = grib_get_double_array(handle1,name,dval1,&len1)) != GRIB_SUCCESS)
{
printInfo(handle1);
printf("Oops... cannot get double value of [%s] in 1st field: %s\n",
name,grib_get_error_message(err1));
printf("Oops... cannot get double value of [%s] in %s field: %s\n",
name, first_str, grib_get_error_message(err1));
save_error(c,name);
}
if((err2 = grib_get_double_array(handle2,name,dval2,&len2)) != GRIB_SUCCESS)
{
printInfo(handle1);
printf("Oops... cannot get double value of [%s] in 2nd field: %s\n",
name,grib_get_error_message(err2));
printf("Oops... cannot get double value of [%s] in %s field: %s\n",
name,second_str,grib_get_error_message(err2));
save_error(c,name);
}
@ -987,16 +1022,16 @@ static int compare_values(grib_runtime_options* options, grib_handle* handle1, g
{
printInfo(handle1);
save_error(c,name);
printf("Oops... cannot get bytes value of [%s] in 1st field: %s\n",
name,grib_get_error_message(err1));
printf("Oops... cannot get bytes value of [%s] in %s field: %s\n",
name,first_str,grib_get_error_message(err1));
}
if((err2 = grib_get_bytes(handle2,name,uval2,&len2)) != GRIB_SUCCESS)
{
printInfo(handle1);
save_error(c,name);
printf("Oops... cannot get bytes value of [%s] in 2nd field: %s\n",
name,grib_get_error_message(err2));
printf("Oops... cannot get bytes value of [%s] in %s field: %s\n",
name,second_str,grib_get_error_message(err2));
}
if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS)
@ -1249,7 +1284,6 @@ static int compare_handles(grib_handle* handle1, grib_handle* handle2, grib_runt
}
#endif
if ( listFromCommandLine ) {
for (i=0; i< options->compare_count; i++) {
if (blacklisted(name)) continue;

View File

@ -52,6 +52,15 @@ int error=0;
int count=0;
int lastPrint=0;
int force=0;
/* ECC-651: Boolean 'two_way' set to 1 when '-2' option used */
int two_way=0;
/* Boolean 'handles_swapped' relevant in 'two_way' mode:
* 0 means: h1 is first file, h2 is second file
* 1 means: h1 is second file, h2 is first file
*/
int handles_swapped=0;
double maxAbsoluteError = 1e-19;
int onlyListed=1;
int headerMode=0;
@ -119,6 +128,7 @@ grib_option grib_options[]={
{"r",0,"Compare files in which the messages are not in the same order. This option is time expensive.\n",0,1,0},
{"b:",0,0,0,1,0},
{"e",0,"Edition independent compare. It is used to compare grib edition 1 and 2.\n",0,1,0},
{"2",0,"Enable two-way comparison.\n",0,1,0},
{"c:",0,0,0,1,0},
{"S:","start","First field to be processed.\n",0,1,0},
{"E:","end","Last field to be processed.\n",0,1,0},
@ -183,6 +193,9 @@ int grib_tool_init(grib_runtime_options* options)
if (grib_options_on("f")) force=1;
else force=0;
if (grib_options_on("2")) two_way=1;
else two_way=0;
verbose = grib_options_on("v");
listFromCommandLine=0;
@ -431,7 +444,23 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
if(compare_handles(global_handle,h,options)) {
error++;
if (!force) exit(1);
if (!two_way) {
/* If two_way mode: Don't exit yet. Show further differences */
if (!force) exit(1);
}
}
if (two_way) {
/* ECC-651 and ECC-431 */
handles_swapped = 1;
if(compare_handles(h, global_handle, options)) {
error++;
if (!force) exit(1);
} else {
if (error) {
/* Error from first pass */
if (!force) exit(1);
}
}
}
grib_handle_delete(global_handle);
@ -562,6 +591,8 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
double packingError1=0,packingError2=0;
double value_tolerance=0;
grib_context* c=h1->context;
char* first_str = (handles_swapped==0? "1st" : "2nd");
char* second_str = (handles_swapped==0? "2nd" : "1st");
type1=type;
type2=type;
@ -573,7 +604,7 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
if( type1==GRIB_TYPE_UNDEFINED && (err = grib_get_native_type(h1,name,&type1)) != GRIB_SUCCESS)
{
printInfo(h1);
printf("Oops... cannot get type of [%s] in 1st field: %s\n",name,grib_get_error_message(err));
printf("Oops... cannot get type of [%s] in %s field: %s\n",name,first_str,grib_get_error_message(err));
save_error(c,name);
return err;
}
@ -583,24 +614,22 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
if(err == GRIB_NOT_FOUND)
{
printInfo(h1);
printf("[%s] not found in 2nd field\n",name);
printf("[%s] not found in %s field\n",name,second_str);
save_error(c,name);
return err;
}
printInfo(h1);
printf("Oops... cannot get type of [%s] in 2nd field: %s\n",name,grib_get_error_message(err));
printf("Oops... cannot get type of [%s] in %s field: %s\n",name,second_str,grib_get_error_message(err));
save_error(c,name);
return err;
}
/*
if(type1 != type2)
{
printInfo(h1);
printf("Warning, [%s] has different types: 1st field: [%s], 2nd field: [%s]\n",
name,grib_get_type_name(type1),grib_get_type_name(type2));
return GRIB_TYPE_MISMATCH;
}
/* if(type1 != type2) {
printInfo(h1);
printf("Warning, [%s] has different types: 1st field: [%s], 2nd field: [%s]\n",
name,grib_get_type_name(type1),grib_get_type_name(type2));
return GRIB_TYPE_MISMATCH;
}
*/
if(type1 == GRIB_TYPE_LABEL)
@ -613,7 +642,7 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
if((err = grib_get_size(h1,name,&len1)) != GRIB_SUCCESS)
{
printInfo(h1);
printf("Oops... cannot get size of [%s] in 1st field: %s\n",name,grib_get_error_message(err));
printf("Oops... cannot get size of [%s] in %s field: %s\n",name,first_str,grib_get_error_message(err));
save_error(c,name);
return err;
}
@ -623,25 +652,28 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
if(err == GRIB_NOT_FOUND)
{
printInfo(h1);
printf("[%s] not found in 2nd field\n",name);
printf("[%s] not found in %s field\n",name,second_str);
save_error(c,name);
return err;
}
printInfo(h1);
printf("Oops... cannot get size of [%s] in 2nd field: %s\n",name,grib_get_error_message(err));
printf("Oops... cannot get size of [%s] in %s field: %s\n",name,second_str,grib_get_error_message(err));
save_error(c,name);
return err;
}
/*
if(len1 != len2 && type1 != GRIB_TYPE_STRING)
{
printInfo(h1);
printf("[%s] has different size: 1st field: %ld, 2nd field: %ld\n",name,(long)len1,(long)len2);
save_error(c,name);
return GRIB_COUNT_MISMATCH;
}
if (handles_swapped) {
/* Comparing a second time with handles swapped. Do not compare keys common to both handles */
return GRIB_SUCCESS;
}
/* if(len1 != len2 && type1 != GRIB_TYPE_STRING) {
printInfo(h1);
printf("[%s] has different size: 1st field: %ld, 2nd field: %ld\n",name,(long)len1,(long)len2);
save_error(c,name);
return GRIB_COUNT_MISMATCH;
}
*/
isMissing1= ( (grib_is_missing(h1,name,&err1)==1) && (err1 == 0) ) ? 1 : 0;
@ -653,18 +685,18 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
}
if (isMissing1==1) {
if (verbose) printf(" is set to missing in 1st field\n");
if (verbose) printf(" is set to missing in %s field\n",first_str);
printInfo(h1);
printf("%s is set to missing in 1st field is not missing in 2nd field\n",name);
printf("%s is set to missing in %s field is not missing in %s field\n",name,first_str,second_str);
err1 = GRIB_VALUE_MISMATCH;
save_error(c,name);
return GRIB_VALUE_MISMATCH;
}
if (isMissing2==1) {
if (verbose) printf(" is set to missing in 1st field\n");
if (verbose) printf(" is set to missing in %s field\n",first_str);
printInfo(h1);
printf("%s is set to missing in 2nd field is not missing in 1st field\n",name);
printf("%s is set to missing in %s field is not missing in %s field\n",name,second_str,first_str);
err1 = GRIB_VALUE_MISMATCH;
save_error(c,name);
return GRIB_VALUE_MISMATCH;
@ -682,16 +714,16 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
if((err1 = grib_get_string(h1,name,sval1,&len1)) != GRIB_SUCCESS)
{
printInfo(h1);
printf("Oops... cannot get string value of [%s] in 1st field: %s\n",
name,grib_get_error_message(err1));
printf("Oops... cannot get string value of [%s] in %s field: %s\n",
name,first_str,grib_get_error_message(err1));
save_error(c,name);
}
if((err2 = grib_get_string(h2,name,sval2,&len2)) != GRIB_SUCCESS)
{
printInfo(h1);
printf("Oops... cannot get string value of [%s] in 2nd field: %s\n",
name,grib_get_error_message(err2));
printf("Oops... cannot get string value of [%s] in %s field: %s\n",
name,second_str,grib_get_error_message(err2));
save_error(c,name);
}
@ -724,16 +756,16 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
if((err1 = grib_get_long_array(h1,name,lval1,&len1)) != GRIB_SUCCESS)
{
printInfo(h1);
printf("Oops... cannot get long value of [%s] in 1st field: %s\n",
name,grib_get_error_message(err1));
printf("Oops... cannot get long value of [%s] in %s field: %s\n",
name,first_str,grib_get_error_message(err1));
save_error(c,name);
}
if((err2 = grib_get_long_array(h2,name,lval2,&len2)) != GRIB_SUCCESS)
{
printInfo(h1);
printf("Oops... cannot get long value of [%s] in 2nd field: %s\n",
name,grib_get_error_message(err2));
printf("Oops... cannot get long value of [%s] in %s field: %s\n",
name,second_str,grib_get_error_message(err2));
save_error(c,name);
}
@ -837,16 +869,16 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
if((err1 = grib_get_double_array(h1,name,dval1,&len1)) != GRIB_SUCCESS)
{
printInfo(h1);
printf("Oops... cannot get double value of [%s] in 1st field: %s\n",
name,grib_get_error_message(err1));
printf("Oops... cannot get double value of [%s] in %s field: %s\n",
name,first_str,grib_get_error_message(err1));
save_error(c,name);
}
if((err2 = grib_get_double_array(h2,name,dval2,&len2)) != GRIB_SUCCESS)
{
printInfo(h1);
printf("Oops... cannot get double value of [%s] in 2nd field: %s\n",
name,grib_get_error_message(err2));
printf("Oops... cannot get double value of [%s] in %s field: %s\n",
name,second_str,grib_get_error_message(err2));
save_error(c,name);
}
@ -945,16 +977,16 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
{
printInfo(h1);
save_error(c,name);
printf("Oops... cannot get bytes value of [%s] in 1st field: %s\n",
name,grib_get_error_message(err1));
printf("Oops... cannot get bytes value of [%s] in %s field: %s\n",
name,first_str,grib_get_error_message(err1));
}
if((err2 = grib_get_bytes(h2,name,uval2,&len2)) != GRIB_SUCCESS)
{
printInfo(h1);
save_error(c,name);
printf("Oops... cannot get bytes value of [%s] in 2nd field: %s\n",
name,grib_get_error_message(err2));
printf("Oops... cannot get bytes value of [%s] in %s field: %s\n",
name,second_str,grib_get_error_message(err2));
}
if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS)