ECC-1819: GRIB: Keys iScansPositively and jScansNegatively should be read-only

This commit is contained in:
shahramn 2024-05-04 14:33:13 +01:00
parent e152763d7c
commit 599fbbf375
6 changed files with 44 additions and 14 deletions

View File

@ -9,8 +9,8 @@ flagbit jScansPositively(scanningMode,6) : dump;
flagbit jPointsAreConsecutive(scanningMode,5) : dump;
constant alternativeRowScanning=0 : dump;
transient iScansPositively = !iScansNegatively : constraint;
transient jScansNegatively = !jScansPositively : constraint;
transient iScansPositively = !iScansNegatively : constraint, read_only;
transient jScansNegatively = !jScansPositively : constraint, read_only;
alias geography.iScansNegatively=iScansNegatively;
alias geography.jScansPositively=jScansPositively;

View File

@ -32,8 +32,8 @@ alias geography.orderingConvention = orderingConvention;
flags[1] scanningMode 'grib2/tables/[tablesVersion]/3.13.table';
flagbit iScansNegatively(scanningMode,7) : dump; # WMO bit 1
flagbit jScansPositively(scanningMode,6) : dump; # WMO bit 2
transient iScansPositively = !iScansNegatively : constraint;
transient jScansNegatively = !jScansPositively : constraint;
transient iScansPositively = !iScansNegatively : constraint, read_only;
transient jScansNegatively = !jScansPositively : constraint, read_only;
iterator healpix(numberOfPoints,missingValue,values,Nside,orderingConvention);
nearest healpix(values,radius,Nx,Ny);

View File

@ -20,8 +20,8 @@ alias geography.iScansNegatively=iScansNegatively;
alias geography.jScansPositively=jScansPositively;
alias geography.jPointsAreConsecutive=jPointsAreConsecutive;
transient iScansPositively = !iScansNegatively : constraint;
transient jScansNegatively = !jScansPositively : constraint;
transient iScansPositively = !iScansNegatively : constraint, read_only;
transient jScansNegatively = !jScansPositively : constraint, read_only;
flagbit scanningMode5(scanningMode,3) = 0: read_only;
flagbit scanningMode6(scanningMode,2) = 0: read_only;

View File

@ -20,7 +20,7 @@ alias geography.iScansNegatively=iScansNegatively;
alias geography.jScansPositively=jScansPositively;
alias geography.jPointsAreConsecutive=jPointsAreConsecutive;
transient iScansPositively = !iScansNegatively : constraint;
transient iScansPositively = !iScansNegatively : constraint, read_only;
flagbit scanningMode5(scanningMode,3) = 0: read_only;
flagbit scanningMode6(scanningMode,2) = 0: read_only;

View File

@ -112,7 +112,9 @@ int grib_pack_float(grib_accessor* a, const float* v, size_t* len)
int grib_pack_expression(grib_accessor* a, grib_expression* e)
{
grib_accessor_class* c = a->cclass;
//grib_context_log(a->context, GRIB_LOG_DEBUG, "(%s)%s is packing (double) %g",(a->parent->owner)?(a->parent->owner->name):"root", a->name ,v?(*v):0);
// grib_context_log(a->context, GRIB_LOG_INFO, "....(%s)%s is packing",
// (a->parent->owner)?(a->parent->owner->name):"root",
// a->name);
while (c) {
if (c->pack_expression) {
return c->pack_expression(a, e);

View File

@ -11,6 +11,12 @@
. ./include.ctest.sh
label="grib_change_scanning_test"
tempFilt=temp.$label.filt
tempGribA=temp.$label.A.grib
tempGribB=temp.$label.B.grib
tempText=temp.$label.txt
tempRef=temp.$label.ref
editions="1 2"
gridTypes="regular_ll rotated_ll"
@ -77,12 +83,6 @@ done
# alternativeRowScanning
# -----------------------
tempFilt=temp.$label.filt
tempGribA=temp.$label.A.grib
tempGribB=temp.$label.B.grib
tempText=temp.$label.txt
tempRef=temp.$label.ref
cat > $tempFilt <<EOF
set Nj = 2;
set latitudeOfFirstGridPointInDegrees = 60;
@ -141,6 +141,34 @@ ${tools_dir}/grib_set -s swapScanningX:s=1 $ECCODES_SAMPLES_PATH/GRIB2.tmpl $tem
${tools_dir}/grib_set -s swapScanningX:i=1 $ECCODES_SAMPLES_PATH/GRIB2.tmpl $tempGribB 2>/dev/null
cmp $tempGribA $tempGribB
# Check constraint keys follow (observe) their expressions
# --------------------------------------------------------
cat > $tempFilt <<EOF
set iScansNegatively = 1; # Change from 0 to 1
assert (0 == iScansPositively); # should change too
set jScansPositively = 1; # Same for j
assert (0 == jScansNegatively);
EOF
grib_check_key_equals $file 'iScansNegatively,jScansPositively' '0 0'
grib_check_key_equals $file 'iScansPositively,jScansNegatively' '1 1'
${tools_dir}/grib_filter $tempFilt $ECCODES_SAMPLES_PATH/GRIB1.tmpl
${tools_dir}/grib_filter $tempFilt $ECCODES_SAMPLES_PATH/GRIB2.tmpl
# ECC-1819: Keys iScansPositively and jScansNegatively should be read-only
for s in GRIB1.tmpl GRIB2.tmpl; do
for k in iScansPositively jScansNegatively; do
set +e
${tools_dir}/grib_set -s $k=0 $ECCODES_SAMPLES_PATH/$s $tempGribA 2>$tempText
status=$?
set -e
[ $status -ne 0 ]
grep -q "Value is read only" $tempText
rm $tempText
done
done
# Clean up
rm -f $tempFilt $tempGribA $tempGribB $tempRef $tempText
rm -f ${data_dir}/scan1.grib ${data_dir}/scan.grib