From 18a6b27cfed82e8b131d8709ddb68e9168a62171 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=B6bius?= Date: Fri, 28 Sep 2012 15:28:38 +0000 Subject: [PATCH] Unittest for random number generator git-svn-id: http://www.openmesh.org/svnrepo/OpenMesh/trunk@719 fdac6126-5c0c-442c-9429-916003d36597 --- src/Unittests/unittests.cc | 1 + .../unittests_randomNumberGenerator.hh | 92 +++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 src/Unittests/unittests_randomNumberGenerator.hh diff --git a/src/Unittests/unittests.cc b/src/Unittests/unittests.cc index 44ec6240..b849f4fc 100644 --- a/src/Unittests/unittests.cc +++ b/src/Unittests/unittests.cc @@ -15,6 +15,7 @@ #include "unittests_add_face.hh" #include "unittests_faceless_mesh.hh" #include "unittests_trimesh_garbage_collection.hh" +#include "unittests_randomNumberGenerator.hh" int main(int _argc, char** _argv) { diff --git a/src/Unittests/unittests_randomNumberGenerator.hh b/src/Unittests/unittests_randomNumberGenerator.hh new file mode 100644 index 00000000..91b57b7e --- /dev/null +++ b/src/Unittests/unittests_randomNumberGenerator.hh @@ -0,0 +1,92 @@ +#ifndef INCLUDE_UNITTESTS_RANDOMNUMBER_HH +#define INCLUDE_UNITTESTS_RANDOMNUMBER_HH + +#include +#include + +class RandomNumberGenerator : public testing::Test { + + protected: + + // This function is called before each test is run + virtual void SetUp() { + + // Do some initial stuff with the member data here... + } + + // This function is called after all tests are through + virtual void TearDown() { + + // Do some final stuff with the member data here... + } + + // Member already defined in OpenMeshBase + //Mesh mesh_; +}; + +/* + * ==================================================================== + * Define tests below + * ==================================================================== + */ + +TEST_F(RandomNumberGenerator, RandomNumberGeneratorMaxTestHighres) { + + + OpenMesh::RandomNumberGenerator rng(100000000); + + unsigned int lowerZero = 0; + unsigned int above1 = 0; + + double average = 0.0; + + for ( unsigned int i = 0 ; i < 100000000 ; ++i) { + double randomNumber = rng.getRand(); + if ( randomNumber < 0.0 ) + lowerZero++; + + if ( randomNumber > 1.0 ) + above1++; + + average += randomNumber; + } + + average /= 100000000.0; + + EXPECT_EQ(0u, lowerZero ) << "Below zero!"; + EXPECT_EQ(0u, above1 ) << "Above zero!"; + + EXPECT_TRUE( (average - 0.5) < 0.01 ) << "Expected value not 0.5"; +} + +TEST_F(RandomNumberGenerator, RandomNumberGeneratorMaxTestLowres) { + + OpenMesh::RandomNumberGenerator rng(1000); + + unsigned int lowerZero = 0; + unsigned int above1 = 0; + + double average = 0.0; + + for ( unsigned int i = 0 ; i < 10000000 ; ++i) { + + double randomNumber = rng.getRand(); + if ( randomNumber < 0.0 ) + lowerZero++; + + if ( randomNumber > 1.0 ) + above1++; + + average += randomNumber; + } + + average /= 10000000.0; + + EXPECT_EQ(0u, lowerZero ) << "Below zero!"; + EXPECT_EQ(0u, above1 ) << "Above zero!"; + + EXPECT_TRUE( (average - 0.5) < 0.01 ) << "Expected value not 0.5"; +} + + +#endif // INCLUDE GUARD