source: src/RandomNumbers/unittests/RandomNumberDistributionFactoryUnitTest.cpp@ 94605f

Last change on this file since 94605f was 94605f, checked in by Frederik Heber <heber@…>, 10 years ago

Replaced .. by getConstInstance() wherever possible.

  • Property mode set to 100644
File size: 5.7 KB
RevLine 
[c9bc2b7]1/*
2 * Project: MoleCuilder
3 * Description: creates and alters molecular systems
[0aa122]4 * Copyright (C) 2010-2012 University of Bonn. All rights reserved.
[94d5ac6]5 *
6 *
7 * This file is part of MoleCuilder.
8 *
9 * MoleCuilder is free software: you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation, either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * MoleCuilder is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with MoleCuilder. If not, see <http://www.gnu.org/licenses/>.
[c9bc2b7]21 */
22/*
23 * RandomNumberDistributionFactoryUnitTest.cpp
24 *
25 * Created on: Jan 03, 2011
26 * Author: heber
27 */
28// include config.h
29#ifdef HAVE_CONFIG_H
30#include <config.h>
31#endif
32#include <cppunit/CompilerOutputter.h>
33#include <cppunit/extensions/TestFactoryRegistry.h>
34#include <cppunit/ui/text/TestRunner.h>
35#include "CodePatterns/Assert.hpp"
36
37#include "RandomNumberDistributionFactoryUnitTest.hpp"
[9b3476]38
39#include "RandomNumbers/RandomNumberDistribution.hpp"
[c9bc2b7]40#include "RandomNumbers/RandomNumberDistribution_Encapsulation.hpp"
41#include "RandomNumbers/RandomNumberDistributionFactory.hpp"
42
43#include <boost/nondet_random.hpp>
44#include <boost/random.hpp>
45#include <boost/random/additive_combine.hpp>
46#include <boost/random/discard_block.hpp>
47#include <boost/random/inversive_congruential.hpp>
48#include <boost/random/lagged_fibonacci.hpp>
49#include <boost/random/linear_congruential.hpp>
50#include <boost/random/linear_feedback_shift.hpp>
51#include <boost/random/mersenne_twister.hpp>
52#include <boost/random/random_number_generator.hpp>
53#include <boost/random/ranlux.hpp>
54#include <boost/random/shuffle_output.hpp>
55#include <boost/random/subtract_with_carry.hpp>
56#include <boost/random/xor_combine.hpp>
57#include <boost/random/bernoulli_distribution.hpp>
58#include <boost/random/binomial_distribution.hpp>
59#include <boost/random/cauchy_distribution.hpp>
60#include <boost/random/exponential_distribution.hpp>
61#include <boost/random/gamma_distribution.hpp>
62#include <boost/random/geometric_distribution.hpp>
63#include <boost/random/linear_congruential.hpp>
64#include <boost/random/lognormal_distribution.hpp>
65#include <boost/random/normal_distribution.hpp>
66#include <boost/random/poisson_distribution.hpp>
67#include <boost/random/triangle_distribution.hpp>
68#include <boost/random/uniform_01.hpp>
69#include <boost/random/uniform_int.hpp>
70#include <boost/random/uniform_on_sphere.hpp>
71#include <boost/random/uniform_real.hpp>
72#include <boost/random/uniform_smallint.hpp>
73
74#include <typeinfo>
75
76#ifdef HAVE_TESTRUNNER
77#include "UnitTestMain.hpp"
78#endif /*HAVE_TESTRUNNER*/
79
80/********************************************** Test classes **************************************/
81
82// Registers the fixture into the 'registry'
83CPPUNIT_TEST_SUITE_REGISTRATION( RandomNumberDistributionFactoryTest );
84
85void RandomNumberDistributionFactoryTest::setUp()
86{
[9b3476]87 rndA = NULL;
88 rndA_1 = NULL;
89 rndA_2 = NULL;
[0275ad]90 rndA_3 = NULL;
[c9bc2b7]91 RandomNumberDistributionFactory::getInstance();
92}
93
94void RandomNumberDistributionFactoryTest::tearDown()
95{
[9b3476]96 delete rndA;
97 delete rndA_1;
98 delete rndA_2;
[0275ad]99 delete rndA_3;
[c9bc2b7]100 RandomNumberDistributionFactory::purgeInstance();
101}
102
103void RandomNumberDistributionFactoryTest::DistributionTest()
104{
105 // check the injectiveness of enum and string map
[94605f]106 const RandomNumberDistributionFactory& factory = RandomNumberDistributionFactory::getConstInstance();
107 for (RandomNumberDistributionFactory::NameMap::const_iterator iter =
108 RandomNumberDistributionFactory::names.begin();
109 iter != RandomNumberDistributionFactory::names.end();
[c9bc2b7]110 ++iter) {
111 CPPUNIT_ASSERT_EQUAL(
112 iter->second,
[94605f]113 factory.getName( factory.getEnum(iter->second) )
[c9bc2b7]114 );
115 }
116
117 // check one of the distributions in the table
[94605f]118 rndA = RandomNumberDistributionFactory::ManipulablePrototypeTable[RandomNumberDistributionFactory::uniform_smallint]->clone();
[c9bc2b7]119 CPPUNIT_ASSERT_EQUAL(
120 std::string(typeid(boost::uniform_smallint<> ).name()),
[9b3476]121 rndA->name()
[c9bc2b7]122 );
[081e5d]123
124 // check min and max of uniform_smallint
125 CPPUNIT_ASSERT_EQUAL( 0., rndA->min() );
126 CPPUNIT_ASSERT_EQUAL( 9., rndA->max() );
[94605f]127 rndA = NULL;
[c9bc2b7]128}
[9b3476]129
[0275ad]130void RandomNumberDistributionFactoryTest::PrototypeManipulationTest()
131{
[94605f]132 const RandomNumberDistributionFactory& factory = RandomNumberDistributionFactory::getConstInstance();
[0275ad]133 // make unmodified clone
[94605f]134 rndA_1 = factory.getProduct(RandomNumberDistributionFactory::uniform_smallint);
[0275ad]135
136 // do something with the prototype
137 RandomNumberDistribution_Parameters *params =
138 rndA_1->getParameterSet();
139 CPPUNIT_ASSERT( 20. != rndA_1->max() );
140 params->max = 20.;
141 RandomNumberDistributionFactory::getInstance().
142 manipulatePrototype(RandomNumberDistributionFactory::uniform_smallint, *params);
143 // ... and check max
144 rndA_2 = RandomNumberDistributionFactory::getInstance().
145 getProduct(RandomNumberDistributionFactory::uniform_smallint);
146 CPPUNIT_ASSERT_EQUAL( 20., rndA_2->max());
147 CPPUNIT_ASSERT( rndA_1->max() != rndA_2->max());
148 // ... and check min (remains the same)
149 CPPUNIT_ASSERT( rndA_1->min() == rndA_2->min());
150
151 // do something with the prototype again
152 params->max = 25.;
153 RandomNumberDistributionFactory::getInstance().
154 manipulatePrototype(std::string("uniform_smallint"), *params);
155 // ... and check
[94605f]156 rndA_3 = factory.getProduct(RandomNumberDistributionFactory::uniform_smallint);
[0275ad]157 CPPUNIT_ASSERT_EQUAL( 25., rndA_3->max());
158 CPPUNIT_ASSERT( rndA_1->max() != rndA_3->max());
159 CPPUNIT_ASSERT( rndA_2->max() != rndA_3->max());
160
161 delete params;
162}
Note: See TracBrowser for help on using the repository browser.