source: src/LinearAlgebra/unittests/LineUnitTest.cpp@ f89024

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

Moved LineUnittest to LinearAlgebra/unittests/LineUnitTest.

  • Property mode set to 100644
File size: 14.3 KB
Line 
1/*
2 * Project: MoleCuilder
3 * Description: creates and alters molecular systems
4 * Copyright (C) 2010 University of Bonn. All rights reserved.
5 * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
6 */
7
8/*
9 * LineUnittest.cpp
10 *
11 * Created on: May 27, 2010
12 * Author: crueger
13 */
14
15// include config.h
16#ifdef HAVE_CONFIG_H
17#include <config.h>
18#endif
19
20
21#include "LinearAlgebra/Vector.hpp"
22#include "Exceptions/LinearDependenceException.hpp"
23#include "Exceptions/SkewException.hpp"
24
25#include <cppunit/CompilerOutputter.h>
26#include <cppunit/extensions/TestFactoryRegistry.h>
27#include <cppunit/ui/text/TestRunner.h>
28
29#include <iostream>
30#include <cmath>
31
32#include "LineUnitTest.hpp"
33
34#ifdef HAVE_TESTRUNNER
35#include "UnitTestMain.hpp"
36#endif /*HAVE_TESTRUNNER*/
37
38CPPUNIT_TEST_SUITE_REGISTRATION( LineUnittest );
39
40void LineUnittest::setUp(){
41 // three lines along the axes
42 la1 = new Line(zeroVec,unitVec[0]);
43 la2 = new Line(zeroVec,unitVec[1]);
44 la3 = new Line(zeroVec,unitVec[2]);
45
46 // the lines along the planes defined by two coordinate axes
47 lp1 = new Line(unitVec[0],unitVec[0]-unitVec[1]);
48 lp2 = new Line(unitVec[1],unitVec[1]-unitVec[2]);
49 lp3 = new Line(unitVec[2],unitVec[2]-unitVec[0]);
50}
51void LineUnittest::tearDown(){
52 delete la1;
53 delete la2;
54 delete la3;
55
56 delete lp1;
57 delete lp2;
58 delete lp3;
59}
60
61void LineUnittest::constructionErrorTest(){
62 // test some constructions
63
64 // direction+origin should never fail
65 CPPUNIT_ASSERT_NO_THROW(Line(zeroVec,unitVec[0]));
66 CPPUNIT_ASSERT_NO_THROW(Line(zeroVec,unitVec[1]));
67 CPPUNIT_ASSERT_NO_THROW(Line(zeroVec,unitVec[2]));
68
69 // two points fails if both points are the same
70 CPPUNIT_ASSERT_NO_THROW(makeLineThrough(unitVec[0],unitVec[1]));
71 CPPUNIT_ASSERT_NO_THROW(makeLineThrough(unitVec[1],unitVec[2]));
72 CPPUNIT_ASSERT_NO_THROW(makeLineThrough(unitVec[2],unitVec[0]));
73 // for zerovectors
74 CPPUNIT_ASSERT_NO_THROW(makeLineThrough(unitVec[0],zeroVec));
75 CPPUNIT_ASSERT_NO_THROW(makeLineThrough(unitVec[1],zeroVec));
76 CPPUNIT_ASSERT_NO_THROW(makeLineThrough(unitVec[2],zeroVec));
77 // now we pass two times the same point
78 CPPUNIT_ASSERT_THROW(makeLineThrough(zeroVec,zeroVec),LinearDependenceException);
79 CPPUNIT_ASSERT_THROW(makeLineThrough(unitVec[0],unitVec[0]),LinearDependenceException);
80 CPPUNIT_ASSERT_THROW(makeLineThrough(unitVec[1],unitVec[1]),LinearDependenceException);
81 CPPUNIT_ASSERT_THROW(makeLineThrough(unitVec[2],unitVec[2]),LinearDependenceException);
82
83}
84
85bool testDirection(const Vector &dir1,const Vector &dir2){
86 return (dir1==dir2) || (dir1==-1*dir2);
87}
88
89void LineUnittest::constructionResultTest(){
90 // test all directions
91 CPPUNIT_ASSERT(testDirection(la1->getDirection(),unitVec[0]));
92 CPPUNIT_ASSERT(testDirection(la2->getDirection(),unitVec[1]));
93 CPPUNIT_ASSERT(testDirection(la3->getDirection(),unitVec[2]));
94
95 // test origins
96 CPPUNIT_ASSERT_EQUAL(la1->getOrigin(),zeroVec);
97 CPPUNIT_ASSERT_EQUAL(la2->getOrigin(),zeroVec);
98 CPPUNIT_ASSERT_EQUAL(la2->getOrigin(),zeroVec);
99
100 // test if desired points are on the lines
101 CPPUNIT_ASSERT(la1->isContained(zeroVec));
102 CPPUNIT_ASSERT(la2->isContained(zeroVec));
103 CPPUNIT_ASSERT(la3->isContained(zeroVec));
104
105 CPPUNIT_ASSERT(la1->isContained(unitVec[0]));
106 CPPUNIT_ASSERT(la2->isContained(unitVec[1]));
107 CPPUNIT_ASSERT(la3->isContained(unitVec[2]));
108
109 CPPUNIT_ASSERT(lp1->isContained(unitVec[0]));
110 CPPUNIT_ASSERT(lp2->isContained(unitVec[1]));
111 CPPUNIT_ASSERT(lp3->isContained(unitVec[2]));
112
113 CPPUNIT_ASSERT(lp1->isContained(unitVec[1]));
114 CPPUNIT_ASSERT(lp2->isContained(unitVec[2]));
115 CPPUNIT_ASSERT(lp3->isContained(unitVec[0]));
116}
117
118void LineUnittest::isContainedTest(){
119 // Zerovector on the axes lines
120 CPPUNIT_ASSERT(la1->isContained(zeroVec));
121 CPPUNIT_ASSERT(la2->isContained(zeroVec));
122 CPPUNIT_ASSERT(la3->isContained(zeroVec));
123
124 // multiples of the second support vector
125 CPPUNIT_ASSERT(la1->isContained(unitVec[0]));
126 CPPUNIT_ASSERT(la2->isContained(unitVec[1]));
127 CPPUNIT_ASSERT(la3->isContained(unitVec[2]));
128
129 CPPUNIT_ASSERT(la1->isContained(2*unitVec[0]));
130 CPPUNIT_ASSERT(la2->isContained(2*unitVec[1]));
131 CPPUNIT_ASSERT(la3->isContained(2*unitVec[2]));
132
133 CPPUNIT_ASSERT(la1->isContained(3*unitVec[0]));
134 CPPUNIT_ASSERT(la2->isContained(3*unitVec[1]));
135 CPPUNIT_ASSERT(la3->isContained(3*unitVec[2]));
136
137 // negative multiples
138 CPPUNIT_ASSERT(la1->isContained(-1*unitVec[0]));
139 CPPUNIT_ASSERT(la2->isContained(-1*unitVec[1]));
140 CPPUNIT_ASSERT(la3->isContained(-1*unitVec[2]));
141
142 CPPUNIT_ASSERT(la1->isContained(-2*unitVec[0]));
143 CPPUNIT_ASSERT(la2->isContained(-2*unitVec[1]));
144 CPPUNIT_ASSERT(la3->isContained(-2*unitVec[2]));
145
146 // points that should not be on the lines
147 CPPUNIT_ASSERT(!la1->isContained(unitVec[1]));
148 CPPUNIT_ASSERT(!la2->isContained(unitVec[2]));
149 CPPUNIT_ASSERT(!la3->isContained(unitVec[0]));
150
151 CPPUNIT_ASSERT(!la1->isContained(2*unitVec[1]));
152 CPPUNIT_ASSERT(!la2->isContained(2*unitVec[2]));
153 CPPUNIT_ASSERT(!la3->isContained(2*unitVec[0]));
154
155 CPPUNIT_ASSERT(!la1->isContained(-1*unitVec[1]));
156 CPPUNIT_ASSERT(!la2->isContained(-1*unitVec[2]));
157 CPPUNIT_ASSERT(!la3->isContained(-1*unitVec[0]));
158
159 // For the plane lines
160 CPPUNIT_ASSERT(lp1->isContained(unitVec[0]));
161 CPPUNIT_ASSERT(lp2->isContained(unitVec[1]));
162 CPPUNIT_ASSERT(lp3->isContained(unitVec[2]));
163
164 CPPUNIT_ASSERT(lp1->isContained(unitVec[1]));
165 CPPUNIT_ASSERT(lp2->isContained(unitVec[2]));
166 CPPUNIT_ASSERT(lp3->isContained(unitVec[0]));
167
168 CPPUNIT_ASSERT(lp1->isContained(unitVec[0]+2*(unitVec[0]-unitVec[1])));
169 CPPUNIT_ASSERT(lp2->isContained(unitVec[1]+2*(unitVec[1]-unitVec[2])));
170 CPPUNIT_ASSERT(lp3->isContained(unitVec[2]+2*(unitVec[2]-unitVec[0])));
171
172 CPPUNIT_ASSERT(lp1->isContained(unitVec[0]-2*(unitVec[0]-unitVec[1])));
173 CPPUNIT_ASSERT(lp2->isContained(unitVec[1]-2*(unitVec[1]-unitVec[2])));
174 CPPUNIT_ASSERT(lp3->isContained(unitVec[2]-2*(unitVec[2]-unitVec[0])));
175}
176
177void LineUnittest::intersectionTest(){
178 Vector fixture;
179
180 // intersection of the axis lines
181 fixture = la1->getIntersection(*la2);
182 CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
183 fixture = la2->getIntersection(*la3);
184 CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
185 fixture = la3->getIntersection(*la1);
186 CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
187
188 // axes and plane lines
189 fixture = la1->getIntersection(*lp1);
190 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
191 fixture = la2->getIntersection(*lp2);
192 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
193 fixture = la3->getIntersection(*lp3);
194 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
195
196 fixture = la1->getIntersection(*lp3);
197 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
198 fixture = la2->getIntersection(*lp1);
199 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
200 fixture = la3->getIntersection(*lp2);
201 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
202
203 // two plane lines
204 fixture = lp1->getIntersection(*lp2);
205 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
206 fixture = lp2->getIntersection(*lp3);
207 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
208 fixture = lp3->getIntersection(*lp1);
209 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
210
211 // When we have two times the same line, we check if the point is on the line
212 fixture = la1->getIntersection(*la1);
213 CPPUNIT_ASSERT(la1->isContained(fixture));
214 fixture = la2->getIntersection(*la2);
215 CPPUNIT_ASSERT(la2->isContained(fixture));
216 fixture = la3->getIntersection(*la3);
217 CPPUNIT_ASSERT(la3->isContained(fixture));
218
219 fixture = lp1->getIntersection(*lp1);
220 CPPUNIT_ASSERT(lp1->isContained(fixture));
221 fixture = lp2->getIntersection(*lp2);
222 CPPUNIT_ASSERT(lp2->isContained(fixture));
223 fixture = lp3->getIntersection(*lp3);
224 CPPUNIT_ASSERT(lp3->isContained(fixture));
225
226 // lines that are askew should produce an Error
227 CPPUNIT_ASSERT_THROW(lp1->getIntersection(*la3),SkewException);
228 CPPUNIT_ASSERT_THROW(lp2->getIntersection(*la1),SkewException);
229 CPPUNIT_ASSERT_THROW(lp3->getIntersection(*la2),SkewException);
230
231 CPPUNIT_ASSERT_THROW(la1->getIntersection(*lp2),SkewException);
232 CPPUNIT_ASSERT_THROW(la2->getIntersection(*lp3),SkewException);
233 CPPUNIT_ASSERT_THROW(la3->getIntersection(*lp1),SkewException);
234}
235
236void LineUnittest::rotationTest(){
237 Vector fixture;
238
239 // rotate zero Vector along the axes lines by various degrees
240 fixture = la1->rotateVector(zeroVec,1.);
241 CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
242 fixture = la2->rotateVector(zeroVec,1.);
243 CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
244 fixture = la3->rotateVector(zeroVec,1.);
245 CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
246
247 fixture = la1->rotateVector(zeroVec,2.);
248 CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
249 fixture = la2->rotateVector(zeroVec,2.);
250 CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
251 fixture = la3->rotateVector(zeroVec,2.);
252 CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
253
254 // rotate vectors on the axis around their lines
255 fixture = la1->rotateVector(unitVec[0],1.);
256 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
257 fixture = la2->rotateVector(unitVec[1],1.);
258 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
259 fixture = la3->rotateVector(unitVec[2],1.);
260 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
261
262 fixture = la1->rotateVector(unitVec[0],2.);
263 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
264 fixture = la2->rotateVector(unitVec[1],2.);
265 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
266 fixture = la3->rotateVector(unitVec[2],2.);
267 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
268
269 // more vectors on the axis
270 fixture = la1->rotateVector(2*unitVec[0],1.);
271 CPPUNIT_ASSERT_EQUAL(fixture,2*unitVec[0]);
272 fixture = la2->rotateVector(2*unitVec[1],1.);
273 CPPUNIT_ASSERT_EQUAL(fixture,2*unitVec[1]);
274 fixture = la3->rotateVector(2*unitVec[2],1.);
275 CPPUNIT_ASSERT_EQUAL(fixture,2*unitVec[2]);
276
277 fixture = la1->rotateVector(2*unitVec[0],2.);
278 CPPUNIT_ASSERT_EQUAL(fixture,2*unitVec[0]);
279 fixture = la2->rotateVector(2*unitVec[1],2.);
280 CPPUNIT_ASSERT_EQUAL(fixture,2*unitVec[1]);
281 fixture = la3->rotateVector(2*unitVec[2],2.);
282 CPPUNIT_ASSERT_EQUAL(fixture,2*unitVec[2]);
283
284 // negative factors
285 fixture = la1->rotateVector(-1*unitVec[0],1.);
286 CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[0]);
287 fixture = la2->rotateVector(-1*unitVec[1],1.);
288 CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[1]);
289 fixture = la3->rotateVector(-1*unitVec[2],1.);
290 CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[2]);
291
292 fixture = la1->rotateVector(-1*unitVec[0],2.);
293 CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[0]);
294 fixture = la2->rotateVector(-1*unitVec[1],2.);
295 CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[1]);
296 fixture = la3->rotateVector(-1*unitVec[2],2.);
297 CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[2]);
298
299
300
301 // now the real rotations
302 // unitVec[1] around unitVec[0]
303 fixture = la1->rotateVector(unitVec[1],0);
304 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
305 fixture = la1->rotateVector(unitVec[1],1./2.*M_PI);
306 CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[2]);
307 fixture = la1->rotateVector(unitVec[1],M_PI);
308 CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[1]);
309 fixture = la1->rotateVector(unitVec[1],2*M_PI);
310 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
311
312 // unitVec[2] around unitVec[1]
313 fixture = la2->rotateVector(unitVec[2],0);
314 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
315 fixture = la2->rotateVector(unitVec[2],1./2.*M_PI);
316 CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[0]);
317 fixture = la2->rotateVector(unitVec[2],M_PI);
318 CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[2]);
319 fixture = la2->rotateVector(unitVec[2],2*M_PI);
320 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
321
322 // unitVec[0] around unitVec[2]
323 fixture = la3->rotateVector(unitVec[0],0);
324 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
325 fixture = la3->rotateVector(unitVec[0],1./2.*M_PI);
326 CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[1]);
327 fixture = la3->rotateVector(unitVec[0],M_PI);
328 CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[0]);
329 fixture = la3->rotateVector(unitVec[0],2*M_PI);
330 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
331
332
333 // and some rotation around the plane lines
334
335 // Vectors on the line
336 fixture = lp1->rotateVector(unitVec[0],1.);
337 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
338 fixture = lp1->rotateVector(unitVec[1],1.);
339 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
340
341 fixture = lp2->rotateVector(unitVec[1],1.);
342 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
343 fixture = lp2->rotateVector(unitVec[2],1.);
344 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
345
346 fixture = lp3->rotateVector(unitVec[2],1.);
347 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
348 fixture = lp3->rotateVector(unitVec[0],1.);
349 CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
350
351 // the real stuff
352 fixture = lp1->rotateVector(zeroVec,M_PI);
353 CPPUNIT_ASSERT_EQUAL(fixture,Vector(1,1,0));
354 fixture = lp2->rotateVector(zeroVec,M_PI);
355 CPPUNIT_ASSERT_EQUAL(fixture,Vector(0,1,1));
356 fixture = lp3->rotateVector(zeroVec,M_PI);
357 CPPUNIT_ASSERT_EQUAL(fixture,Vector(1,0,1));
358
359 fixture = lp1->rotateVector(zeroVec,2*M_PI);
360 CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
361 fixture = lp2->rotateVector(zeroVec,2*M_PI);
362 CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
363 fixture = lp3->rotateVector(zeroVec,2*M_PI);
364 CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
365}
366
367void LineUnittest::sphereIntersectionTest(){
368 {
369 std::vector<Vector> res = la1->getSphereIntersections();
370 CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
371 CPPUNIT_ASSERT(testDirection(res[0],unitVec[0]));
372 CPPUNIT_ASSERT(testDirection(res[1],unitVec[0]));
373 CPPUNIT_ASSERT(res[0]!=res[1]);
374 }
375
376 {
377 std::vector<Vector> res = la2->getSphereIntersections();
378 CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
379 CPPUNIT_ASSERT(testDirection(res[0],unitVec[1]));
380 CPPUNIT_ASSERT(testDirection(res[1],unitVec[1]));
381 CPPUNIT_ASSERT(res[0]!=res[1]);
382 }
383
384 {
385 std::vector<Vector> res = la3->getSphereIntersections();
386 CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
387 CPPUNIT_ASSERT(testDirection(res[0],unitVec[2]));
388 CPPUNIT_ASSERT(testDirection(res[1],unitVec[2]));
389 CPPUNIT_ASSERT(res[0]!=res[1]);
390 }
391
392 {
393 std::vector<Vector> res = lp1->getSphereIntersections();
394 CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
395 CPPUNIT_ASSERT((res[0]==unitVec[0]) || (res[0]==unitVec[1]));
396 CPPUNIT_ASSERT((res[1]==unitVec[0]) || (res[1]==unitVec[1]));
397 CPPUNIT_ASSERT(res[0]!=res[1]);
398 }
399
400 {
401 std::vector<Vector> res = lp2->getSphereIntersections();
402 CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
403 CPPUNIT_ASSERT((res[0]==unitVec[1]) || (res[0]==unitVec[2]));
404 CPPUNIT_ASSERT((res[1]==unitVec[1]) || (res[1]==unitVec[2]));
405 CPPUNIT_ASSERT(res[0]!=res[1]);
406 }
407
408 {
409 std::vector<Vector> res = lp3->getSphereIntersections();
410 CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
411 CPPUNIT_ASSERT((res[0]==unitVec[2]) || (res[0]==unitVec[0]));
412 CPPUNIT_ASSERT((res[1]==unitVec[2]) || (res[1]==unitVec[0]));
413 CPPUNIT_ASSERT(res[0]!=res[1]);
414 }
415}
Note: See TracBrowser for help on using the repository browser.