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..394251f344906c3d90cfe01265cf5d428a00002d --- /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.5, 7.5); + csm::EcefCoord groundPt = sensorModel->imageToGround(imagePt, 0.0); + EXPECT_DOUBLE_EQ(groundPt.x, 10.0); + EXPECT_DOUBLE_EQ(groundPt.y, 0); + EXPECT_DOUBLE_EQ(groundPt.z, 0); +} + +TEST_F(FrameSensorModel, OffBody) { + csm::ImageCoord imagePt(0.0, 15.0); + csm::EcefCoord groundPt = sensorModel->imageToGround(imagePt, 0.0); + EXPECT_DOUBLE_EQ(groundPt.x, 0.44979759); + EXPECT_DOUBLE_EQ(groundPt.y, -14.99325304); + EXPECT_DOUBLE_EQ(groundPt.z, 14.99325304); +} + +TEST_F(FrameSensorModel, SlightlyOffCenter) { + csm::ImageCoord imagePt(6.5, 7.5); + csm::EcefCoord groundPt = sensorModel->imageToGround(imagePt, 0.0); + EXPECT_DOUBLE_EQ(groundPt.x, 9.80194018); + EXPECT_DOUBLE_EQ(groundPt.y, 0); + EXPECT_DOUBLE_EQ(groundPt.z, 1.98039612); +} \ 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..206dda3b312f890ed8db3ad7ef261a142234d131 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",