source: src/LinkedCell/unittests/LinkedCell_ViewUnitTest.cpp@ 429069

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

FIX: TestRunner is now compiled based on AM_CONDITIONAL set by HAVE_ECUT.

  • Property mode set to 100644
File size: 7.4 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 * LinkedCell_ViewUnitTest.cpp
10 *
11 * Created on: Nov 18, 2011
12 * Author: heber
13 */
14
15// include config.h
16#ifdef HAVE_CONFIG_H
17#include <config.h>
18#endif
19
20using namespace std;
21
22#include <cppunit/CompilerOutputter.h>
23#include <cppunit/extensions/TestFactoryRegistry.h>
24#include <cppunit/ui/text/TestRunner.h>
25
26#include <algorithm>
27#include <list>
28
29#include "Box.hpp"
30#include "CodePatterns/Assert.hpp"
31#include "CodePatterns/Log.hpp"
32#include "LinearAlgebra/defs.hpp"
33#include "LinearAlgebra/RealSpaceMatrix.hpp"
34#include "LinkedCell/LinkedCell.hpp"
35#include "LinkedCell/LinkedCell_Model.hpp"
36#include "LinkedCell/LinkedCell_View.hpp"
37#include "LinkedCell/PointCloudAdaptor.hpp"
38#include "LinkedCell/unittests/defs.hpp"
39
40#include "LinkedCell_ViewUnitTest.hpp"
41
42#ifdef HAVE_TESTRUNNER
43#include "UnitTestMain.hpp"
44#endif /*HAVE_TESTRUNNER*/
45
46/********************************************** Test classes **************************************/
47
48// Registers the fixture into the 'registry'
49CPPUNIT_TEST_SUITE_REGISTRATION( LinkedCell_ViewTest );
50
51
52void LinkedCell_ViewTest::setUp()
53{
54 // failing asserts should be thrown
55 ASSERT_DO(Assert::Throw);
56
57 //setVerbosity(3);
58
59 // create diag(20.) matrix
60 RealSpaceMatrix BoxM;
61 BoxM.setIdentity();
62 BoxM *= 20.;
63
64 // create Box with this matrix
65 domain = new Box(BoxM);
66
67 // create LinkedCell structure with this Box
68 LCImpl = new LinkedCell::LinkedCell_Model(EDGELENGTH, *domain);
69
70 // create a list of nodes and add to LCImpl
71 std::vector< Vector > VectorList;
72 for (size_t i=0;i<((size_t)floor(NUMBERCELLS));++i)
73 VectorList.push_back(Vector((double)i*EDGELENGTH,(double)i*EDGELENGTH,(double)i*EDGELENGTH));
74 for (size_t i=0;i<VectorList.size();++i) {
75 TesselPoint * Walker = new TesselPoint();
76 Walker->setName(std::string("Walker")+toString(i));
77 Walker->setPosition(VectorList[i]);
78 NodeList.insert(Walker);
79 LCImpl->addNode(Walker);
80 }
81
82 // create LinkedCell_View from that
83 LC = new LinkedCell::LinkedCell_View(*LCImpl);
84}
85
86
87void LinkedCell_ViewTest::tearDown()
88{
89 delete LC;
90 delete LCImpl;
91 delete domain;
92
93 // remove all nodes again
94 for (PointSet::iterator iter = NodeList.begin();
95 !NodeList.empty();
96 iter = NodeList.begin()) {
97 delete *iter;
98 NodeList.erase(iter);
99 }
100}
101
102
103/** UnitTest for getAllNeighbors()
104 */
105void LinkedCell_ViewTest::getAllNeighborsTest()
106{
107 // define some center vector
108 Vector center(DOMAINLENGTH/2.,DOMAINLENGTH/2.,DOMAINLENGTH/2.);
109
110 // get LinkedList from LC
111 const double distance = 2.;
112 LinkedCell::LinkedList NeighborList = LC->getAllNeighbors(distance, center);
113// for (LinkedCell::LinkedList::const_iterator iter = NeighborList.begin();
114// iter != NeighborList.end(); ++iter)
115// std::cout << **iter << " is in returned neighbor list." << std::endl;
116
117 // gather points from NodeList
118 LinkedCell::LinkedList ComparisonList;
119 for (PointSet::const_iterator iter = NodeList.begin(); iter != NodeList.end(); ++iter)
120 if (center.DistanceSquared((*iter)->getPosition()) <= distance*distance) {
121 ComparisonList.insert(*iter);
122 //std::cout << **iter << " is inside of " << center << " plus " << distance << "." << std::endl;
123 }
124 // check that we get at least as many as needed
125 CPPUNIT_ASSERT(ComparisonList.size() <= NeighborList.size());
126
127 // check element-wise and skip unrequired ones
128 LinkedCell::LinkedList::iterator iter1 = ComparisonList.begin();
129 LinkedCell::LinkedList::iterator iter2 = NeighborList.begin();
130 for(;(iter1 != ComparisonList.end()) && (iter2 != NeighborList.end()); ++iter1, ++iter2) {
131 while (*iter1 != *iter2) {
132 CPPUNIT_ASSERT( iter2 != NeighborList.end() );
133 ++iter2;
134 }
135 //std::cout << **iter1 << " == " << **iter2 << std::endl;
136 CPPUNIT_ASSERT( iter2 != NeighborList.end() );
137 }
138}
139
140/** UnitTest for getPointsInsideSphere()
141 */
142void LinkedCell_ViewTest::getPointsInsideSphereTest()
143{
144 // define some center vector
145 Vector center(DOMAINLENGTH/2.,DOMAINLENGTH/2.,DOMAINLENGTH/2.);
146
147 // get LinkedList from LC
148 const double distance = 3.;
149 LinkedCell::LinkedList NeighborList = LC->getPointsInsideSphere(distance, center);
150// for (LinkedCell::LinkedList::const_iterator iter = NeighborList.begin();
151// iter != NeighborList.end(); ++iter)
152// std::cout << **iter << " is in returned restricted neighbor list." << std::endl;
153
154 // gather points from NodeList
155 LinkedCell::LinkedList ComparisonList;
156 for (PointSet::const_iterator iter = NodeList.begin(); iter != NodeList.end(); ++iter)
157 if (center.DistanceSquared((*iter)->getPosition()) <= distance*distance) {
158 ComparisonList.insert(*iter);
159 //std::cout << **iter << " is inside of " << center << " plus " << distance << "." << std::endl;
160 }
161 // check that we get at least as many as needed
162 CPPUNIT_ASSERT(ComparisonList.size() == NeighborList.size());
163
164 // check element-wise and skip unrequired ones
165 LinkedCell::LinkedList::iterator iter1 = ComparisonList.begin();
166 LinkedCell::LinkedList::iterator iter2 = NeighborList.begin();
167 for(;(iter1 != ComparisonList.end()) && (iter2 != NeighborList.end()); ++iter1, ++iter2) {
168 //std::cout << **iter1 << " == " << **iter2 << std::endl;
169 CPPUNIT_ASSERT( *iter1 == *iter2 );
170 }
171}
172
173
174LinkedCell::LinkedCell_View returnView(LinkedCell::LinkedCell_View &view)
175{
176 return view;
177}
178
179LinkedCell::LinkedCell_View returnCopiedView(LinkedCell::LinkedCell_View &view)
180{
181 LinkedCell::LinkedCell_View retview(view);
182 return retview;
183}
184
185/** UnitTest on whether counting in RAIIMap works
186 */
187void LinkedCell_ViewTest::RAIIMapTest()
188{
189 CPPUNIT_ASSERT_EQUAL( (size_t)1, LinkedCell::LinkedCell_View::RAIIMap.size() );
190
191 // check that we are present
192 LinkedCell::LinkedCell_View::ModelInstanceMap::iterator iter =
193 LinkedCell::LinkedCell_View::RAIIMap.find(LC);
194 CPPUNIT_ASSERT( iter != LinkedCell::LinkedCell_View::RAIIMap.end() );
195 CPPUNIT_ASSERT( *iter == LC );
196
197 // check that we are the only value present
198 ++iter;
199 CPPUNIT_ASSERT( iter == LinkedCell::LinkedCell_View::RAIIMap.end() );
200
201 // add another view and check that there is not assertion
202 LinkedCell::LinkedCell_View *view = NULL;
203 CPPUNIT_ASSERT_NO_THROW( view = new LinkedCell::LinkedCell_View(*LCImpl) );
204 CPPUNIT_ASSERT_EQUAL( (size_t)2, LinkedCell::LinkedCell_View::RAIIMap.size() );
205 delete view;
206 CPPUNIT_ASSERT_EQUAL( (size_t)1, LinkedCell::LinkedCell_View::RAIIMap.size() );
207
208 // copy current view
209 {
210 LinkedCell::LinkedCell_View view(*LC);
211 CPPUNIT_ASSERT_EQUAL( (size_t)2, LinkedCell::LinkedCell_View::RAIIMap.size() );
212 LinkedCell::LinkedCell_View view2 = *LC;
213 CPPUNIT_ASSERT_EQUAL( (size_t)3, LinkedCell::LinkedCell_View::RAIIMap.size() );
214 }
215 CPPUNIT_ASSERT_EQUAL( (size_t)1, LinkedCell::LinkedCell_View::RAIIMap.size() );
216
217 // with function returning view
218 {
219 LinkedCell::LinkedCell_View view = returnView(*LC);
220 CPPUNIT_ASSERT_EQUAL( (size_t)2, LinkedCell::LinkedCell_View::RAIIMap.size() );
221 }
222 CPPUNIT_ASSERT_EQUAL( (size_t)1, LinkedCell::LinkedCell_View::RAIIMap.size() );
223
224 // with function returning copied view
225 {
226 LinkedCell::LinkedCell_View view = returnCopiedView(*LC);
227 CPPUNIT_ASSERT_EQUAL( (size_t)2, LinkedCell::LinkedCell_View::RAIIMap.size() );
228 }
229 CPPUNIT_ASSERT_EQUAL( (size_t)1, LinkedCell::LinkedCell_View::RAIIMap.size() );
230}
231
Note: See TracBrowser for help on using the repository browser.