Changeset b60804 for src


Ignore:
Timestamp:
Oct 10, 2011, 4:58:25 PM (13 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:
35a25a
Parents:
d7d022
git-author:
Frederik Heber <heber@…> (09/09/11 13:12:21)
git-committer:
Frederik Heber <heber@…> (10/10/11 16:58:25)
Message:

Added serialization to class periodentafel.

  • added unit test on comparison and serialization.
  • FIX: removed inclusion of PeriodentafelUnitTest.hpp in periodentafel.hpp as forward declaration is sufficient.
  • ComparisonTest and fix of operator==() for class periodentafel.
Location:
src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • src/analyzer.cpp

    rd7d022 rb60804  
    2323
    2424#include <cstring>
     25#include <sstream>
     26#include <fstream>
    2527#include <cmath>
    2628
     
    5456  ForceMatrix ChiPASFragments;
    5557  KeySetsContainer KeySet;
    56   ofstream output;
    57   ofstream output2;
    58   ofstream output3;
    59   ofstream output4;
    60   ifstream input;
    61   stringstream filename;
     58  std::ofstream output;
     59  std::ofstream output2;
     60  std::ofstream output3;
     61  std::ofstream output4;
     62  std::ifstream input;
     63  std::stringstream filename;
    6264  time_t t = time(NULL);
    6365  struct tm *ts = localtime(&t);
    6466  char *datum = asctime(ts);
    65   stringstream Orderxrange;
    66   stringstream Fragmentxrange;
    67   stringstream yrange;
     67  std::stringstream Orderxrange;
     68  std::stringstream Fragmentxrange;
     69  std::stringstream yrange;
    6870  char *dir = NULL;
    6971  bool NoHessian = false;
  • src/periodentafel.cpp

    rd7d022 rb60804  
    598598    return result;
    599599};
     600
     601/** Comparison operator for periodentafel.
     602 *
     603 * @param other other instance to compare to
     604 * @return true when both contain same elements
     605 */
     606bool periodentafel::operator==(const periodentafel &other) const
     607{
     608  // there are only pointers in the elementSet, hence we have to compare ourselves
     609  if (elements.size() != other.elements.size()) return false;
     610  const_iterator iter = elements.begin();
     611  const_iterator otheriter = other.elements.begin();
     612  for (;(iter != elements.end()) && (otheriter != other.elements.end());
     613      ++iter, ++otheriter) {
     614    bool status = true;
     615    status = status && (iter->first == otheriter->first);
     616    status = status && (*(iter->second) == *(otheriter->second));
     617    if (!status) {
     618      std::cout << *(iter->second) << " not equal to " << *(otheriter->second) << "." << std::endl;
     619      return false;
     620    }
     621//    else
     622//      std::cout << (iter->second)->getName() << " are equal to " << (otheriter->second)->getName() << "." << std::endl;
     623  }
     624  if (strncmp(header1, other.header1, MAXSTRINGSIZE) != 0) return false;
     625  if (strncmp(header2, other.header2, MAXSTRINGSIZE) != 0) return false;
     626  return true;
     627}
  • src/periodentafel.hpp

    rd7d022 rb60804  
    1313#include <string>
    1414
    15 #include "unittests/PeriodentafelUnitTest.hpp"
    1615#include "Helpers/defs.hpp"
    1716#include "types.hpp"
     17
     18#include "boost/serialization/array.hpp"
     19#include "boost/serialization/map.hpp"
    1820
    1921/****************************************** forward declarations *****************************/
     
    2931  /******* Types *********/
    3032  friend class periodentafelTest;
    31   private:
    32     typedef std::map<atomicNumber_t,element*> elementSet;
    33   public:
    34     typedef elementSet::iterator iterator;
    35     typedef elementSet::const_iterator const_iterator;
    36     typedef std::reverse_iterator<const_iterator> reverse_iterator;
    37   public:
     33private:
     34  typedef std::map<atomicNumber_t,element*> elementSet;
     35public:
     36  typedef elementSet::iterator iterator;
     37  typedef elementSet::const_iterator const_iterator;
     38  typedef std::reverse_iterator<const_iterator> reverse_iterator;
    3839
    39     char header1[MAXSTRINGSIZE]; //!< store first header line
    40     char header2[MAXSTRINGSIZE]; //!< store second header line
    41 
     40  /******* Functions *********/
     41public:
    4242  periodentafel();
    4343  ~periodentafel();
     
    6060  bool StorePeriodentafel(const char * const path) const;
    6161
    62   private:
     62  bool operator==(const periodentafel &other) const;
    6363
    64   bool LoadColorDatabase(istream &input);
     64  bool operator!=(const periodentafel &other) const {
     65    return !(*this == other);
     66  }
     67
     68private:
     69  friend class boost::serialization::access;
     70  // serialization
     71  template<class Archive>
     72  void serialize(Archive & ar, const unsigned int version)
     73  {
     74    ar & boost::serialization::make_array<char>(header1, MAXSTRINGSIZE);
     75    ar & boost::serialization::make_array<char>(header2, MAXSTRINGSIZE);
     76    ar & elements;
     77  }
     78
     79  bool LoadColorDatabase(std::istream &input);
    6580  bool LoadElementsDatabase(std::istream &input);
    6681  bool LoadElectronegativityDatabase(std::istream &input);
     
    7085  bool LoadHBondLengthsDatabase(std::istream &input);
    7186
    72     elementSet elements;
     87  /******* Variables *********/
     88private:
     89  char header1[MAXSTRINGSIZE]; //!< store first header line
     90  char header2[MAXSTRINGSIZE]; //!< store second header line
     91
     92  elementSet elements;
    7393};
    7494
    75 
    7695#endif /*PERIODENTAFEL_HPP_*/
  • src/unittests/PeriodentafelUnitTest.cpp

    rd7d022 rb60804  
    3535
    3636#include "PeriodentafelUnitTest.hpp"
     37
     38// include headers that implement a archive in simple text format
     39#include <boost/archive/text_oarchive.hpp>
     40#include <boost/archive/text_iarchive.hpp>
    3741
    3842#ifdef HAVE_TESTRUNNER
     
    102106    CPPUNIT_ASSERT( (ElementRunner->second->getNumber() == Z++) && "element is missing in sequence");
    103107};
     108
     109/** UnitTest for serialization
     110 *
     111 */
     112void periodentafelTest::ComparisonTest()
     113{
     114  periodentafel *newtafel = new periodentafel();
     115
     116  CPPUNIT_ASSERT (*newtafel == *tafel );
     117
     118  element *Elemental = new element();
     119  newtafel->AddElement((element * const)Elemental);
     120
     121  CPPUNIT_ASSERT (*newtafel != *tafel );
     122
     123  delete newtafel;
     124}
     125
     126std::string gatherUndoInformation()
     127{
     128  // create undo state
     129  std::stringstream undostream;
     130  boost::archive::text_oarchive oa(undostream);
     131  oa << World::getInstance().getPeriode();
     132  return undostream.str();
     133}
     134
     135/** UnitTest for serialization
     136 *
     137 */
     138void periodentafelTest::SerializeTest()
     139{
     140  // write element to stream
     141  std::stringstream stream(gatherUndoInformation());
     142//  boost::archive::text_oarchive oa(stream);
     143//  oa << World::getInstance().getPeriode();
     144//  //oa << tafel;
     145//
     146//  //std::cout << "Contents of archive is " << stream.str() << std::endl;
     147//
     148//  // create and open an archive for input
     149  boost::archive::text_iarchive ia(stream);
     150  // read class state from archive
     151  periodentafel * newtafel;
     152
     153  ia >> newtafel;
     154
     155  CPPUNIT_ASSERT (*tafel == *newtafel);
     156}
  • src/unittests/PeriodentafelUnitTest.hpp

    rd7d022 rb60804  
    2727    CPPUNIT_TEST ( AddRemoveTest );
    2828    CPPUNIT_TEST ( LoadStoreTest );
     29    CPPUNIT_TEST ( ComparisonTest );
     30    CPPUNIT_TEST ( SerializeTest );
    2931    CPPUNIT_TEST_SUITE_END();
    3032
     
    3436      void AddRemoveTest();
    3537      void LoadStoreTest();
     38      void ComparisonTest();
     39      void SerializeTest();
    3640
    3741private:
Note: See TracChangeset for help on using the changeset viewer.