diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 32c20a5a5..3edb8ee1e 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -32,6 +32,7 @@ list(APPEND test_c_bins gauss_sub grib_nearest_test grib_util_set_spec + grib_util_set_spec2 grib_check_param_concepts grib_local_MeteoFrance grib_2nd_order_numValues @@ -356,6 +357,7 @@ if( HAVE_BUILD_TOOLS ) endif() if( ENABLE_EXTRA_TESTS ) list(APPEND tests_extra grib_util_set_spec) + list(APPEND tests_extra grib_util_set_spec2) list(APPEND tests_extra grib_padding) list(APPEND tests_extra grib_tigge_conversions1) list(APPEND tests_extra grib_tigge_conversions2) diff --git a/tests/grib_util_set_spec2.cc b/tests/grib_util_set_spec2.cc new file mode 100644 index 000000000..00f2111e3 --- /dev/null +++ b/tests/grib_util_set_spec2.cc @@ -0,0 +1,210 @@ +/* + * (C) Copyright 2005- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * 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" + +static void dump_it(grib_handle* h) +{ + int dump_flags = GRIB_DUMP_FLAG_CODED | GRIB_DUMP_FLAG_OCTET | GRIB_DUMP_FLAG_VALUES | GRIB_DUMP_FLAG_READ_ONLY; + grib_dump_content(h, stdout, "wmo", dump_flags, NULL); +} + +// Lambert conformal +static void test0() +{ + int err = 0; + grib_handle* finalh = 0; + grib_util_grid_spec spec = {0,}; + grib_util_packing_spec packing_spec = {0,}; + double values[4] = {1.1, 2.2, 3.3, 0.4}; + int set_spec_flags = 0; + size_t outlen = 4; + + grib_handle* handle = grib_handle_new_from_samples(0, "GRIB2"); + grib_set_long(handle, "tablesVersion", 32); + spec.grid_type = GRIB_UTIL_GRID_SPEC_LAMBERT_CONFORMAL; + spec.N = 2; + + // packing_spec.packing_type = GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE; + // packing_spec.bitsPerValue = 16; + // packing_spec.accuracy = GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES; + // packing_spec.packing = GRIB_UTIL_PACKING_USE_PROVIDED; + + finalh = grib_util_set_spec( + handle, &spec, &packing_spec, set_spec_flags, + values, outlen, &err); + Assert(finalh); + Assert(err == 0); + dump_it(finalh); +} + +// Lambert azimuthal +static void test1() +{ + int err = 0; + grib_handle* finalh = 0; + grib_util_grid_spec spec = {0,}; + grib_util_packing_spec packing_spec = {0,}; + double values[4] = {1.1, 2.2, 3.3, 0.4}; + int set_spec_flags = 0; + size_t outlen = 4; + + grib_handle* handle = grib_handle_new_from_samples(0, "GRIB2"); + grib_set_long(handle, "tablesVersion", 32); + spec.grid_type = GRIB_UTIL_GRID_SPEC_LAMBERT_AZIMUTHAL_EQUAL_AREA; + + finalh = grib_util_set_spec( + handle, &spec, &packing_spec, set_spec_flags, + values, outlen, &err); + Assert(finalh); + Assert(err == 0); + dump_it(finalh); +} + +// HEALPix +static void test2() +{ + int err = 0; + grib_handle* finalh = 0; + grib_util_grid_spec spec = {0,}; + grib_util_packing_spec packing_spec = {0,}; + double values[4] = {1.1, 2.2, 3.3, 0.4}; + int set_spec_flags = 0; + size_t outlen = 0; + + grib_handle* handle = grib_handle_new_from_samples(0, "GRIB2"); + grib_set_long(handle, "tablesVersion", 32); + spec.grid_type = GRIB_UTIL_GRID_SPEC_HEALPIX; + spec.N = 2; + outlen = 4; + + packing_spec.packing_type = GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE; + packing_spec.bitsPerValue = 16; + packing_spec.accuracy = GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES; + packing_spec.packing = GRIB_UTIL_PACKING_USE_PROVIDED; + + finalh = grib_util_set_spec( + handle, &spec, &packing_spec, set_spec_flags, + values, outlen, &err); + Assert(finalh); + Assert(err == 0); + dump_it(finalh); +} + +// Spherical harmonics +static void test3() +{ + int err = 0; + grib_handle* finalh = 0; + grib_util_grid_spec spec = {0,}; + grib_util_packing_spec packing_spec = {0,}; + double values[4] = {1.1, 2.2}; + int set_spec_flags = 0; + size_t outlen = 0; + + grib_handle* handle = grib_handle_new_from_samples(0, "sh_pl_grib2"); + grib_set_long(handle, "tablesVersion", 32); + spec.grid_type = GRIB_UTIL_GRID_SPEC_SH; + spec.truncation = 20; + outlen = 2; + + packing_spec.packing_type = GRIB_UTIL_PACKING_TYPE_SPECTRAL_SIMPLE; + packing_spec.bitsPerValue = 16; + packing_spec.accuracy = GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES; + packing_spec.packing = GRIB_UTIL_PACKING_USE_PROVIDED; + + finalh = grib_util_set_spec( + handle, &spec, &packing_spec, set_spec_flags, + values, outlen, &err); + Assert(finalh); + Assert(err == 0); + dump_it(finalh); +} + +// Polar stereo +static void test4() +{ + int err = 0; + grib_handle* finalh = 0; + grib_util_grid_spec spec = {0,}; + grib_util_packing_spec packing_spec = {0,}; + double values[4] = {1.1, 2.2, 3.3, 0.4}; + int set_spec_flags = 0; + size_t outlen = 0; + + grib_handle* handle = grib_handle_new_from_samples(0, "GRIB2"); + grib_set_long(handle, "tablesVersion", 32); + spec.grid_type = GRIB_UTIL_GRID_SPEC_POLAR_STEREOGRAPHIC; + outlen = 4; + + finalh = grib_util_set_spec( + handle, &spec, &packing_spec, set_spec_flags, + values, outlen, &err); + Assert(finalh); + Assert(err == 0); + dump_it(finalh); +} + +int main() +{ + test0(); + test1(); + test2(); + test3(); + test4(); + return 0; +} + +#if 0 +int main(int argc, char* argv[]) +{ + int i = 0, remove_local_def = 0; + int edition = 0; + char* packingType = NULL; + const char* prog = argv[0]; + char* infile_name = NULL; + char* outfile_name = NULL; + + if (argc == 1 || argc > 8) usage(prog); + + for (i = 1; i < argc; i++) { + if (strcmp(argv[i], "-p") == 0) { + packingType = argv[i + 1]; + ++i; + } + else if (strcmp(argv[i], "-e") == 0) { + edition = atoi(argv[i + 1]); + ++i; + } + else if (strcmp(argv[i], "-r") == 0) { + remove_local_def = 1; + } + else { + /* Expect 2 filenames */ + infile_name = argv[i]; + outfile_name = argv[i + 1]; + break; + } + } +#if 0 + printf("DEBUG remove_local_def = %d\n", remove_local_def); + printf("DEBUG edition = %d\n", edition); + printf("DEBUG packingType = %s\n", packingType); + printf("DEBUG infile_name = %s\n", infile_name); + printf("DEBUG outfile_name = %s\n", outfile_name); +#endif + 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_grid_complex_spatial_differencing(remove_local_def, edition, packingType, infile_name, outfile_name);*/ + + return 0; +} +#endif diff --git a/tests/grib_util_set_spec2.sh b/tests/grib_util_set_spec2.sh new file mode 100755 index 000000000..6dd54373a --- /dev/null +++ b/tests/grib_util_set_spec2.sh @@ -0,0 +1,18 @@ +#!/bin/sh +# (C) Copyright 2005- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# 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.ctest.sh + +grib_util_set_spec=${test_dir}/grib_util_set_spec2 +$EXEC $grib_util_set_spec + + +### Clean up +