Loading isis/tests/Fixtures.cpp +43 −27 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ #include "FileName.h" #include "Blob.h" #include "Brick.h" #include "csminit.h" #include "Fixtures.h" #include "Portal.h" Loading Loading @@ -1107,39 +1108,54 @@ namespace Isis { testCube->setDimensions(22900, 22900, 1); testCube->create(tempDir.path() + "/large.cub"); LineManager line(*testCube); double pixelValue = 0.0; for(line.begin(); !line.end(); line++) { for(int i = 0; i < line.size(); i++) { line[i] = pixelValue; } // Reseau centers as {sample, line} pairs reseaus = {{200, 200}, {400, 400}, {600, 600}}; reseauSize = 103; int reseauValue = 100; pixelValue++; testCube->write(line); Brick brick(reseauSize,reseauSize,1,testCube->pixelType()); for (size_t res=0; res<reseaus.size(); res++) { int baseSamp = (int)(reseaus[res].first+0.5) - (reseauSize/2); int baseLine = (int)(reseaus[res].second+0.5) - (reseauSize/2); brick.SetBasePosition(baseSamp,baseLine,1); testCube->read(brick); // Fill the surrounding area with a base number for (int i = 0; i < reseauSize; i++) { for (int j = 0; j < reseauSize; j++) { brick[reseauSize*i + j] = res; } } PvlGroup reseaus("Reseaus"); PvlKeyword samples = PvlKeyword("Sample", "200"); samples += "400"; samples += "600"; // Create reseau for (int i = 0; i < reseauSize; i++) { for (int j = -2; j < 3; j++) { // Vertical line brick[reseauSize * i + reseauSize/2 + j] = reseauValue; PvlKeyword lines = PvlKeyword("Line", "200"); lines += "400"; lines += "600"; // Horizontal line brick[reseauSize * (reseauSize/2 + j) + i] = reseauValue; } } testCube->write(brick); } PvlGroup reseausGroup("Reseaus"); PvlKeyword samples = PvlKeyword("Sample", QString::number(reseaus[0].first)); PvlKeyword lines = PvlKeyword("Line", QString::number(reseaus[0].second)); PvlKeyword types = PvlKeyword("Type", "5"); types += "5"; types += "5"; PvlKeyword valid = PvlKeyword("Valid", "1"); for (size_t i = 1; i < reseaus.size(); i++) { samples += QString::number(reseaus[i].first); lines += QString::number(reseaus[i].second); types += "5"; valid += "1"; valid += "1"; } reseaus += lines; reseaus += samples; reseaus += types; reseaus += valid; reseaus += PvlKeyword("Status", "Nominal"); reseausGroup += lines; reseausGroup += samples; reseausGroup += types; reseausGroup += valid; reseausGroup += PvlKeyword("Status", "Nominal"); std::istringstream instStr (R"( Group = Instrument Loading @@ -1154,7 +1170,7 @@ namespace Isis { instStr >> instGroup; Pvl *lab = testCube->label(); lab->findObject("IsisCube").addGroup(reseaus); lab->findObject("IsisCube").addGroup(reseausGroup); lab->findObject("IsisCube").addGroup(instGroup); testCube->reopen("r"); Loading isis/tests/Fixtures.h +3 −0 Original line number Diff line number Diff line Loading @@ -256,6 +256,9 @@ namespace Isis { class ApolloCube : public LargeCube { protected: std::vector<std::pair<int, int>> reseaus; int reseauSize; void SetUp() override; }; Loading isis/tests/FunctionalTestsApollocal.cpp +16 −7 Original line number Diff line number Diff line #include "Brick.h" #include "Fixtures.h" #include "Pvl.h" #include "PvlGroup.h" #include "TestUtilities.h" #include "Histogram.h" #include "Statistics.h" #include "apollocal.h" Loading @@ -29,10 +30,18 @@ TEST_F(ApolloCube, FunctionalTestApollocalDefault) { Cube oCube(outCubeFileName, "r"); std::unique_ptr<Histogram> oCubeStats(oCube.histogram()); EXPECT_NEAR(oCubeStats->Average(), -124.188, 0.001); EXPECT_NEAR(oCubeStats->Sum(), -65125546242.836, 0.001); EXPECT_NEAR(oCubeStats->ValidPixels(), 524410000, 0.001); EXPECT_NEAR(oCubeStats->StandardDeviation(), 1056.736, 0.001); // Check a region with both Null and non-Null data Brick brick(reseauSize + 10,reseauSize + 10,1,oCube.pixelType()); int baseSamp = (int)(reseaus[0].first+0.5) - (reseauSize/2); int baseLine = (int)(reseaus[0].second+0.5) - (reseauSize/2); brick.SetBasePosition(baseSamp,baseLine,1); oCube.read(brick); Statistics reseauStats; reseauStats.AddData(&brick[0], brick.size()); EXPECT_NEAR(reseauStats.Average(), -2864.497, 0.001); EXPECT_NEAR(reseauStats.Sum(), -30389453.463, 0.001); EXPECT_EQ(reseauStats.ValidPixels(), 10609); EXPECT_EQ(reseauStats.NullPixels(), 2160); EXPECT_NEAR(reseauStats.StandardDeviation(), 21.534, 0.001); } isis/tests/FunctionalTestsApolloremrx.cpp +55 −11 Original line number Diff line number Diff line Loading @@ -19,7 +19,8 @@ TEST_F(ApolloCube, FunctionalTestApolloremrxDefault) { QTemporaryDir prefix; QString outCubeFileName = prefix.path()+"/outTEMP.cub"; QVector<QString> args = {"to=" + outCubeFileName, "action=null"}; QVector<QString> args = {"to=" + outCubeFileName, "action=null"}; UserInterface options(APP_XML, args); try { Loading @@ -32,30 +33,73 @@ TEST_F(ApolloCube, FunctionalTestApolloremrxDefault) { Cube cube(outCubeFileName); Pvl *isisLabel = cube.label(); PvlGroup reseaus = isisLabel->findObject("IsisCube").findGroup("Reseaus"); PvlKeyword lineKey = reseaus.findKeyword("Line"); PvlGroup reseausGroup = isisLabel->findObject("IsisCube").findGroup("Reseaus"); PvlKeyword lineKey = reseausGroup.findKeyword("Line"); EXPECT_NEAR(lineKey[0].toDouble(), 200, 0.0001); EXPECT_NEAR(lineKey[1].toDouble(), 400, 0.0001); EXPECT_NEAR(lineKey[2].toDouble(), 600, 0.0001); PvlKeyword sampleKey = reseaus.findKeyword("Sample"); PvlKeyword sampleKey = reseausGroup.findKeyword("Sample"); EXPECT_NEAR(sampleKey[0].toDouble(), 200, 0.0001); EXPECT_NEAR(sampleKey[1].toDouble(), 400, 0.0001); EXPECT_NEAR(sampleKey[2].toDouble(), 600, 0.0001); PvlKeyword validKey = reseaus.findKeyword("Valid"); PvlKeyword validKey = reseausGroup.findKeyword("Valid"); EXPECT_EQ(validKey[0].toInt(), 1); EXPECT_EQ(validKey[1].toInt(), 1); EXPECT_EQ(validKey[2].toInt(), 1); EXPECT_PRED_FORMAT2(AssertQStringsEqual, reseaus.findKeyword("Status"), "Removed"); EXPECT_PRED_FORMAT2(AssertQStringsEqual, reseausGroup.findKeyword("Status"), "Removed"); Brick brick(reseauSize,reseauSize,1,cube.pixelType()); for (size_t i = 0; i < reseaus.size(); i++) { int baseSamp = (int)(reseaus[i].first+0.5) - (reseauSize/2); int baseLine = (int)(reseaus[i].second+0.5) - (reseauSize/2); brick.SetBasePosition(baseSamp,baseLine,1); cube.read(brick); Statistics reseauStats; reseauStats.AddData(&brick[0], brick.size()); EXPECT_NEAR(reseauStats.Average(), i, 0.001) << "Reseau " << i; EXPECT_EQ(reseauStats.ValidPixels(), 9604) << "Reseau " << i; EXPECT_EQ(reseauStats.NullPixels(), 1005) << "Reseau " << i; EXPECT_NEAR(reseauStats.StandardDeviation(), 0.0, 0.001) << "Reseau " << i; } } TEST_F(ApolloCube, FunctionalTestApolloremrxPatch) { testCube->group("RESEAUS")["STATUS"] = "Refined"; QTemporaryDir prefix; QString outCubeFileName = prefix.path()+"/outTEMP.cub"; QVector<QString> args = {"to=" + outCubeFileName, "action=PATCH"}; UserInterface options(APP_XML, args); try { apolloremrx(testCube, options); } catch (IException &e) { FAIL() << "Call failed, Unable to process cube: " << e.what() << std::endl; } Cube cube(outCubeFileName); Brick brick(reseauSize,reseauSize,1,cube.pixelType()); std::unique_ptr<Histogram> hist (testCube->histogram()); for (size_t i = 0; i < reseaus.size(); i++) { int baseSamp = (int)(reseaus[i].first+0.5) - (reseauSize/2); int baseLine = (int)(reseaus[i].second+0.5) - (reseauSize/2); brick.SetBasePosition(baseSamp,baseLine,1); cube.read(brick); Statistics reseauStats; reseauStats.AddData(&brick[0], brick.size()); ASSERT_DOUBLE_EQ(hist->Average(), 11449.5); ASSERT_DOUBLE_EQ(hist->Sum(), 6004232295000); ASSERT_EQ(hist->ValidPixels(), 524410000); ASSERT_NEAR(hist->StandardDeviation(), 6610.66055, 0.00001); EXPECT_EQ(reseauStats.ValidPixels(), 10609) << "Reseau " << i; EXPECT_EQ(reseauStats.NullPixels(), 0) << "Reseau " << i; } } TEST_F(ApolloCube, FunctionalTestApolloremrxRemovedError) { Loading Loading
isis/tests/Fixtures.cpp +43 −27 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ #include "FileName.h" #include "Blob.h" #include "Brick.h" #include "csminit.h" #include "Fixtures.h" #include "Portal.h" Loading Loading @@ -1107,39 +1108,54 @@ namespace Isis { testCube->setDimensions(22900, 22900, 1); testCube->create(tempDir.path() + "/large.cub"); LineManager line(*testCube); double pixelValue = 0.0; for(line.begin(); !line.end(); line++) { for(int i = 0; i < line.size(); i++) { line[i] = pixelValue; } // Reseau centers as {sample, line} pairs reseaus = {{200, 200}, {400, 400}, {600, 600}}; reseauSize = 103; int reseauValue = 100; pixelValue++; testCube->write(line); Brick brick(reseauSize,reseauSize,1,testCube->pixelType()); for (size_t res=0; res<reseaus.size(); res++) { int baseSamp = (int)(reseaus[res].first+0.5) - (reseauSize/2); int baseLine = (int)(reseaus[res].second+0.5) - (reseauSize/2); brick.SetBasePosition(baseSamp,baseLine,1); testCube->read(brick); // Fill the surrounding area with a base number for (int i = 0; i < reseauSize; i++) { for (int j = 0; j < reseauSize; j++) { brick[reseauSize*i + j] = res; } } PvlGroup reseaus("Reseaus"); PvlKeyword samples = PvlKeyword("Sample", "200"); samples += "400"; samples += "600"; // Create reseau for (int i = 0; i < reseauSize; i++) { for (int j = -2; j < 3; j++) { // Vertical line brick[reseauSize * i + reseauSize/2 + j] = reseauValue; PvlKeyword lines = PvlKeyword("Line", "200"); lines += "400"; lines += "600"; // Horizontal line brick[reseauSize * (reseauSize/2 + j) + i] = reseauValue; } } testCube->write(brick); } PvlGroup reseausGroup("Reseaus"); PvlKeyword samples = PvlKeyword("Sample", QString::number(reseaus[0].first)); PvlKeyword lines = PvlKeyword("Line", QString::number(reseaus[0].second)); PvlKeyword types = PvlKeyword("Type", "5"); types += "5"; types += "5"; PvlKeyword valid = PvlKeyword("Valid", "1"); for (size_t i = 1; i < reseaus.size(); i++) { samples += QString::number(reseaus[i].first); lines += QString::number(reseaus[i].second); types += "5"; valid += "1"; valid += "1"; } reseaus += lines; reseaus += samples; reseaus += types; reseaus += valid; reseaus += PvlKeyword("Status", "Nominal"); reseausGroup += lines; reseausGroup += samples; reseausGroup += types; reseausGroup += valid; reseausGroup += PvlKeyword("Status", "Nominal"); std::istringstream instStr (R"( Group = Instrument Loading @@ -1154,7 +1170,7 @@ namespace Isis { instStr >> instGroup; Pvl *lab = testCube->label(); lab->findObject("IsisCube").addGroup(reseaus); lab->findObject("IsisCube").addGroup(reseausGroup); lab->findObject("IsisCube").addGroup(instGroup); testCube->reopen("r"); Loading
isis/tests/Fixtures.h +3 −0 Original line number Diff line number Diff line Loading @@ -256,6 +256,9 @@ namespace Isis { class ApolloCube : public LargeCube { protected: std::vector<std::pair<int, int>> reseaus; int reseauSize; void SetUp() override; }; Loading
isis/tests/FunctionalTestsApollocal.cpp +16 −7 Original line number Diff line number Diff line #include "Brick.h" #include "Fixtures.h" #include "Pvl.h" #include "PvlGroup.h" #include "TestUtilities.h" #include "Histogram.h" #include "Statistics.h" #include "apollocal.h" Loading @@ -29,10 +30,18 @@ TEST_F(ApolloCube, FunctionalTestApollocalDefault) { Cube oCube(outCubeFileName, "r"); std::unique_ptr<Histogram> oCubeStats(oCube.histogram()); EXPECT_NEAR(oCubeStats->Average(), -124.188, 0.001); EXPECT_NEAR(oCubeStats->Sum(), -65125546242.836, 0.001); EXPECT_NEAR(oCubeStats->ValidPixels(), 524410000, 0.001); EXPECT_NEAR(oCubeStats->StandardDeviation(), 1056.736, 0.001); // Check a region with both Null and non-Null data Brick brick(reseauSize + 10,reseauSize + 10,1,oCube.pixelType()); int baseSamp = (int)(reseaus[0].first+0.5) - (reseauSize/2); int baseLine = (int)(reseaus[0].second+0.5) - (reseauSize/2); brick.SetBasePosition(baseSamp,baseLine,1); oCube.read(brick); Statistics reseauStats; reseauStats.AddData(&brick[0], brick.size()); EXPECT_NEAR(reseauStats.Average(), -2864.497, 0.001); EXPECT_NEAR(reseauStats.Sum(), -30389453.463, 0.001); EXPECT_EQ(reseauStats.ValidPixels(), 10609); EXPECT_EQ(reseauStats.NullPixels(), 2160); EXPECT_NEAR(reseauStats.StandardDeviation(), 21.534, 0.001); }
isis/tests/FunctionalTestsApolloremrx.cpp +55 −11 Original line number Diff line number Diff line Loading @@ -19,7 +19,8 @@ TEST_F(ApolloCube, FunctionalTestApolloremrxDefault) { QTemporaryDir prefix; QString outCubeFileName = prefix.path()+"/outTEMP.cub"; QVector<QString> args = {"to=" + outCubeFileName, "action=null"}; QVector<QString> args = {"to=" + outCubeFileName, "action=null"}; UserInterface options(APP_XML, args); try { Loading @@ -32,30 +33,73 @@ TEST_F(ApolloCube, FunctionalTestApolloremrxDefault) { Cube cube(outCubeFileName); Pvl *isisLabel = cube.label(); PvlGroup reseaus = isisLabel->findObject("IsisCube").findGroup("Reseaus"); PvlKeyword lineKey = reseaus.findKeyword("Line"); PvlGroup reseausGroup = isisLabel->findObject("IsisCube").findGroup("Reseaus"); PvlKeyword lineKey = reseausGroup.findKeyword("Line"); EXPECT_NEAR(lineKey[0].toDouble(), 200, 0.0001); EXPECT_NEAR(lineKey[1].toDouble(), 400, 0.0001); EXPECT_NEAR(lineKey[2].toDouble(), 600, 0.0001); PvlKeyword sampleKey = reseaus.findKeyword("Sample"); PvlKeyword sampleKey = reseausGroup.findKeyword("Sample"); EXPECT_NEAR(sampleKey[0].toDouble(), 200, 0.0001); EXPECT_NEAR(sampleKey[1].toDouble(), 400, 0.0001); EXPECT_NEAR(sampleKey[2].toDouble(), 600, 0.0001); PvlKeyword validKey = reseaus.findKeyword("Valid"); PvlKeyword validKey = reseausGroup.findKeyword("Valid"); EXPECT_EQ(validKey[0].toInt(), 1); EXPECT_EQ(validKey[1].toInt(), 1); EXPECT_EQ(validKey[2].toInt(), 1); EXPECT_PRED_FORMAT2(AssertQStringsEqual, reseaus.findKeyword("Status"), "Removed"); EXPECT_PRED_FORMAT2(AssertQStringsEqual, reseausGroup.findKeyword("Status"), "Removed"); Brick brick(reseauSize,reseauSize,1,cube.pixelType()); for (size_t i = 0; i < reseaus.size(); i++) { int baseSamp = (int)(reseaus[i].first+0.5) - (reseauSize/2); int baseLine = (int)(reseaus[i].second+0.5) - (reseauSize/2); brick.SetBasePosition(baseSamp,baseLine,1); cube.read(brick); Statistics reseauStats; reseauStats.AddData(&brick[0], brick.size()); EXPECT_NEAR(reseauStats.Average(), i, 0.001) << "Reseau " << i; EXPECT_EQ(reseauStats.ValidPixels(), 9604) << "Reseau " << i; EXPECT_EQ(reseauStats.NullPixels(), 1005) << "Reseau " << i; EXPECT_NEAR(reseauStats.StandardDeviation(), 0.0, 0.001) << "Reseau " << i; } } TEST_F(ApolloCube, FunctionalTestApolloremrxPatch) { testCube->group("RESEAUS")["STATUS"] = "Refined"; QTemporaryDir prefix; QString outCubeFileName = prefix.path()+"/outTEMP.cub"; QVector<QString> args = {"to=" + outCubeFileName, "action=PATCH"}; UserInterface options(APP_XML, args); try { apolloremrx(testCube, options); } catch (IException &e) { FAIL() << "Call failed, Unable to process cube: " << e.what() << std::endl; } Cube cube(outCubeFileName); Brick brick(reseauSize,reseauSize,1,cube.pixelType()); std::unique_ptr<Histogram> hist (testCube->histogram()); for (size_t i = 0; i < reseaus.size(); i++) { int baseSamp = (int)(reseaus[i].first+0.5) - (reseauSize/2); int baseLine = (int)(reseaus[i].second+0.5) - (reseauSize/2); brick.SetBasePosition(baseSamp,baseLine,1); cube.read(brick); Statistics reseauStats; reseauStats.AddData(&brick[0], brick.size()); ASSERT_DOUBLE_EQ(hist->Average(), 11449.5); ASSERT_DOUBLE_EQ(hist->Sum(), 6004232295000); ASSERT_EQ(hist->ValidPixels(), 524410000); ASSERT_NEAR(hist->StandardDeviation(), 6610.66055, 0.00001); EXPECT_EQ(reseauStats.ValidPixels(), 10609) << "Reseau " << i; EXPECT_EQ(reseauStats.NullPixels(), 0) << "Reseau " << i; } } TEST_F(ApolloCube, FunctionalTestApolloremrxRemovedError) { Loading