source: src/Parameters/unittests/ContinuousValueTest.cpp@ 33d0af

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 33d0af was 6c05d8, checked in by Michael Ankele <ankele@…>, 13 years ago

FIX: Value<string>, empty validators

  • conversion string -> string only returned the part up to the first blank
  • replaced NULL validators with DummyValidator
  • unit tests corrected (because Parameter.clone() now works with unset values)
  • Property mode set to 100644
File size: 13.4 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 * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
6 */
7
8/*
9 * ContinuousValueTest.cpp
10 *
11 * Created on: Sep 29, 2011
12 * Author: heber
13 */
14
15// include config.h
16#ifdef HAVE_CONFIG_H
17#include <config.h>
18#endif
19
20#include "ContinuousValueTest.hpp"
21
22#include <cppunit/CompilerOutputter.h>
23#include <cppunit/extensions/TestFactoryRegistry.h>
24#include <cppunit/ui/text/TestRunner.h>
25
26#include "Parameters/Value.hpp"
27
28#ifdef HAVE_TESTRUNNER
29#include "UnitTestMain.hpp"
30#endif /*HAVE_TESTRUNNER*/
31
32// Registers the fixture into the 'registry'
33CPPUNIT_TEST_SUITE_REGISTRATION( ContinuousValueTest );
34
35
36void ContinuousValueTest::setUp()
37{
38 // failing asserts should be thrown
39 ASSERT_DO(Assert::Throw);
40
41 ValidIntRange = new range<int>(1,4);
42 ValidVectorRange = new range<Vector>(Vector(0,1,2), Vector(10,11,12));
43}
44
45void ContinuousValueTest::tearDown()
46{
47 delete ValidIntRange;
48 delete ValidVectorRange;
49}
50
51/************************************ tests ***********************************/
52
53/** Unit test for isValid.
54 *
55 */
56void ContinuousValueTest::isValidIntAsStringTest()
57{
58 // create instance
59 Value<int> test(*ValidIntRange);
60
61 // checking valid values
62 for (int i=1; i<=4;++i)
63 CPPUNIT_ASSERT_EQUAL(true, test.isValidAsString(toString(i)));
64
65 // checking invalid values
66 for (int i=-10; i<=0;++i)
67 CPPUNIT_ASSERT_EQUAL(false, test.isValidAsString(toString(i)));
68 for (int i=5; i<=0;++i)
69 CPPUNIT_ASSERT_EQUAL(false, test.isValidAsString(toString(i)));
70}
71
72/** Unit test for isValid.
73 *
74 */
75void ContinuousValueTest::isValidIntTest()
76{
77 // create instance
78 Value<int> test(*ValidIntRange);
79
80 // checking valid values
81 for (int i=1; i<=4;++i)
82 CPPUNIT_ASSERT_EQUAL(true, test.isValid(i));
83
84 // checking invalid values
85 for (int i=-10; i<=0;++i)
86 CPPUNIT_ASSERT_EQUAL(false, test.isValid(i));
87 for (int i=5; i<=0;++i)
88 CPPUNIT_ASSERT_EQUAL(false, test.isValid(i));
89}
90
91/** Unit test for setting/getting valid range.
92 *
93 */
94void ContinuousValueTest::setgetValidIntRangeTest()
95{
96 {
97 // create instance
98 Value<int> test(*ValidIntRange);
99
100 // extending range and checking
101 for (int i=5; i<=6;++i)
102 CPPUNIT_ASSERT_EQUAL(false, test.isValid(i));
103 test.setValidRange(range<int>(1,6));
104 for (int i=5; i<=6;++i)
105 CPPUNIT_ASSERT_EQUAL(true, test.isValid(i));
106 }
107
108 {
109 // create instance
110 Value<int> test(*ValidIntRange);
111
112 // lowering range with set value
113 test.set(4);
114 CPPUNIT_ASSERT_EQUAL(true, test.ValueSet);
115#ifndef NDEBUG
116 std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
117 CPPUNIT_ASSERT_THROW(test.setValidRange(range<int>(1,3)), Assert::AssertionFailure);
118#else
119 test.setValidRange(range<int>(1,3));
120#endif
121#ifndef NDEBUG
122 // no value is not set
123 std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
124 CPPUNIT_ASSERT_THROW(test.get(), Assert::AssertionFailure);
125#endif
126 // value gets invalidated in either case
127 CPPUNIT_ASSERT_EQUAL(false, test.ValueSet);
128 }
129}
130
131/** Unit test for setValue and getValue.
132 *
133 */
134void ContinuousValueTest::settergetterIntAsStringTest()
135{
136 // create instance
137 Value<int> test(*ValidIntRange);
138
139 // unset calling of get, throws
140#ifndef NDEBUG
141 std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
142 CPPUNIT_ASSERT_THROW(test.getAsString(), Assert::AssertionFailure);
143#endif
144
145 // setting invalid, throws
146#ifndef NDEBUG
147 std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
148 CPPUNIT_ASSERT_THROW(test.setAsString(toString(5)), Assert::AssertionFailure);
149#endif
150#ifndef NDEBUG
151 std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
152 CPPUNIT_ASSERT_THROW(test.setAsString(toString(0)), Assert::AssertionFailure);
153#endif
154
155 CPPUNIT_ASSERT_EQUAL(false, test.ValueSet);
156 // checking all valid ones
157 for (int i=1; i<=4;++i) {
158 test.setAsString(toString(i));
159 CPPUNIT_ASSERT_EQUAL(true, test.ValueSet);
160 CPPUNIT_ASSERT_EQUAL(toString(i), test.getAsString());
161 }
162}
163
164/** Unit test for setters and getters.
165 *
166 */
167void ContinuousValueTest::settergetterIntTest()
168{
169 // create instance
170 Value<int> test(*ValidIntRange);
171
172 // unset calling of get, throws
173#ifndef NDEBUG
174 std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
175 CPPUNIT_ASSERT_THROW(test.get(), Assert::AssertionFailure);
176#endif
177
178 // setting invalid, throws
179#ifndef NDEBUG
180 std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
181 CPPUNIT_ASSERT_THROW(test.set(5), Assert::AssertionFailure);
182#endif
183#ifndef NDEBUG
184 std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
185 CPPUNIT_ASSERT_THROW(test.set(0), Assert::AssertionFailure);
186#endif
187
188 // checking all valid ones
189 for (int i=1; i<=4;++i) {
190 test.set(i);
191 CPPUNIT_ASSERT_EQUAL(i, test.get());
192 }
193}
194
195/** Unit test for comparator.
196 *
197 */
198void ContinuousValueTest::comparatorIntTest()
199{
200 {
201 // create instance
202 Value<int> test(*ValidIntRange);
203 Value<int> instance(*ValidIntRange);
204 test.set(1);
205 instance.set(1);
206
207 // same value, same range
208 {
209 CPPUNIT_ASSERT(test == instance);
210 }
211
212 // different value, same range
213 {
214 const int oldvalue = instance.get();
215 instance.set(2);
216 CPPUNIT_ASSERT(test != instance);
217 instance.set(oldvalue);
218 }
219 }
220 {
221 Value<int> test(*ValidIntRange);
222 range<int> OtherValidIntRange(1,5);
223 Value<int> instance(OtherValidIntRange);
224
225 test.set(1);
226 instance.set(1);
227
228 // same value, same range
229 {
230 CPPUNIT_ASSERT(test != instance);
231 }
232
233 // different value, same range
234 {
235 const int oldvalue = instance.get();
236 instance.set(2);
237 CPPUNIT_ASSERT(test != instance);
238 instance.set(oldvalue);
239 }
240 }
241}
242
243
244
245/***************************** vector tests ***********************************/
246
247/** Unit test for isValid.
248 *
249 */
250void ContinuousValueTest::isValidVectorAsStringTest()
251{
252 // create instance
253 /*ContinuousValue<Vector> test(*ValidVectorRange);
254
255 // checking valid values
256 CPPUNIT_ASSERT_EQUAL(true, test.isValidValue(Vector(0,1,2)));
257 CPPUNIT_ASSERT_EQUAL(true, test.isValidValue(Vector(9.9,10.9,11.9)));
258 CPPUNIT_ASSERT_EQUAL(true, test.isValidValue(Vector(5,5,5)));
259
260 // checking invalid values
261 CPPUNIT_ASSERT_EQUAL(false, test.isValidValue(Vector(-0.1,0.9,1.9)));
262 CPPUNIT_ASSERT_EQUAL(false, test.isValidValue(Vector(10.1,11.1,12.1)));
263 CPPUNIT_ASSERT_EQUAL(false, test.isValidValue(Vector(5,5,-1)));
264 CPPUNIT_ASSERT_EQUAL(false, test.isValidValue(Vector(5,-1,5)));
265 CPPUNIT_ASSERT_EQUAL(false, test.isValidValue(Vector(-1,5,5)));
266 CPPUNIT_ASSERT_EQUAL(false, test.isValidValue(Vector(5,5,20)));
267 CPPUNIT_ASSERT_EQUAL(false, test.isValidValue(Vector(5,20,5)));
268 CPPUNIT_ASSERT_EQUAL(false, test.isValidValue(Vector(20,5,5)));
269 CPPUNIT_ASSERT_EQUAL(false, test.isValidValue(Vector(0,0,0)));
270 CPPUNIT_ASSERT_EQUAL(false, test.isValidValue(Vector(5,-1,-1)));
271 CPPUNIT_ASSERT_EQUAL(false, test.isValidValue(Vector(-1,5,-1)));
272 CPPUNIT_ASSERT_EQUAL(false, test.isValidValue(Vector(-1,-1,5)));
273 CPPUNIT_ASSERT_EQUAL(false, test.isValidValue(Vector(5,20,20)));
274 CPPUNIT_ASSERT_EQUAL(false, test.isValidValue(Vector(20,5,20)));
275 CPPUNIT_ASSERT_EQUAL(false, test.isValidValue(Vector(20,20,5)));*/
276}
277
278/** Unit test for isValid.
279 *
280 */
281void ContinuousValueTest::isValidVectorTest()
282{
283 // create instance
284 Value<Vector> test(*ValidVectorRange);
285
286 // checking valid values
287 CPPUNIT_ASSERT_EQUAL(true, test.isValid(Vector(0,1,2)));
288 CPPUNIT_ASSERT_EQUAL(true, test.isValid(Vector(9.9,10.9,11.9)));
289 CPPUNIT_ASSERT_EQUAL(true, test.isValid(Vector(5,5,5)));
290
291 // checking invalid values
292 CPPUNIT_ASSERT_EQUAL(false, test.isValid(Vector(-0.1,0.9,1.9)));
293 CPPUNIT_ASSERT_EQUAL(false, test.isValid(Vector(10.1,11.1,12.1)));
294 CPPUNIT_ASSERT_EQUAL(false, test.isValid(Vector(5,5,-1)));
295 CPPUNIT_ASSERT_EQUAL(false, test.isValid(Vector(5,-1,5)));
296 CPPUNIT_ASSERT_EQUAL(false, test.isValid(Vector(-1,5,5)));
297 CPPUNIT_ASSERT_EQUAL(false, test.isValid(Vector(5,5,20)));
298 CPPUNIT_ASSERT_EQUAL(false, test.isValid(Vector(5,20,5)));
299 CPPUNIT_ASSERT_EQUAL(false, test.isValid(Vector(20,5,5)));
300 CPPUNIT_ASSERT_EQUAL(false, test.isValid(Vector(0,0,0)));
301 CPPUNIT_ASSERT_EQUAL(false, test.isValid(Vector(5,-1,-1)));
302 CPPUNIT_ASSERT_EQUAL(false, test.isValid(Vector(-1,5,-1)));
303 CPPUNIT_ASSERT_EQUAL(false, test.isValid(Vector(-1,-1,5)));
304 CPPUNIT_ASSERT_EQUAL(false, test.isValid(Vector(5,20,20)));
305 CPPUNIT_ASSERT_EQUAL(false, test.isValid(Vector(20,5,20)));
306 CPPUNIT_ASSERT_EQUAL(false, test.isValid(Vector(20,20,5)));
307}
308
309/** Unit test for setting/getting valid range.
310 *
311 */
312void ContinuousValueTest::setgetValidVectorRangeTest()
313{
314 {
315 // create instance
316 Value<Vector> test(*ValidVectorRange);
317
318 // extending range and checking
319 for (int i=15; i<=16;++i)
320 CPPUNIT_ASSERT_EQUAL(false, test.isValid(Vector(i,5,5)));
321 test.setValidRange(range<Vector>(Vector(0,1,2),Vector(20,11,12)));
322 for (int i=15; i<=16;++i)
323 CPPUNIT_ASSERT_EQUAL(true, test.isValid(Vector(i,5,5)));
324 }
325
326 {
327 // create instance
328 Value<Vector> test(*ValidVectorRange);
329
330 // lowering range with set value
331 test.set(Vector(4,4,4));
332 CPPUNIT_ASSERT_EQUAL(true, test.ValueSet);
333#ifndef NDEBUG
334 std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
335 CPPUNIT_ASSERT_THROW(test.setValidRange(range<Vector>(Vector(1,1,1),Vector(3,3,3))), Assert::AssertionFailure);
336#else
337 test.setValidRange(range<Vector>(Vector(1,1,1),Vector(3,3,3)));
338#endif
339#ifndef NDEBUG
340 // no value is not set
341 std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
342 CPPUNIT_ASSERT_THROW(test.get(), Assert::AssertionFailure);
343#endif
344 // value gets invalidated in either case
345 CPPUNIT_ASSERT_EQUAL(false, test.ValueSet);
346 }
347}
348
349/** Unit test for setValue and getValue.
350 *
351 */
352void ContinuousValueTest::settergetterVectorAsStringTest()
353{
354 // create instance
355 /*Value<Vector> test(*ValidVectorRange);
356
357 // unset calling of get, throws
358#ifndef NDEBUG
359 std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
360 CPPUNIT_ASSERT_THROW(test.getValue(), Assert::AssertionFailure);
361#endif
362
363 // setting invalid, throws
364#ifndef NDEBUG
365 std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
366 CPPUNIT_ASSERT_THROW(test.setValue(Vector(5,0,0)), Assert::AssertionFailure);
367#endif
368#ifndef NDEBUG
369 std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
370 CPPUNIT_ASSERT_THROW(test.setValue(Vector(5,20,5)), Assert::AssertionFailure);
371#endif
372
373 CPPUNIT_ASSERT_EQUAL(false, test.ValueSet);
374 // checking some valid ones
375 for (int i=1; i<=4;++i) {
376 Vector v(i,5,5);
377 test.setValue(v);
378 CPPUNIT_ASSERT_EQUAL(true, test.ValueSet);
379 CPPUNIT_ASSERT_EQUAL(v, test.getValue());
380 }*/
381}
382
383/** Unit test for setters and getters.
384 *
385 */
386void ContinuousValueTest::settergetterVectorTest()
387{
388 // create instance
389 Value<Vector> test(*ValidVectorRange);
390
391 // unset calling of get, throws
392#ifndef NDEBUG
393 std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
394 CPPUNIT_ASSERT_THROW(test.get(), Assert::AssertionFailure);
395#endif
396
397 // setting invalid, throws
398#ifndef NDEBUG
399 std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
400 CPPUNIT_ASSERT_THROW(test.set(Vector(5,0,0)), Assert::AssertionFailure);
401#endif
402#ifndef NDEBUG
403 std::cout << "The following Assert failures are intended and do not indicate a failure of the test." << std::endl;
404 CPPUNIT_ASSERT_THROW(test.set(Vector(5,20,5)), Assert::AssertionFailure);
405#endif
406
407 CPPUNIT_ASSERT_EQUAL(false, test.ValueSet);
408 // checking some valid ones
409 for (int i=1; i<=4;++i) {
410 Vector v(i,5,5);
411 test.set(v);
412 CPPUNIT_ASSERT_EQUAL(true, test.ValueSet);
413 CPPUNIT_ASSERT_EQUAL(v, test.get());
414 }
415}
416
417/** Unit test for comparator.
418 *
419 */
420void ContinuousValueTest::comparatorVectorTest()
421{
422 {
423 // create instance
424 Value<Vector> test(*ValidVectorRange);
425 Value<Vector> instance(*ValidVectorRange);
426 test.set(Vector(5,6,7));
427 instance.set(Vector(5,6,7));
428
429 // same value, same range
430 {
431 CPPUNIT_ASSERT(test == instance);
432 }
433
434 // different value, same range
435 {
436 const Vector oldvalue = instance.get();
437 instance.set(Vector(2,3,4));
438 CPPUNIT_ASSERT(test != instance);
439 instance.set(oldvalue);
440 }
441 }
442 {
443 Value<Vector> test(*ValidVectorRange);
444 range<Vector> OtherValidVectorRange(Vector(0,1,2), Vector(20,21,22));
445 Value<Vector> instance(OtherValidVectorRange);
446
447 test.set(Vector(1,2,3));
448 instance.set(Vector(1,2,3));
449
450 // same value, same range
451 {
452 CPPUNIT_ASSERT(test != instance);
453 }
454
455 // different value, same range
456 {
457 const Vector oldvalue = instance.get();
458 instance.set(Vector(2,3,4));
459 CPPUNIT_ASSERT(test != instance);
460 instance.set(oldvalue);
461 }
462 }
463}
Note: See TracBrowser for help on using the repository browser.