source: src/Parser/unittests/ParserXyzUnitTest.cpp@ 99db9b

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
Last change on this file since 99db9b was a58c16, checked in by Frederik Heber <heber@…>, 9 years ago

Replaced World::getAllAtoms() by const version where possible.

  • Property mode set to 100644
File size: 5.6 KB
Line 
1/*
2 * Project: MoleCuilder
3 * Description: creates and alters molecular systems
4 * Copyright (C) 2010-2012 University of Bonn. All rights reserved.
5 * Copyright (C) 2013 Frederik Heber. All rights reserved.
6 *
7 *
8 * This file is part of MoleCuilder.
9 *
10 * MoleCuilder is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * MoleCuilder is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with MoleCuilder. If not, see <http://www.gnu.org/licenses/>.
22 */
23
24/*
25 * ParserXyzUnitTest.cpp
26 *
27 * Created on: Mar 3, 2010
28 * Author: metzler
29 */
30
31// include config.h
32#ifdef HAVE_CONFIG_H
33#include <config.h>
34#endif
35
36#include "ParserXyzUnitTest.hpp"
37
38#include <cppunit/CompilerOutputter.h>
39#include <cppunit/extensions/TestFactoryRegistry.h>
40#include <cppunit/ui/text/TestRunner.h>
41
42#include "Atom/atom.hpp"
43#include "Atom/AtomObserver.hpp"
44#include "CodePatterns/Log.hpp"
45#include "Descriptors/AtomTypeDescriptor.hpp"
46#include "Element/element.hpp"
47#include "Element/periodentafel.hpp"
48#include "Parser/ChangeTracker.hpp"
49#include "Parser/XyzParser.hpp"
50#include "World.hpp"
51
52#ifdef HAVE_TESTRUNNER
53#include "UnitTestMain.hpp"
54#endif /*HAVE_TESTRUNNER*/
55
56using namespace std;
57
58// Registers the fixture into the 'registry'
59CPPUNIT_TEST_SUITE_REGISTRATION( ParserXyzUnitTest );
60
61static string waterXyz = "\
623\n\
63\tH2O: water molecule\n\
64O\t0\t0\t0\n\
65H\t0.758602\t0\t0.504284\n\
66H\t0.758602\t0\t-0.504284\n";
67static string waterMultiXyz = "\
683\n\
69\tH2O: water molecule, time step 0\n\
70O\t0\t0\t0\n\
71H\t0.758602\t0\t0.504284\n\
72H\t0.758602\t0\t-0.504284\n\
733\n\
74\tH2O: water molecule, time step 1\n\
75O\t0\t0\t0\n\
76H\t0.76\t0\t0.504284\n\
77H\t0.756\t0\t-0.504284\n";
78
79void ParserXyzUnitTest::setUp() {
80 World::getInstance();
81
82 parser = new FormatParser<xyz>();
83
84 setVerbosity(2);
85
86 // we need hydrogens and oxygens in the following tests
87 CPPUNIT_ASSERT(World::getInstance().getPeriode()->FindElement(1) != NULL);
88 CPPUNIT_ASSERT(World::getInstance().getPeriode()->FindElement(8) != NULL);
89}
90
91void ParserXyzUnitTest::tearDown()
92{
93 delete parser;
94 ChangeTracker::purgeInstance();
95 World::purgeInstance();
96 AtomObserver::purgeInstance();
97}
98
99/************************************ tests ***********************************/
100
101void ParserXyzUnitTest::rewriteAnXyzTest() {
102 cout << "Testing the XYZ parser." << endl;
103 stringstream input;
104 input << waterXyz;
105 parser->load(&input);
106 input.clear();
107
108 CPPUNIT_ASSERT_EQUAL(3, World::getInstance().numAtoms());
109
110 // store and parse in again
111 {
112 stringstream output;
113 std::vector<atom *> atoms = World::getInstance().getAllAtoms();
114 parser->save(&output, atoms);
115 input << output.str();
116 parser->load(&input);
117 }
118
119 // now twice as many
120 CPPUNIT_ASSERT_EQUAL(6, World::getInstance().numAtoms());
121
122 // check every atom
123 std::vector<atom *> atoms = World::getInstance().getAllAtoms();
124 std::vector<atom *>::const_iterator firstiter = atoms.begin();
125 std::vector<atom *>::const_iterator seconditer = atoms.begin();
126 for (size_t i=0;i<3;i++)
127 ++seconditer;
128 for (;
129 seconditer != atoms.end();
130 ++firstiter,++seconditer) {
131 // check position and type (only stuff xyz stores)
132 CPPUNIT_ASSERT_EQUAL((*firstiter)->getPosition(),(*seconditer)->getPosition());
133 CPPUNIT_ASSERT_EQUAL((*firstiter)->getType(),(*seconditer)->getType());
134 }
135}
136
137void ParserXyzUnitTest::readMultiXyzTest() {
138 cout << "Testing the multi time step XYZ parser." << endl;
139 stringstream input;
140 input << waterMultiXyz;
141 parser->load(&input);
142 input.clear();
143
144 // 3 not 6 atoms!
145 CPPUNIT_ASSERT_EQUAL(3, const_cast<const World &>(World::getInstance()).numAtoms());
146
147 // check for trajectory size
148 BOOST_FOREACH (const atom *_atom, const_cast<const World &>(World::getInstance()).getAllAtoms())
149 CPPUNIT_ASSERT_EQUAL((size_t) 2, _atom->getTrajectorySize());
150}
151
152void ParserXyzUnitTest::writeMultiXyzTest() {
153 stringstream input;
154 input << waterMultiXyz;
155 parser->load(&input);
156 input.clear();
157
158 // 3 not 6 atoms!
159 CPPUNIT_ASSERT_EQUAL(3, World::getInstance().numAtoms());
160
161 // store and parse in again
162 {
163 stringstream output;
164 std::vector<atom *> atoms = World::getInstance().getAllAtoms();
165 parser->save(&output, atoms);
166 input << output.str();
167 parser->load(&input);
168 }
169
170 // now twice as many
171 CPPUNIT_ASSERT_EQUAL(6, World::getInstance().numAtoms());
172
173 // check for trajectory size of all 6! atoms
174 BOOST_FOREACH (const atom *_atom, const_cast<const World &>(World::getInstance()).getAllAtoms())
175 CPPUNIT_ASSERT_EQUAL((size_t) 2, _atom->getTrajectorySize());
176
177 // check every atom
178 std::vector<const atom *> atoms = const_cast<const World &>(World::getInstance()).
179 getAllAtoms();
180 std::vector<const atom *>::const_iterator firstiter = atoms.begin();
181 std::vector<const atom *>::const_iterator seconditer = atoms.begin();
182 for (size_t i=0;i<3;i++)
183 ++seconditer;
184 for (;
185 seconditer != atoms.end();
186 ++firstiter,++seconditer) {
187 CPPUNIT_ASSERT_EQUAL((*firstiter)->getType(),(*seconditer)->getType());
188 for (unsigned int step = 0; step < 2; ++step) {
189 // check position and type (only stuff xyz stores)
190 CPPUNIT_ASSERT_EQUAL(
191 (*firstiter)->getPositionAtStep(step),
192 (*seconditer)->getPositionAtStep(step));
193 }
194 }
195}
Note: See TracBrowser for help on using the repository browser.