aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorBrendan Jurd <brendan.jurd@geoplex.com.au>2022-03-11 11:51:38 +1100
committerBrendan Jurd <brendan.jurd@geoplex.com.au>2022-03-11 14:33:34 +1100
commit57b7891e75cc5b069954e4545a71c7f78697852e (patch)
tree46e534a3b7ffab9f878289a327fae77d01eca812 /test
parent6d00538de1a1d7da04619fdebfcbd5a16ba07a9f (diff)
downloadPROJ-57b7891e75cc5b069954e4545a71c7f78697852e.tar.gz
PROJ-57b7891e75cc5b069954e4545a71c7f78697852e.zip
unitconvert: round to nearest date when converting to yyyymmdd.
This resolves an issue where converting from a low-precision decimalyear to yyyymmdd gave the wrong result, due to mjd_to_yyyymmdd() truncating away the fractional time component. This commit changes the behaviour of mjd_to_yyyymmdd() to round to the nearest date, instead of truncating. Refs #1483
Diffstat (limited to 'test')
-rw-r--r--test/unit/gie_self_tests.cpp31
1 files changed, 30 insertions, 1 deletions
diff --git a/test/unit/gie_self_tests.cpp b/test/unit/gie_self_tests.cpp
index 71df8fe1..5c14d747 100644
--- a/test/unit/gie_self_tests.cpp
+++ b/test/unit/gie_self_tests.cpp
@@ -618,7 +618,6 @@ static void test_time(const char *args, double tol, double t_in, double t_exp) {
// ---------------------------------------------------------------------------
TEST(gie, unitconvert_selftest) {
-
char args1[] = "+proj=unitconvert +t_in=decimalyear +t_out=decimalyear";
double in1 = 2004.25;
@@ -641,6 +640,36 @@ TEST(gie, unitconvert_selftest) {
test_time(args5, 1e-6, in5, in5);
}
+static void test_date(const char *args, double tol, double t_in, double t_exp) {
+ PJ_COORD in, out;
+ PJ *P = proj_create(PJ_DEFAULT_CTX, args);
+
+ ASSERT_TRUE(P != 0);
+
+ in = proj_coord(0.0, 0.0, 0.0, t_in);
+
+ out = proj_trans(P, PJ_FWD, in);
+ EXPECT_NEAR(out.xyzt.t, t_exp, tol);
+
+ proj_destroy(P);
+
+ proj_log_level(NULL, PJ_LOG_NONE);
+}
+
+TEST(gie, unitconvert_selftest_date) {
+ char args[] = "+proj=unitconvert +t_in=decimalyear +t_out=yyyymmdd";
+ test_date(args, 1e-6, 2022.0027, 20220102);
+ test_date(args, 1e-6, 1990.0, 19900101);
+ test_date(args, 1e-6, 2004.1612, 20040229);
+ test_date(args, 1e-6, 1899.999, 19000101);
+
+ strcpy(&args[18], "+t_in=yyyymmdd +t_out=decimalyear");
+ test_date(args, 1e-6, 20220102, 2022.0027397);
+ test_date(args, 1e-6, 19900101, 1990.0);
+ test_date(args, 1e-6, 20040229, 2004.1612022);
+ test_date(args, 1e-6, 18991231, 1899.9972603);
+}
+
static const char tc32_utm32[] = {
" +proj=horner"
" +ellps=intl"