| 191 | // --------------------------------------------------------------------------- |
| 192 | |
| 193 | TEST_F(CApi, proj_create) { |
| 194 | proj_destroy(nullptr); |
| 195 | EXPECT_EQ(proj_create(m_ctxt, "invalid"), nullptr); |
| 196 | { |
| 197 | auto obj = |
| 198 | proj_create(m_ctxt, GeographicCRS::EPSG_4326 |
| 199 | ->exportToWKT(WKTFormatter::create().get()) |
| 200 | .c_str()); |
| 201 | ObjectKeeper keeper(obj); |
| 202 | EXPECT_NE(obj, nullptr); |
| 203 | |
| 204 | // Check that functions that operate on 'non-C++' PJ don't crash |
| 205 | constexpr double DEG_TO_RAD = .017453292519943296; |
| 206 | PJ_COORD coord1; |
| 207 | coord1.xyzt.x = 2 * DEG_TO_RAD; |
| 208 | coord1.xyzt.y = 49 * DEG_TO_RAD; |
| 209 | coord1.xyzt.z = 0; |
| 210 | coord1.xyzt.t = 0; |
| 211 | PJ_COORD coord2; |
| 212 | coord2.xyzt.x = 2 * DEG_TO_RAD; |
| 213 | coord2.xyzt.y = 50 * DEG_TO_RAD; |
| 214 | coord2.xyzt.z = 0; |
| 215 | coord2.xyzt.t = 0; |
| 216 | EXPECT_EQ(proj_trans(obj, PJ_FWD, coord1).xyzt.x, |
| 217 | std::numeric_limits<double>::infinity()); |
| 218 | |
| 219 | // and those ones actually work just fine |
| 220 | PJ_XYZT geod = proj_geod(obj, coord1, coord2).xyzt; |
| 221 | EXPECT_NEAR(geod.x, 111219.409, 1e-3); |
| 222 | EXPECT_NEAR(geod.y, 0, 1e-3); |
| 223 | |
| 224 | // also test that direct geodesic problem returns original results |
| 225 | PJ_XYZT coord3 = proj_geod_direct(obj, coord1, geod.y, geod.x).xyzt; |
| 226 | EXPECT_NEAR(coord3.x, coord2.xyzt.x, 1e-3); |
| 227 | EXPECT_NEAR(coord3.y, coord2.xyzt.y, 1e-3); |
| 228 | |
| 229 | // Test distance |
| 230 | EXPECT_NEAR(proj_lp_dist(obj, coord1, coord2), 111219.409, 1e-3); |
| 231 | |
| 232 | auto info = proj_pj_info(obj); |
| 233 | EXPECT_EQ(info.id, nullptr); |
| 234 | ASSERT_NE(info.description, nullptr); |
| 235 | EXPECT_EQ(info.description, std::string("WGS 84")); |
| 236 | ASSERT_NE(info.definition, nullptr); |
| 237 | EXPECT_EQ(info.definition, std::string("")); |
| 238 | } |
| 239 | { |
| 240 | auto obj = proj_create(m_ctxt, "EPSG:4326"); |
| 241 | ObjectKeeper keeper(obj); |
| 242 | EXPECT_NE(obj, nullptr); |
| 243 | } |
| 244 | |
| 245 | { |
| 246 | PJ_CONTEXT *ctxt = proj_context_create(); |
| 247 | std::string s; |
| 248 | proj_log_func(ctxt, &s, [](void *user_data, int, const char *msg) { |
| 249 | *static_cast<std::string *>(user_data) = msg; |
| 250 | }); |
nothing calls this directly
no test coverage detected