aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/PJ_molodensky.c25
-rw-r--r--test/gie/more_builtins.gie23
2 files changed, 41 insertions, 7 deletions
diff --git a/src/PJ_molodensky.c b/src/PJ_molodensky.c
index 2db51038..dbc83768 100644
--- a/src/PJ_molodensky.c
+++ b/src/PJ_molodensky.c
@@ -272,6 +272,7 @@ static PJ_COORD reverse_4d(PJ_COORD obs, PJ *P) {
PJ *TRANSFORMATION(molodensky,1) {
+ int count_required_params = 0;
struct pj_opaque_molodensky *Q = pj_calloc(1, sizeof(struct pj_opaque_molodensky));
if (0==Q)
return pj_default_destructor(P, ENOMEM);
@@ -288,28 +289,38 @@ PJ *TRANSFORMATION(molodensky,1) {
P->right = PJ_IO_UNITS_ANGULAR;
/* read args */
- if (pj_param(P->ctx, P->params, "tdx").i)
+ if (pj_param(P->ctx, P->params, "tdx").i) {
+ count_required_params ++;
Q->dx = pj_param(P->ctx, P->params, "ddx").f;
+ }
- if (pj_param(P->ctx, P->params, "tdy").i)
+ if (pj_param(P->ctx, P->params, "tdy").i) {
+ count_required_params ++;
Q->dy = pj_param(P->ctx, P->params, "ddy").f;
+ }
- if (pj_param(P->ctx, P->params, "tdz").i)
+ if (pj_param(P->ctx, P->params, "tdz").i) {
+ count_required_params ++;
Q->dz = pj_param(P->ctx, P->params, "ddz").f;
+ }
- if (pj_param(P->ctx, P->params, "tda").i)
+ if (pj_param(P->ctx, P->params, "tda").i) {
+ count_required_params ++;
Q->da = pj_param(P->ctx, P->params, "dda").f;
+ }
- if (pj_param(P->ctx, P->params, "tdf").i)
+ if (pj_param(P->ctx, P->params, "tdf").i) {
+ count_required_params ++;
Q->df = pj_param(P->ctx, P->params, "ddf").f;
+ }
Q->abridged = pj_param(P->ctx, P->params, "tabridged").i;
/* We want all parameters (except +abridged) to be set */
- if ((Q->dx == 0) && (Q->dy == 0) && (Q->dz == 0) && (Q->da == 0) && (Q->df == 0))
+ if (count_required_params == 0)
return pj_default_destructor(P, PJD_ERR_NO_ARGS);
- if ((Q->dx == 0) || (Q->dy == 0) || (Q->dz == 0) || (Q->da == 0) || (Q->df == 0))
+ if (count_required_params != 5)
return pj_default_destructor(P, PJD_ERR_MISSING_ARGS);
return P;
diff --git a/test/gie/more_builtins.gie b/test/gie/more_builtins.gie
index 63464998..276b1fef 100644
--- a/test/gie/more_builtins.gie
+++ b/test/gie/more_builtins.gie
@@ -57,6 +57,29 @@ expect 144.968 -37.79848 46.378 0
roundtrip 100 1 m
-------------------------------------------------------------------------------
+-------------------------------------------------------------------------------
+Molodensky with all 0 parameters
+-------------------------------------------------------------------------------
+operation proj=molodensky a=6378160 rf=298.25
+ da=0 df=0 dx=0 dy=0 dz=0
+-------------------------------------------------------------------------------
+tolerance 1 mm
+
+accept 144.9667 -37.8 50 0
+expect 144.9667 -37.8 50 0
+
+roundtrip 1
+-------------------------------------------------------------------------------
+-------------------------------------------------------------------------------
+Test error cases of molodensky
+-------------------------------------------------------------------------------
+# No arguments
+operation proj=molodensky a=6378160 rf=298.25
+expect failure errno no_args
+
+# Missing arguments
+operation proj=molodensky a=6378160 rf=298.25 dx=0
+expect failure errno missing_arg
-------------------------------------------------------------------------------