diff --git a/tests/TESTTIMER.DATA b/tests/TESTTIMER.DATA
new file mode 100644
index 00000000..efe90c9e
--- /dev/null
+++ b/tests/TESTTIMER.DATA
@@ -0,0 +1,49 @@
+RUNSPEC
+
+START
+ 26 'MAR' 2014 /
+
+TSTEP
+1.0 2*5.0
+ /
+
+TSTEP
+ 7*10.0 14*25.0
+ /
+
+TSTEP
+ 19.0
+ /
+
+TSTEP
+ 18*13.0
+ /
+
+TSTEP
+ 17*10.0
+ /
+
+TSTEP
+ 13.0
+ /
+
+TSTEP
+ 18.0
+ /
+
+TSTEP
+ 11.0
+ /
+
+TSTEP
+ 17*5.0
+ /
+
+TSTEP
+ 19*6.0
+ /
+
+TSTEP
+ 21*5.0 /
+
+END ==
diff --git a/tests/test_timer.cpp b/tests/test_timer.cpp
new file mode 100644
index 00000000..e02d150c
--- /dev/null
+++ b/tests/test_timer.cpp
@@ -0,0 +1,111 @@
+/*
+ Copyright 2012 SINTEF ICT, Applied Mathematics.
+
+ This file is part of the Open Porous Media project (OPM).
+
+ OPM is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OPM is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OPM. If not, see .
+*/
+
+#include
+
+#if HAVE_DYNAMIC_BOOST_TEST
+#define BOOST_TEST_DYN_LINK
+#endif
+
+#define NVERBOSE // Suppress own messages when throw()ing
+
+#define BOOST_TEST_MODULE OPM-TimerTest
+#include
+
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+BOOST_AUTO_TEST_CASE(CreateTimer)
+{
+ const std::string filename1 = "TESTTIMER.DATA";
+ Opm::ParserPtr parser(new Opm::Parser() );
+ Opm::DeckConstPtr parserDeck = parser->parseFile( filename1 );
+
+ Opm::TimeMapPtr timeMap(new Opm::TimeMap(parserDeck));
+ Opm::SimulatorTimer simtimer;
+
+ boost::gregorian::date defaultStartDate( 2012, 1, 1);
+ BOOST_CHECK_EQUAL( boost::posix_time::ptime(defaultStartDate), simtimer.currentDateTime() );
+
+ simtimer.init(timeMap);
+ boost::gregorian::date startDate( 2014, 3, 26);
+ BOOST_CHECK_EQUAL( boost::posix_time::ptime(startDate), simtimer.currentDateTime() );
+
+ BOOST_CHECK_EQUAL( 0, simtimer.currentStepNum() );
+ BOOST_CHECK_EQUAL( 0., simtimer.simulationTimeElapsed() );
+ BOOST_CHECK_EQUAL( 120, simtimer.numSteps() );
+ BOOST_CHECK_EQUAL( 1200., Opm::unit::convert::to(simtimer.totalTime(), Opm::unit::day) );
+ BOOST_CHECK_EQUAL( 0., Opm::unit::convert::to(simtimer.simulationTimeElapsed(), Opm::unit::day) );
+
+ double testCurrentTime = 0.;
+ BOOST_CHECK_EQUAL( Opm::unit::convert::to(testCurrentTime, Opm::unit::day),
+ Opm::unit::convert::to(simtimer.simulationTimeElapsed(), Opm::unit::day) );
+
+ for ( int i = 0; i < simtimer.numSteps(); ++i ) {
+ BOOST_CHECK_EQUAL( i, simtimer.currentStepNum() );
+ BOOST_CHECK_EQUAL( Opm::unit::convert::to(testCurrentTime, Opm::unit::minute),
+ Opm::unit::convert::to(simtimer.simulationTimeElapsed(), Opm::unit::minute) );
+ testCurrentTime += simtimer.currentStepLength();
+ ++simtimer;
+ }
+
+ for ( int i = 0; i <= simtimer.numSteps(); ++i ) {
+ simtimer.setCurrentStepNum(i);
+ BOOST_CHECK_EQUAL( i, simtimer.currentStepNum() );
+ }
+
+ BOOST_CHECK_EQUAL( true, simtimer.done() );
+ simtimer.setCurrentStepNum(0);
+ BOOST_CHECK_EQUAL( false, simtimer.done() );
+ BOOST_CHECK_EQUAL( 0., Opm::unit::convert::to(simtimer.simulationTimeElapsed(), Opm::unit::day) );
+
+ simtimer.setCurrentStepNum(120);
+ BOOST_CHECK_EQUAL( Opm::unit::convert::to(simtimer.simulationTimeElapsed(), Opm::unit::day),
+ Opm::unit::convert::to(simtimer.totalTime(), Opm::unit::day) );
+
+ int i = 0;
+ double testCurrentTime1 = 0.;
+ double testCurrentTime2 = 0.;
+ simtimer.setCurrentStepNum(0);
+
+ while (!simtimer.done()) {
+ testCurrentTime1 += simtimer.currentStepLength();
+ BOOST_CHECK_EQUAL( i, simtimer.currentStepNum() );
+ ++i;
+ ++simtimer;
+ testCurrentTime2 += simtimer.stepLengthTaken();
+ BOOST_CHECK_EQUAL( Opm::unit::convert::to(testCurrentTime1, Opm::unit::minute),
+ Opm::unit::convert::to(simtimer.simulationTimeElapsed(), Opm::unit::minute) );
+ BOOST_CHECK_EQUAL( Opm::unit::convert::to(testCurrentTime2, Opm::unit::minute),
+ Opm::unit::convert::to(simtimer.simulationTimeElapsed(), Opm::unit::minute) );
+ }
+
+ BOOST_CHECK_EQUAL( true, simtimer.done() );
+ BOOST_CHECK_EQUAL( Opm::unit::convert::to(testCurrentTime1, Opm::unit::minute),
+ Opm::unit::convert::to(simtimer.totalTime(), Opm::unit::minute) );
+ BOOST_CHECK_EQUAL( Opm::unit::convert::to(testCurrentTime2, Opm::unit::minute),
+ Opm::unit::convert::to(simtimer.totalTime(), Opm::unit::minute) );
+
+}