Ignore:
Timestamp:
Dec 3, 2012, 9:49:30 AM (12 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
9511c7
Parents:
b78dfd
git-author:
Frederik Heber <heber@…> (09/19/12 13:55:43)
git-committer:
Frederik Heber <heber@…> (12/03/12 09:49:30)
Message:

CheckAgainstAdjacencyFile now works on given vector of atomids.

  • added helper function getGlobalIdsFromLocalIds() as we have to translate molecule's internal ids to global atomId_t to check against those in file.
  • TESTFIX: Adapted CheckAgainstAdjacencyFileUnitTest to the changes, also added another test case to operatorTest().
Location:
src/Graph/unittests
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/Graph/unittests/CheckAgainstAdjacencyFileUnitTest.cpp

    rb78dfd r06f41f3  
    3939#include <cppunit/ui/text/TestRunner.h>
    4040
     41#include <boost/lambda/lambda.hpp>
    4142#include <iostream>
    42 #include <string>
     43#include <iterator>
     44#include <iostream>
     45#include <vector>
    4346
    4447#include "CodePatterns/Assert.hpp"
     
    7679static std::string wrongadjacencyfile1 ="\
    77801 2\n\
    78 2 1 3\n\
    79 4 3 5\n\
     812 1\n\
     824 5\n\
    80835 4 6\n\
    81846 5 7\n\
     
    9810111 10";
    99102
     103static std::string wrongadjacencyfile3 ="\
     1041 2\n\
     1052 1 3\n\
     1063 2 4\n\
     1074 3 5\n\
     1085 4 7\n\
     1096\n\
     1107 5 8\n\
     1118 7 9\n\
     1129 8 10\n\
     11310 9 11\n\
     11411 10";
     115
    100116// set up and tear down
    101117void CheckAgainstAdjacencyFileTest::setUp()
     
    110126  CPPUNIT_ASSERT(TestMolecule != NULL);
    111127  for(int i=0;i<ATOM_COUNT;++i){
    112     atoms[i]= World::getInstance().createAtom();
    113     CPPUNIT_ASSERT(atoms[i] != NULL);
    114     atoms[i]->setType(hydrogen);
    115     TestMolecule->AddAtom(atoms[i]);
    116     atomIds[i]= atoms[i]->getId();
    117   }
     128    atom *_atom = World::getInstance().createAtom();
     129    CPPUNIT_ASSERT(_atom != NULL);
     130    _atom->setType(hydrogen);
     131    TestMolecule->AddAtom(_atom);
     132    atoms.push_back(_atom);
     133    atomIds.push_back(_atom->getId());
     134  }
     135  CPPUNIT_ASSERT_EQUAL( (size_t)ATOM_COUNT, atoms.size());
     136  CPPUNIT_ASSERT_EQUAL( (size_t)ATOM_COUNT, atomIds.size());
    118137  // create linear chain
    119   for(int i=0;i<ATOM_COUNT-1;++i){
     138  for(int i=0;i<ATOM_COUNT-1;++i)
    120139    atoms[i]->addBond(WorldTime::getTime(), atoms[i+1]);
    121   }
    122140
    123141  // create map as it should be
     
    143161}
    144162
    145 /** Unit tests for CheckAgainstAdjacencyFile::CreateInternalMap().
    146  *
    147  */
    148 void CheckAgainstAdjacencyFileTest::CreateInternalMapTest()
     163/** Unit tests for CheckAgainstAdjacencyFile::CreateExternalMap().
     164 *
     165 */
     166void CheckAgainstAdjacencyFileTest::CreateExternalMapTest()
    149167{
    150168  std::stringstream input;
    151169  CheckAgainstAdjacencyFile fileChecker(input);
    152   World::getInstance().selectAllAtoms(AllAtoms());
    153   const World &world = World::getInstance();
    154   fileChecker.CreateInternalMap(world.beginAtomSelection(), world.endAtomSelection());
     170  fileChecker.CreateExternalMap(atomIds);
    155171
    156172  // check size (it's 8*2 + 2*1 = 18 keys)
     173  CPPUNIT_ASSERT_EQUAL( (size_t)18, fileChecker.ExternalAtomBondMap.size() );
     174  CPPUNIT_ASSERT_EQUAL( (size_t)0, fileChecker.InternalAtomBondMap.size() );
     175
     176  // check equality
     177  CPPUNIT_ASSERT( comparisonMap.size() == fileChecker.ExternalAtomBondMap.size() );
     178//  std::cout << "comparisonMap: " << comparisonMap << std::endl;
     179//  std::cout << "fileChecker.InternalAtomBondMap: " << fileChecker.InternalAtomBondMap << std::endl;
     180  CPPUNIT_ASSERT( comparisonMap == fileChecker.ExternalAtomBondMap );
     181
     182  // check non-equality: more
     183  comparisonMap.insert( std::make_pair( (atomId_t)10, (atomId_t)8) );
     184  CPPUNIT_ASSERT( comparisonMap != fileChecker.ExternalAtomBondMap );
     185  comparisonMap.erase((atomId_t)10);
     186
     187  // check non-equality: less
     188  comparisonMap.erase((atomId_t)9);
     189  CPPUNIT_ASSERT( comparisonMap != fileChecker.ExternalAtomBondMap );
     190}
     191
     192/** Unit tests for CheckAgainstAdjacencyFile::ParseInInternalMap().
     193 *
     194 */
     195void CheckAgainstAdjacencyFileTest::ParseInInternalMapTest()
     196{
     197  std::stringstream input(adjacencyfile);
     198  CheckAgainstAdjacencyFile fileChecker(input);
     199  std::vector<atomId_t> noids;
     200  fileChecker.CreateExternalMap(noids);
     201
     202  // check size (it's 8*2 + 2*1 = 18 keys)
     203  CPPUNIT_ASSERT_EQUAL( (size_t)0, fileChecker.ExternalAtomBondMap.size() );
    157204  CPPUNIT_ASSERT_EQUAL( (size_t)18, fileChecker.InternalAtomBondMap.size() );
    158   CPPUNIT_ASSERT_EQUAL( (size_t)0, fileChecker.ExternalAtomBondMap.size() );
    159205
    160206  // check equality
    161207  CPPUNIT_ASSERT( comparisonMap.size() == fileChecker.InternalAtomBondMap.size() );
    162 //  std::cout << "comparisonMap: " << comparisonMap << std::endl;
    163 //  std::cout << "fileChecker.InternalAtomBondMap: " << fileChecker.InternalAtomBondMap << std::endl;
    164208  CPPUNIT_ASSERT( comparisonMap == fileChecker.InternalAtomBondMap );
    165209
     
    174218}
    175219
    176 /** Unit tests for CheckAgainstAdjacencyFile::ParseInExternalMap().
    177  *
    178  */
    179 void CheckAgainstAdjacencyFileTest::ParseInExternalMapTest()
    180 {
    181   std::stringstream input(adjacencyfile);
    182   World::getInstance().selectAllAtoms(NoAtoms());
    183   CheckAgainstAdjacencyFile fileChecker(input);
    184   fileChecker.CreateInternalMap(World::getInstance().beginAtomSelection(), World::getInstance().endAtomSelection());
    185 
    186   // check size (it's 8*2 + 2*1 = 18 keys)
    187   CPPUNIT_ASSERT_EQUAL( (size_t)0, fileChecker.InternalAtomBondMap.size() );
    188   CPPUNIT_ASSERT_EQUAL( (size_t)18, fileChecker.ExternalAtomBondMap.size() );
    189 
    190   // check equality
    191   CPPUNIT_ASSERT( comparisonMap.size() == fileChecker.ExternalAtomBondMap.size() );
    192   CPPUNIT_ASSERT( comparisonMap == fileChecker.ExternalAtomBondMap );
    193 
    194   // check non-equality: more
    195   comparisonMap.insert( std::make_pair( (atomId_t)10, (atomId_t)8) );
    196   CPPUNIT_ASSERT( comparisonMap != fileChecker.ExternalAtomBondMap );
    197   comparisonMap.erase((atomId_t)10);
    198 
    199   // check non-equality: less
    200   comparisonMap.erase((atomId_t)9);
    201   CPPUNIT_ASSERT( comparisonMap != fileChecker.ExternalAtomBondMap );
    202 }
    203 
    204220/** Unit tests for CheckAgainstAdjacencyFile::CompareInternalExternalMap().
    205221 *
     
    210226  CheckAgainstAdjacencyFile fileChecker(input);
    211227
    212   // assert non-equality before parsing
    213   CPPUNIT_ASSERT( fileChecker.InternalAtomBondMap.size() != fileChecker.ExternalAtomBondMap.size() );
    214   CPPUNIT_ASSERT( fileChecker.InternalAtomBondMap != fileChecker.ExternalAtomBondMap );
    215   CPPUNIT_ASSERT( !fileChecker.CompareInternalExternalMap() );
    216 
    217   // parse
    218   World::getInstance().selectAllAtoms(AllAtoms());
    219   fileChecker.CreateInternalMap(World::getInstance().beginAtomSelection(), World::getInstance().endAtomSelection());
     228  // assert equality before parsing (empty sets should always return true)
     229  CPPUNIT_ASSERT( fileChecker.ExternalAtomBondMap.size() != fileChecker.InternalAtomBondMap.size() );
     230  CPPUNIT_ASSERT( fileChecker.ExternalAtomBondMap != fileChecker.InternalAtomBondMap );
     231  CPPUNIT_ASSERT( fileChecker.CompareInternalExternalMap() );
     232
     233  // parse in external map
     234  fileChecker.CreateExternalMap(atomIds);
    220235
    221236  // assert equality after parsing
    222   CPPUNIT_ASSERT_EQUAL( fileChecker.InternalAtomBondMap.size(), fileChecker.ExternalAtomBondMap.size() );
    223   CPPUNIT_ASSERT_EQUAL( fileChecker.InternalAtomBondMap, fileChecker.ExternalAtomBondMap );
     237  CPPUNIT_ASSERT_EQUAL( fileChecker.ExternalAtomBondMap.size(), fileChecker.InternalAtomBondMap.size() );
     238  CPPUNIT_ASSERT_EQUAL( fileChecker.ExternalAtomBondMap, fileChecker.InternalAtomBondMap );
    224239  CPPUNIT_ASSERT( fileChecker.CompareInternalExternalMap() );
    225240}
     
    230245void CheckAgainstAdjacencyFileTest::operatorTest()
    231246{
    232   World::getInstance().selectAllAtoms(AllAtoms());
    233247  {
    234248    // parse right
    235249    std::stringstream input(adjacencyfile);
    236250    CheckAgainstAdjacencyFile fileChecker(input);
    237     CPPUNIT_ASSERT( fileChecker(World::getInstance().beginAtomSelection(), World::getInstance().endAtomSelection()) );
    238   }
    239   {
    240     // parse wrong1
     251    CPPUNIT_ASSERT( fileChecker(atomIds) );
     252  }
     253  {
     254    // parse wrong1 (more atoms in the world than in file, hence wrong)
    241255    std::stringstream input(wrongadjacencyfile1);
    242256    CheckAgainstAdjacencyFile fileChecker(input);
    243     CPPUNIT_ASSERT( !fileChecker(World::getInstance().beginAtomSelection(), World::getInstance().endAtomSelection()) );
    244   }
    245   {
    246     // parse wrong2 (there is no atom 10)
     257    CPPUNIT_ASSERT( !fileChecker(atomIds) );
     258  }
     259  {
     260    // remove third atom (index starts at 0) and test for equality then
     261    std::vector<atomId_t> validids;
     262    std::remove_copy_if(atomIds.begin(), atomIds.end(), std::back_inserter(validids), boost::lambda::_1 == (atomId_t)2);
     263    CPPUNIT_ASSERT_EQUAL( (size_t)ATOM_COUNT-1, validids.size() );
     264    // parse wrong1 (more atoms in the world than in file, hence wrong)
     265    std::stringstream input(wrongadjacencyfile1);
     266    CheckAgainstAdjacencyFile fileChecker(input);
     267    CPPUNIT_ASSERT( fileChecker(validids) );
     268  }
     269  {
     270    // parse wrong2 (there is no atom 10, but present in file. hence true)
    247271    std::stringstream input(wrongadjacencyfile2);
    248 #ifndef NDEBUG
    249     std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
    250     CPPUNIT_ASSERT_THROW( CheckAgainstAdjacencyFile fileChecker(input), Assert::AssertionFailure );
    251 #else
    252     CheckAgainstAdjacencyFile fileChecker(input);
    253     CPPUNIT_ASSERT( !fileChecker(World::getInstance().beginAtomSelection(), World::getInstance().endAtomSelection()) );
    254 #endif
    255   }
    256 }
     272    CheckAgainstAdjacencyFile fileChecker(input);
     273    CPPUNIT_ASSERT( !fileChecker(atomIds) );
     274  }
     275  {
     276    // parse wrong3 (6 is not connected)
     277    std::stringstream input(wrongadjacencyfile3);
     278    CheckAgainstAdjacencyFile fileChecker(input);
     279    CPPUNIT_ASSERT( !fileChecker(atomIds) );
     280  }
     281}
  • src/Graph/unittests/CheckAgainstAdjacencyFileUnitTest.hpp

    rb78dfd r06f41f3  
    3030{
    3131  CPPUNIT_TEST_SUITE( CheckAgainstAdjacencyFileTest );
    32   CPPUNIT_TEST ( CreateInternalMapTest );
    33   CPPUNIT_TEST ( ParseInExternalMapTest );
     32  CPPUNIT_TEST ( CreateExternalMapTest );
     33  CPPUNIT_TEST ( ParseInInternalMapTest );
    3434  CPPUNIT_TEST ( CompareInternalExternalMapTest );
    3535  CPPUNIT_TEST ( operatorTest );
     
    4040  void tearDown();
    4141
    42   void CreateInternalMapTest();
    43   void ParseInExternalMapTest();
     42  void CreateExternalMapTest();
     43  void ParseInInternalMapTest();
    4444  void CompareInternalExternalMapTest();
    4545  void operatorTest();
     
    4747private:
    4848  CheckAgainstAdjacencyFile::AtomBondMap comparisonMap;
    49   atom *atoms [ATOM_COUNT];
    50   atomId_t atomIds [ATOM_COUNT];
     49  std::vector<atom *> atoms;
     50  std::vector<atomId_t> atomIds;
    5151  molecule * TestMolecule;
    5252};
Note: See TracChangeset for help on using the changeset viewer.