Commit 6a1e639a authored by Ian Humphrey's avatar Ian Humphrey
Browse files

PROG fixed CubeManager unitTest. References #1951.

git-svn-id: http://subversion.wr.usgs.gov/repos/prog/isis3/trunk@6327 41f8697f-d340-4b68-9986-7bafba869bb8
parent a46583d8
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -109,7 +109,7 @@ namespace Isis {
  /**
   * This method removes a cube from memory, if it exists. If the cube is not
   * loaded into memory, nothing happens. This will cause any pointers to this
   * cube, obtained via OpenCube, to be invalid.
   * cube, obtained via OpenCube, to be NULL.
   *
   * @param cubeFileName The filename of the cube to remove from memory
   */
@@ -122,22 +122,22 @@ namespace Isis {
      return;
    }

    (*searchResult)->close();
    delete *searchResult;
    delete searchResult.value();
    searchResult.value() = NULL;
    p_cubes.erase(searchResult);
  }


  /**
   * This method removes all cubes from memory. All pointers returned via OpenCube
   * will be invalid.
   * will be NULL.
   */
  void CubeManager::CleanCubes() {
    QMap<QString, Cube *>::iterator pos = p_cubes.begin();

    while (pos != p_cubes.end()) {
      (*pos)->close();
      delete *pos;
      delete pos.value();
      pos.value() = NULL;
      pos ++;
    }

+2 −11
Original line number Diff line number Diff line
@@ -30,20 +30,11 @@ Verify blobTruth cubes have been cleaned
Cube FileNames: 
  1 : isisTruth
  2 : isisTruth
  3 : 
  4 : 
  3 : (cleaned)
  4 : (cleaned)
  5 : isisTruth
  6 : isisTruth

Verify remaining cubes have been cleaned
Cube FileNames: 
  1 : 
  2 : 
  3 : 
  4 : 
  5 : 
  6 : 

Set number of open cubes to 2

Currently managed cubes:
+50 −45
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ using namespace Isis;
int main(int argc, char *argv[]) {
  Isis::Preference::Preferences(true);

  std::cout << "CubeManager Unit Test" << std::endl;
  cout << "CubeManager Unit Test" << endl;
  QVector<Cube *> cubes;

  // Read Cubes Into Memory
@@ -25,45 +25,45 @@ int main(int argc, char *argv[]) {
  cubes.push_back(CubeManager::Open("$base/testData/isisTruth.cub+1"));

  // Print Cube FileNames To Verify We Have Correct Ones
  std::cout << "Verify proper cubes have been read" << std::endl;
  std::cout << "Cube FileNames: " << std::endl;
  cout << "Verify proper cubes have been read" << endl;
  cout << "Cube FileNames: " << endl;

  for(int i = 0; i < (int)cubes.size(); i++) {
    std::cout << "  " << i + 1 << " : " << FileName(cubes[i]->fileName()).baseName() << std::endl;
    cout << "  " << i + 1 << " : " << FileName(cubes[i]->fileName()).baseName() << endl;
  }

  std::cout << std::endl;
  cout << endl;

  // Print Cube Pointer Comparisons (1 if match, 0 if differ)
  std::cout << "Verify We Don't Have Duplicates..." << std::endl;
  cout << "Verify We Don't Have Duplicates..." << endl;

  // Print Table Header... up to 9 (for formatting)
  std::cout << "  Cube #";
  cout << "  Cube #";
  for(int i = 0; i < 9 && i < (int)cubes.size(); i++) {
    std::cout << " | Equals " << i + 1;
    cout << " | Equals " << i + 1;
  }
  std::cout << std::endl;
  cout << endl;

  // Print Comparison Table Data
  for(int i = 0; i < (int)cubes.size(); i++) {
    std::cout << "  Cube " << i + 1;
    cout << "  Cube " << i + 1;

    for(int j = 0; j < (int)cubes.size(); j++) {
      std::cout << " |        " << (int)(cubes[i] == cubes[j]);
      cout << " |        " << (int)(cubes[i] == cubes[j]);
    }

    std::cout << std::endl;
    cout << endl;
  }

  std::cout << std::endl;
  cout << endl;

  // Test cube attributes presence, input attributes only affect bands
  std::cout << "Verify cube attributes have been taken into account" << std::endl;
  std::cout << "  Cube # | # of Bands" << std::endl;
  cout << "Verify cube attributes have been taken into account" << endl;
  cout << "  Cube # | # of Bands" << endl;
  for(int i = 0; i < (int)cubes.size(); i++) {
    std::cout << "  Cube " << i + 1 << " | " << cubes[i]->bandCount() << std::endl;
    cout << "  Cube " << i + 1 << " | " << cubes[i]->bandCount() << endl;
  }
  std::cout << std::endl;
  cout << endl;

  // Test CleanUp() methods
 
@@ -73,27 +73,25 @@ int main(int argc, char *argv[]) {
  // Clean up one of the managed cubes
  CubeManager::CleanUp("$base/testData/blobTruth.cub");

  // Print Cube FileNames to verify that we have cleaned isisTruth cubes correctly
  std::cout << "Verify blobTruth cubes have been cleaned" << std::endl;
  std::cout << "Cube FileNames: " << std::endl;
  // Print Cube FileNames to verify that we have cleaned blobTruth cubes correctly
  cout << "Verify blobTruth cubes have been cleaned" << endl;
  cout << "Cube FileNames: " << endl;

  for (int i = 0; i < (int)cubes.size(); i++) {
    std::cout << "  " << i + 1 << " : " << FileName(cubes[i]->fileName()).baseName() << std::endl;
    cout << "  " << i + 1 << " : ";
    // only isisTruth pointers are valid now, so let's verify those
    if (i < 2 or i > 3) {
      cout << FileName(cubes[i]->fileName()).baseName() << endl;
    } 
  std::cout << std::endl;
    else {
      cout << "(cleaned)" << endl;
    }
  }
  cout << endl;

  // Clean up remaining cubes
  CubeManager::CleanUp();

  // Print Cube FileNames to verify that we have cleaned remaining cubes correctly
  std::cout << "Verify remaining cubes have been cleaned" << std::endl;
  std::cout << "Cube FileNames: " << std::endl;

  for (int i = 0; i < (int)cubes.size(); i++) {
    std::cout << "  " << i + 1 << " : " << FileName(cubes[i]->fileName()).baseName() << std::endl;
  }
  std::cout << std::endl;

  // Create a CubeManager instance (implicitly test destructor)
  QVector<Cube *> cubes2;
  CubeManager mgr;
@@ -102,41 +100,48 @@ int main(int argc, char *argv[]) {

  // Test setting an opened cube limit
  mgr.SetNumOpenCubes(2);
  std::cout << "Set number of open cubes to 2" << std::endl;
  std::cout << endl;
  cout << "Set number of open cubes to 2" << endl;
  cout << endl;

  // Print Cube FileNames to verify the currently managed cubes
  std::cout << "Currently managed cubes:" << std::endl;
  cout << "Currently managed cubes:" << endl;
  for (int i = 0; i < (int)cubes2.size(); i++) {
    std::cout << "  " << i + 1 << " : " << FileName(cubes2[i]->fileName()).baseName() << std::endl;
    cout << "  " << i + 1 << " : ";
    cout << FileName(cubes2[i]->fileName()).baseName() << endl;
  }
  std::cout << std::endl;
  cout << endl;

  // This will test the cleanup in OpenCube(const QString &)
  cubes2.push_back(mgr.OpenCube("$base/testData/isisTruth2.cub"));
  // we pop the front because OpenCube should dequeue and clean 1 item to enforce limit
  cubes2.pop_front();
  std::cout << "Opened isisTruth2.cub." << std::endl;
  std::cout << "Verify isisTruth2.cub is now managed and limit of 2 is enforced:" << std::endl;
  cout << "Opened isisTruth2.cub." << endl;
  cout << "Verify isisTruth2.cub is now managed and limit of 2 is enforced:" << endl;
  for (int i = 0; i < (int)cubes2.size(); i++) {
    std::cout << "  " << i + 1 << " : " << FileName(cubes2[i]->fileName()).baseName() << std::endl;
    cout << "  " << i + 1 << " : ";
    if (cubes2[i]) {
      cout << FileName(cubes2[i]->fileName()).baseName() << endl;
    }
    else {
      cout << "(NULL)" << endl;
    }
  }
  std::cout << std::endl;
  cout << endl;

  // Cleanup
  mgr.CleanCubes();

  // Set a open cube limit that exceeds the system open file limit
  std::cout << "Setting number of open cubes > 60 percent of system open file limit" << std::endl;
  mgr.SetNumOpenCubes(1000000);
  std::cout << std::endl;
  cout << "Setting number of open cubes > 60 percent of system open file limit" << endl;
  mgr.SetNumOpenCubes(100000);
  cout << endl;
  
  // Open a cube that DNE
  std::cout << "Attempting to open a file that does not exist:" << std::endl;
  cout << "Attempting to open a file that does not exist:" << endl;
  try {
    mgr.OpenCube("dne.cub");
  } catch (IException &e) {
    std::cout << "  " << e.what() << std::endl;
    cout << "  " << e.what() << endl;
  }

}