source: src/Helpers/unittests/ChronosUnitTest.cpp@ 084729c

Action_Thermostats Add_AtomRandomPerturbation Add_RotateAroundBondAction Add_SelectAtomByNameAction Adding_Graph_to_ChangeBondActions Adding_MD_integration_tests Adding_StructOpt_integration_tests Automaking_mpqc_open AutomationFragmentation_failures Candidate_v1.6.0 Candidate_v1.6.1 ChangeBugEmailaddress ChangingTestPorts ChemicalSpaceEvaluator Combining_Subpackages Debian_Package_split Debian_package_split_molecuildergui_only Disabling_MemDebug Docu_Python_wait EmpiricalPotential_contain_HomologyGraph_documentation Enable_parallel_make_install Enhance_userguide Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Example_ManyWaysToTranslateAtom Exclude_Hydrogens_annealWithBondGraph FitPartialCharges_GlobalError Fix_ChronosMutex Fix_StatusMsg Fix_StepWorldTime_single_argument Fix_Verbose_Codepatterns ForceAnnealing_goodresults ForceAnnealing_oldresults ForceAnnealing_tocheck ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion GeometryObjects Gui_displays_atomic_force_velocity IndependentFragmentGrids_IntegrationTest JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool JobMarket_unresolvable_hostname_fix ODR_violation_mpqc_open PartialCharges_OrthogonalSummation PythonUI_with_named_parameters QtGui_reactivate_TimeChanged_changes Recreated_GuiChecks RotateToPrincipalAxisSystem_UndoRedo StoppableMakroAction Subpackage_CodePatterns Subpackage_JobMarket Subpackage_levmar Subpackage_mpqc_open Subpackage_vmg ThirdParty_MPQC_rebuilt_buildsystem TremoloParser_IncreasedPrecision TremoloParser_MultipleTimesteps Ubuntu_1604_changes stable
Last change on this file since 084729c was 084729c, checked in by Frederik Heber <heber@…>, 8 years ago

Squashed 'ThirdParty/CodePatterns/' content from commit c1e1041

git-subtree-dir: ThirdParty/CodePatterns
git-subtree-split: c1e10418c454f98be2f43d93167642b0008428fc

  • Property mode set to 100644
File size: 5.6 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 * ChronosUnitTest.cpp
10 */
11
12
13// include config.h
14#ifdef HAVE_CONFIG_H
15#include <config.h>
16#endif
17
18using namespace std;
19
20#include <cppunit/CompilerOutputter.h>
21#include <cppunit/extensions/TestFactoryRegistry.h>
22#include <cppunit/ui/text/TestRunner.h>
23
24#include <limits>
25
26#include "CodePatterns/Chronos.hpp"
27
28#include "ChronosUnitTest.hpp"
29
30#ifdef HAVE_TESTRUNNER
31#include "UnitTestMain.hpp"
32#endif /*HAVE_TESTRUNNER*/
33
34/********************************************** Test classes **************************************/
35
36// Registers the fixture into the 'registry'
37CPPUNIT_TEST_SUITE_REGISTRATION( ChronosTest );
38
39
40void dummy()
41{
42 Chronos::getInstance().startTiming(__func__);
43 for (int i=0;i<10000000;++i)
44 std::cout << "";
45 Chronos::getInstance().endTiming(__func__);
46}
47
48void dummy_two()
49{
50 Chronos::getInstance().startTiming(__func__);
51 for (int i=0;i<1000000;++i)
52 std::cout << "";
53 Chronos::getInstance().endTiming(__func__);
54}
55
56static size_t level = 0;
57
58void dummyRecursion()
59{
60 if (level > 2)
61 return;
62 ++level;
63 Chronos::getInstance().startTiming(__func__);
64 for (int i=0;i<10;++i) {
65 std::cout << "";
66 dummyRecursion();
67 }
68 Chronos::getInstance().endTiming(__func__);
69 --level;
70}
71
72
73void ChronosTest::setUp()
74{
75}
76
77void ChronosTest::tearDown()
78{
79 Chronos::purgeInstance();
80}
81
82/**
83 * UnitTest for Chronos()
84 */
85void ChronosTest::InstanceTest()
86{
87 // check that we get a Non-NULL pointer
88 CPPUNIT_ASSERT(Chronos::getPointer());
89}
90
91/**
92 * UnitTest for Chronos()
93 */
94void ChronosTest::dummyTest()
95{
96 double timings[5];
97 // first dummy
98 dummy();
99 CPPUNIT_ASSERT( Chronos::getInstance().StartingTime.find(std::string("dummy"))
100 == Chronos::getInstance().StartingTime.end() );
101 CPPUNIT_ASSERT( Chronos::getInstance().AccountedTime.find(std::string("dummy"))
102 != Chronos::getInstance().AccountedTime.end() );
103 CPPUNIT_ASSERT_EQUAL( (size_t) 1, Chronos::getInstance().SumUpTotalFunctions() );
104 timings[0] = Chronos::getInstance().AccountedTime[std::string("dummy")];
105 std::cout << "Timing[0]: " << timings[0] << std::endl;
106 CPPUNIT_ASSERT(timings[0] > 0.);
107
108 // second call goes to same entry
109 dummy();
110 CPPUNIT_ASSERT_EQUAL( (size_t) 1, Chronos::getInstance().SumUpTotalFunctions() );
111 timings[1] = Chronos::getInstance().AccountedTime[std::string("dummy")] - timings[0];
112 std::cout << "Timing[1]: " << timings[1] << std::endl;
113 CPPUNIT_ASSERT(timings[1] > 0.);
114
115 // second dummy
116 dummy_two();
117 CPPUNIT_ASSERT( Chronos::getInstance().AccountedTime.find(std::string("dummy_two"))
118 != Chronos::getInstance().AccountedTime.end() );
119 CPPUNIT_ASSERT_EQUAL( (size_t) 2, Chronos::getInstance().SumUpTotalFunctions() );
120 timings[2] = Chronos::getInstance().AccountedTime[std::string("dummy_two")];
121 std::cout << "Timing[2]: " << timings[2] << std::endl;
122 CPPUNIT_ASSERT(timings[2] > 0.);
123
124 // recursive dummy
125 dummyRecursion();
126 CPPUNIT_ASSERT( Chronos::getInstance().RecursionMap.find(std::string("dummyRecursion"))
127 != Chronos::getInstance().RecursionMap.end() );
128 CPPUNIT_ASSERT( Chronos::getInstance().AccountedTime.find(std::string("dummyRecursion"))
129 != Chronos::getInstance().AccountedTime.end() );
130 CPPUNIT_ASSERT_EQUAL( (size_t) 3, Chronos::getInstance().SumUpTotalFunctions() );
131 timings[3] = Chronos::getInstance().AccountedTime[std::string("dummyRecursion")];
132 std::cout << "Timing[3]: " << timings[3] << std::endl;
133 CPPUNIT_ASSERT(timings[3] > 0.);
134
135 // "inline" dummy
136 {
137 Chronos::getInstance().startTiming("dummy_three");
138 for (int i=0;i<1000000;++i)
139 std::cout << "";
140 Chronos::getInstance().endTiming("dummy_three");
141 }
142 CPPUNIT_ASSERT( Chronos::getInstance().AccountedTime.find(std::string("dummy_three"))
143 != Chronos::getInstance().AccountedTime.end() );
144 CPPUNIT_ASSERT_EQUAL( (size_t) 4, Chronos::getInstance().SumUpTotalFunctions() );
145 timings[4] = Chronos::getInstance().AccountedTime[std::string("dummy_three")];
146 std::cout << "Timing[4]: " << timings[4] << std::endl;
147 CPPUNIT_ASSERT(timings[4] > 0.);
148
149 // check summing of times
150 CPPUNIT_ASSERT( fabs(timings[0] + timings[1] + timings[2] + timings[3] + timings[4]- Chronos::getInstance().SumUpTotalTime()) < numeric_limits<double>::epsilon());
151
152 std::cout << Chronos::getInstance() << std::endl;
153}
154
155/**
156 * UnitTest for Chronos::calculateCorrectTimeDifference()
157 */
158void ChronosTest::calculateCorrectTimeDifferenceTest()
159{
160 Chronos::sec_ncsec_t first;
161 Chronos::sec_ncsec_t second;
162 {
163 // 1.1 - 0.01
164 first.first = 1;
165 first.second = 1e8;
166 second.first = 0;
167 second.second = 1e7;
168 double difference = Chronos::calculateCorrectTimeDifference(first, second);
169 CPPUNIT_ASSERT( fabs(1.1-0.01 - difference) < std::numeric_limits<double>::epsilon()*1e2);
170// CPPUNIT_ASSERT_EQUAL( 1.1-0.01, difference);
171 }
172 {
173 // 1.1 - 0.9
174 first.first = 1;
175 first.second = 1e8;
176 second.first = 0;
177 second.second = 9e8;
178 double difference = Chronos::calculateCorrectTimeDifference(first, second);
179 // CPPUNIT_ASSERT_EQUAL( 1.1-0.9, difference);
180 CPPUNIT_ASSERT( fabs(1.1-0.9 - difference) < std::numeric_limits<double>::epsilon()*1e2);
181 }
182 {
183 // 1000.1 - 0.9
184 first.first = 1000;
185 first.second = 1e8;
186 second.first = 0;
187 second.second = 9e8;
188 double difference = Chronos::calculateCorrectTimeDifference(first, second);
189// CPPUNIT_ASSERT_EQUAL( 1000.1-0.9, difference);
190 CPPUNIT_ASSERT( fabs(1000.1-0.9 - difference) < std::numeric_limits<double>::epsilon()*1e2);
191 }
192}
Note: See TracBrowser for help on using the repository browser.