source: src/unittests/ChronosUnitTest.cpp@ bbd746

Last change on this file since bbd746 was 8e24ef, checked in by Frederik Heber <heber@…>, 15 years ago

Chronos is so far fully working.

  • Library version is now 7:0:0, API version is 1.1.0.
  • using either time.h or sys/times.h if present to measure timing.
  • Property mode set to 100644
File size: 3.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 * 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 "Chronos.hpp"
25#include "Info.hpp"
26
27#include "ChronosUnitTest.hpp"
28
29#ifdef HAVE_TESTRUNNER
30#include "UnitTestMain.hpp"
31#endif /*HAVE_TESTRUNNER*/
32
33/********************************************** Test classes **************************************/
34
35// Registers the fixture into the 'registry'
36CPPUNIT_TEST_SUITE_REGISTRATION( ChronosTest );
37
38
39void dummy()
40{
41 Info FunctionInfo(__func__);
42 for (int i=0;i<10000000;++i)
43 std::cout << "";
44}
45
46void dummy_two()
47{
48 Info FunctionInfo(__func__);
49 for (int i=0;i<1000000;++i)
50 std::cout << "";
51}
52
53
54void ChronosTest::setUp()
55{
56}
57
58void ChronosTest::tearDown()
59{
60 Chronos::purgeInstance();
61}
62
63/**
64 * UnitTest for Chronos()
65 */
66void ChronosTest::InstanceTest()
67{
68 // check that we get a Non-NULL pointer
69 CPPUNIT_ASSERT(Chronos::getPointer());
70}
71
72/**
73 * UnitTest for Chronos()
74 */
75void ChronosTest::InfoTest()
76{
77 Info FunctionInfo(__func__);
78 CPPUNIT_ASSERT_EQUAL( (size_t) 1, Info::NumberInfos );
79}
80
81/**
82 * UnitTest for Chronos()
83 */
84void ChronosTest::dummyTest()
85{
86 double timings[4];
87 // first dummy
88 dummy();
89 CPPUNIT_ASSERT( Chronos::getInstance().TimeRunning.find(std::string("dummy"))
90 != Chronos::getInstance().TimeRunning.end() );
91 CPPUNIT_ASSERT_EQUAL( (size_t) 1, Chronos::getInstance().SumUpTotalFunctions() );
92 timings[0] = Chronos::getInstance().AccountedTime[std::string("dummy")];
93 std::cout << "Timing[0]: " << timings[0] << std::endl;
94 CPPUNIT_ASSERT(timings[0] > 0.);
95 dummy();
96 // second call goes to same entry
97 CPPUNIT_ASSERT_EQUAL( (size_t) 1, Chronos::getInstance().SumUpTotalFunctions() );
98 timings[1] = Chronos::getInstance().AccountedTime[std::string("dummy")] - timings[0];
99 std::cout << "Timing[1]: " << timings[1] << std::endl;
100 CPPUNIT_ASSERT(timings[1] > 0.);
101
102
103 // second dummy
104 dummy_two();
105 CPPUNIT_ASSERT( Chronos::getInstance().TimeRunning.find(std::string("dummy_two"))
106 != Chronos::getInstance().TimeRunning.end() );
107 CPPUNIT_ASSERT_EQUAL( (size_t) 2, Chronos::getInstance().SumUpTotalFunctions() );
108 timings[2] = Chronos::getInstance().AccountedTime[std::string("dummy_two")];
109 std::cout << "Timing[2]: " << timings[2] << std::endl;
110 CPPUNIT_ASSERT(timings[2] > 0.);
111
112 // "inline" dummy
113 {
114 Info DummyInfo("dummy_three");
115 for (int i=0;i<1000000;++i)
116 std::cout << "";
117 }
118 CPPUNIT_ASSERT( Chronos::getInstance().TimeRunning.find(std::string("dummy_three"))
119 != Chronos::getInstance().TimeRunning.end() );
120 CPPUNIT_ASSERT_EQUAL( (size_t) 3, Chronos::getInstance().SumUpTotalFunctions() );
121 timings[3] = Chronos::getInstance().AccountedTime[std::string("dummy_three")];
122 std::cout << "Timing[3]: " << timings[3] << std::endl;
123 CPPUNIT_ASSERT(timings[3] > 0.);
124
125 // check summing of times
126 CPPUNIT_ASSERT_EQUAL( timings[0] + timings[1] + timings[2] + timings[3], Chronos::getInstance().SumUpTotalTime());
127
128 std::cout << Chronos::getInstance() << std::endl;
129}
Note: See TracBrowser for help on using the repository browser.