Unverified Commit f7030016 authored by Jesse Mapel's avatar Jesse Mapel Committed by GitHub
Browse files

Updated Apollo tests to be faster (#4757)

* test commit for ci

* Updated ApolloCube fixture to hae reseaus
parent 6a3757ec
Loading
Loading
Loading
Loading
+43 −27
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
#include "FileName.h"

#include "Blob.h"
#include "Brick.h"
#include "csminit.h"
#include "Fixtures.h"
#include "Portal.h"
@@ -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
@@ -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");
+3 −0
Original line number Diff line number Diff line
@@ -256,6 +256,9 @@ namespace Isis {

  class ApolloCube : public LargeCube {
    protected:
      std::vector<std::pair<int, int>> reseaus;
      int reseauSize;

      void SetUp() override;
  };

+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"

@@ -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);
}
+55 −11
Original line number Diff line number Diff line
@@ -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 {
@@ -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) {