source: src/unittests/MoleculeUnitTest.cpp@ aec098

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 aec098 was c67ff9, checked in by Frederik Heber <heber@…>, 13 years ago

Added molecule::getBoundingShape() and unit test MoleculeUnitTest on it.

  • We now simply have a function to get a sphere as a suitable bounding shape which allows easy construction of a new cluster.
  • Property mode set to 100644
File size: 2.8 KB
Line 
1/*
2 * Project: MoleCuilder
3 * Description: creates and alters molecular systems
4 * Copyright (C) 2012 University of Bonn. All rights reserved.
5 * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
6 */
7
8/*
9 * MoleculeUnitTest.cpp
10 *
11 * Created on: Mar 19, 2012
12 * Author: heber
13 */
14
15// include config.h
16#ifdef HAVE_CONFIG_H
17#include <config.h>
18#endif
19
20#include <cppunit/CompilerOutputter.h>
21#include <cppunit/extensions/TestFactoryRegistry.h>
22#include <cppunit/ui/text/TestRunner.h>
23
24#include <algorithm>
25
26#include "Atom/atom.hpp"
27#include "CodePatterns/Assert.hpp"
28#include "Element/element.hpp"
29#include "Element/periodentafel.hpp"
30#include "molecule.hpp"
31
32#include "MoleculeUnitTest.hpp"
33
34
35#ifdef HAVE_TESTRUNNER
36#include "UnitTestMain.hpp"
37#endif /*HAVE_TESTRUNNER*/
38
39/********************************************** Test classes **************************************/
40
41// Registers the fixture into the 'registry'
42CPPUNIT_TEST_SUITE_REGISTRATION( MoleculeUnittest );
43
44size_t MoleculeUnittest::MaxAtoms = 6;
45
46void MoleculeUnittest::setUp(){
47 // failing asserts should be thrown
48 ASSERT_DO(Assert::Throw);
49
50 atomVector.resize((size_t)MaxAtoms);
51 std::generate_n(atomVector.begin(), MaxAtoms,
52 boost::bind(&World::createAtom, boost::ref(World::getInstance())));
53 std::for_each(atomVector.begin(), atomVector.end(),
54 boost::bind(static_cast<void (AtomInfo::*)(int)>(&AtomInfo::setType), _1, (atomicNumber_t)1));
55
56 mol = new molecule;
57 std::for_each(atomVector.begin(), atomVector.end(),
58 boost::bind(&molecule::AddAtom, boost::ref(mol), _1));
59}
60
61void MoleculeUnittest::tearDown()
62{
63 delete mol;
64 World::purgeInstance();
65}
66
67/** Unit test for molecule::getBoundingShape() with a linear chain
68 *
69 */
70void MoleculeUnittest::getBoundingShapeTest_linearchain()
71{
72 // prepare a chain of atoms
73 double offset = 0.;
74 BOOST_FOREACH(atom *_atom, atomVector) {
75 _atom->setPosition( Vector(offset, 0., 0.) );
76 offset += 1.;
77 }
78
79 {
80 // get bounding shape
81 Shape s = mol->getBoundingShape();
82
83 // check that each atom is truely inside the shape
84 BOOST_FOREACH(atom *_atom, atomVector) {
85 CPPUNIT_ASSERT( s.isInside(_atom->getPosition()) );
86 }
87 }
88}
89
90/** Unit test for molecule::getBoundingShape() with a v-shaped molecule.
91 *
92 */
93void MoleculeUnittest::getBoundingShapeTest_vshaped()
94{
95 double xoffset = -2.5;
96 double yoffset = -2.5;
97 double yadder = -1;
98 BOOST_FOREACH(atom *_atom, atomVector) {
99 _atom->setPosition( Vector(xoffset, yoffset, 0.) );
100 xoffset += 1.;
101 yoffset -= yadder;
102 if (yoffset <= 0) {
103 yadder = 1.;
104 }
105 }
106
107 {
108 // get bounding shape
109 Shape s = mol->getBoundingShape();
110
111 // check that each atom is truely inside the shape
112 BOOST_FOREACH(atom *_atom, atomVector) {
113 CPPUNIT_ASSERT( s.isInside(_atom->getPosition()) );
114 }
115 }
116}
Note: See TracBrowser for help on using the repository browser.