diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b2463211d87d9c634b74586a174d158c26c685ed..749de241774e1c2600a42565e1b9a893f1363485 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.10) # Link runCSMCameraModelTests with what we want to test and the GTest and pthread library -add_executable(runCSMCameraModelTests TestyMcTestFace.cpp) +add_executable(runCSMCameraModelTests TestyMcTestFace.cpp FrameCameraTests.cpp) target_link_libraries(runCSMCameraModelTests usgscsm ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} pthread) gtest_discover_tests(runCSMCameraModelTests WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/tests) diff --git a/tests/FrameCameraTests.cpp b/tests/FrameCameraTests.cpp new file mode 100644 index 0000000000000000000000000000000000000000..22e63ca9bf1db107684b9ee9c065e5c42883a8bb --- /dev/null +++ b/tests/FrameCameraTests.cpp @@ -0,0 +1,77 @@ +#include "UsgsAstroFramePlugin.h" +#include "UsgsAstroFrameSensorModel.h" + +#include <json.hpp> + +#include <sstream> +#include <fstream> + +#include <gtest/gtest.h> + +using json = nlohmann::json; + +class FrameSensorModel : public ::testing::Test { + protected: + + UsgsAstroFrameSensorModel *sensorModel; + + void SetUp() override { + sensorModel = NULL; + std::ifstream isdFile("data/simpleFramerISD.json"); + json jsonIsd = json::parse(isdFile); + csm::Isd isd; + for (json::iterator it = jsonIsd.begin(); it != jsonIsd.end(); ++it) { + json jsonValue = it.value(); + if (jsonValue.size() > 1) { + for (int i = 0; i < jsonValue.size(); i++) { + isd.addParam(it.key(), jsonValue[i].dump()); + } + } + else { + isd.addParam(it.key(), jsonValue.dump()); + } + } + isdFile.close(); + + UsgsAstroFramePlugin frameCameraPlugin; + + csm::Model *model = frameCameraPlugin.constructModelFromISD( + isd, + "USGS_ASTRO_FRAME_SENSOR_MODEL"); + + sensorModel = dynamic_cast<UsgsAstroFrameSensorModel *>(model); + + ASSERT_NE(sensorModel, nullptr); + } + + void TearDown() override { + if (sensorModel) { + delete sensorModel; + sensorModel = NULL; + } + } +}; + +TEST_F(FrameSensorModel, Center) { + csm::ImageCoord imagePt(7.0, 7.0); + csm::EcefCoord groundPt = sensorModel->imageToGround(imagePt, 0.0); + EXPECT_NEAR(groundPt.x, 10.0, 1e-8); + EXPECT_NEAR(groundPt.y, 0, 1e-8); + EXPECT_NEAR(groundPt.z, 0, 1e-8); +} + +TEST_F(FrameSensorModel, OffBody) { + csm::ImageCoord imagePt(14.5, -0.5); + csm::EcefCoord groundPt = sensorModel->imageToGround(imagePt, 0.0); + EXPECT_NEAR(groundPt.x, 0.44979759, 1e-8); + EXPECT_NEAR(groundPt.y, -14.99325304, 1e-8); + EXPECT_NEAR(groundPt.z, 14.99325304, 1e-8); +} + +TEST_F(FrameSensorModel, SlightlyOffCenter) { + csm::ImageCoord imagePt(7.0, 6.0); + csm::EcefCoord groundPt = sensorModel->imageToGround(imagePt, 0.0); + EXPECT_NEAR(groundPt.x, 9.80194018, 1e-8); + EXPECT_NEAR(groundPt.y, 0, 1e-8); + EXPECT_NEAR(groundPt.z, 1.98039612, 1e-8); +} \ No newline at end of file diff --git a/tests/TestMain.cpp b/tests/TestMain.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b297051461d82f3172ca97d3d48d0003f0296918 --- /dev/null +++ b/tests/TestMain.cpp @@ -0,0 +1,6 @@ +#include "gtest/gtest.h" +int main(int argc, char **argv) +{ + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} \ No newline at end of file diff --git a/tests/data/simpleFramerISD.json b/tests/data/simpleFramerISD.json index f05e5df1ce7ba253d979f4ede0ed596659825c21..e44f64797b293025dff5828e7bcc11f578d323c0 100644 --- a/tests/data/simpleFramerISD.json +++ b/tests/data/simpleFramerISD.json @@ -12,7 +12,7 @@ "focal_length": 50, "focal_length_epsilon": 1.0, "ifov": 6.0, - "model_name": "UsgsAstroFramePluginCSM", + "model_name": "USGS_ASTRO_FRAME_SENSOR_MODEL", "spacecraft_name": "TEST_CRAFT", "instrument_id": "TEST_SENSOR", "target_name": "TEST_BALL", @@ -46,8 +46,8 @@ "omega": 0, "phi": -1.5707963267948966, "kappa": 3.141592653589793, - "semi_major_axis": 10, - "semi_minor_axis": 10, + "semi_major_axis":0.01, + "semi_minor_axis":0.01, "transx": [ 0.0, 0.1,