split test_cron.cpp into test_cron_point and test_cron_interval
authorGerd von Egidy <gerd.von.egidy@intra2net.com>
Tue, 3 Feb 2009 08:56:43 +0000 (09:56 +0100)
committerGerd von Egidy <gerd.von.egidy@intra2net.com>
Tue, 3 Feb 2009 08:56:43 +0000 (09:56 +0100)
test/Makefile.am
test/test_cron.cpp [deleted file]
test/test_cron_interval.cpp [new file with mode: 0644]
test/test_cron_point.cpp [new file with mode: 0644]

index 31d151d..9fd5b7b 100644 (file)
@@ -2,8 +2,8 @@ INCLUDES = -I$(top_srcdir)/configlib -I$(top_srcdir)/src @CPPUNIT_CFLAGS@
 METASOURCES = AUTO
 check_PROGRAMS =  test
 test_SOURCES = ip_range.cpp stringfunc.cpp test.cpp test_containerfunc.cpp \
-       test_cron.cpp test_filefunc.cpp test_global_config.cpp test_logging.cpp \
-       test_pidfile.cpp test_timefunc.cpp
+       test_cron_interval.cpp test_cron_point.cpp test_filefunc.cpp test_global_config.cpp \
+       test_logging.cpp test_pidfile.cpp test_timefunc.cpp
 test_LDADD = $(top_builddir)/src/libi2ncommon.la \
        $(top_builddir)/configlib/libi2ncommon_config.la @CPPUNIT_LIBS@
 
diff --git a/test/test_cron.cpp b/test/test_cron.cpp
deleted file mode 100644 (file)
index 3c7624f..0000000
+++ /dev/null
@@ -1,638 +0,0 @@
-/** @file
- * @brief unit test for cron functions.
- *
- * @copyright Copyright &copy; 2009 by Intra2net AG
- * @license commercial
- * @contact info@intra2net.com
- *
- */
-
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <cppunit/extensions/HelperMacros.h>
-
-#include <time.h>
-#include <stdlib.h>
-#include <stdexcept>
-
-#include <cron.hpp>
-
-using namespace std;
-using namespace I2n::Time;
-using namespace CppUnit;
-
-class TestCronFunc : public TestFixture
-{
-    CPPUNIT_TEST_SUITE(TestCronFunc);
-
-    // Points in time
-    CPPUNIT_TEST(NotYetToday);
-    CPPUNIT_TEST(LaterToday);
-    CPPUNIT_TEST(Now);
-    CPPUNIT_TEST(Tomorrow);
-    CPPUNIT_TEST(NextWeek);
-    CPPUNIT_TEST(NextWeekFromToday);
-    CPPUNIT_TEST(StartMidnight);
-    CPPUNIT_TEST(StartMidnightTomorrow);
-    CPPUNIT_TEST(StartLastDaysec);
-    CPPUNIT_TEST(HalfOpenInterval);
-    CPPUNIT_TEST(LongBeforeDSTBackwards);
-    CPPUNIT_TEST(BeforeDSTBackwards);
-    CPPUNIT_TEST(AtDSTBackwards);
-    CPPUNIT_TEST(DuringDSTBackwards);
-    CPPUNIT_TEST(EndDSTBackwards1);
-    CPPUNIT_TEST(EndDSTBackwards2);
-    CPPUNIT_TEST(EndDSTBackwards3);
-    CPPUNIT_TEST(EndDSTBackwards4);
-    CPPUNIT_TEST(OverDSTBackwards);
-    CPPUNIT_TEST(OverDSTBackwardsDaychange);
-    CPPUNIT_TEST(LongBeforeDSTForward);
-    CPPUNIT_TEST(BeforeDSTForward);
-    CPPUNIT_TEST(AtDSTForward);
-    CPPUNIT_TEST(DuringDSTForward);
-    CPPUNIT_TEST(EndDSTForward1);
-    CPPUNIT_TEST(EndDSTForward2);
-    CPPUNIT_TEST(EndDSTForward3);
-    CPPUNIT_TEST(OverDSTForward);
-    CPPUNIT_TEST(OverDSTForwardDaychange);
-
-    // Intervals
-    CPPUNIT_TEST(IntervalBeginToday);
-    CPPUNIT_TEST(IntervalDoneToday);
-    CPPUNIT_TEST(IntervalBeginNow);
-    CPPUNIT_TEST(IntervalBeginStep);
-    CPPUNIT_TEST(IntervalWithin);
-    CPPUNIT_TEST(IntervalLaststep1);
-    CPPUNIT_TEST(IntervalLaststep2);
-    CPPUNIT_TEST(IntervalLaststep3);
-    CPPUNIT_TEST(IntervalLaststep4);
-    CPPUNIT_TEST(IntervalLaststep5);
-    CPPUNIT_TEST(IntervalLaststepMatch);
-    CPPUNIT_TEST(IntervalEnd);
-    CPPUNIT_TEST(IntervalBigstep);
-    CPPUNIT_TEST(IntervalWholeDayStart);
-    CPPUNIT_TEST(IntervalWholeDayStartNow);
-    CPPUNIT_TEST(IntervalWholeDayEnd);
-    CPPUNIT_TEST(IntervalWholeDayWithin1);
-    CPPUNIT_TEST(IntervalWholeDayWithin2);
-    CPPUNIT_TEST(IntervalWholeDayWithinBoundary);
-    CPPUNIT_TEST(IntervalBeforeOnce);
-    CPPUNIT_TEST(IntervalBeforeOnceBig);
-    CPPUNIT_TEST(IntervalAfterOnce);
-    CPPUNIT_TEST(IntervalOnceShort);
-    CPPUNIT_TEST(IntervalTooShort);
-    CPPUNIT_TEST(IntervalOverDSTBackwards1);
-    CPPUNIT_TEST(IntervalOverDSTBackwards2);
-    CPPUNIT_TEST(IntervalOverDSTBackwards3);
-    CPPUNIT_TEST(IntervalOverDSTBackwards4);
-    CPPUNIT_TEST(IntervalInFirstDSTBackwards1);
-    CPPUNIT_TEST(IntervalInFirstDSTBackwards2);
-    CPPUNIT_TEST(IntervalInSecondDSTBackwards1);
-    CPPUNIT_TEST(IntervalInSecondDSTBackwards2);
-    CPPUNIT_TEST(IntervalOutFirstDSTBackwards1);
-    CPPUNIT_TEST(IntervalOutFirstDSTBackwards2);
-    CPPUNIT_TEST(IntervalOutFirstDSTBackwards3);
-    CPPUNIT_TEST(IntervalOutFirstDSTBackwards4);
-    CPPUNIT_TEST(IntervalOutSecondDSTBackwards1);
-    CPPUNIT_TEST(IntervalOutSecondDSTBackwards2);
-    CPPUNIT_TEST(IntervalOutSecondDSTBackwards3);
-    CPPUNIT_TEST(IntervalOutSecondDSTBackwards4);
-
-    CPPUNIT_TEST(StartHourStaysTheSameTill2038);
-
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-
-    void setUp()
-    {
-        // our check-values are set for Germany
-        setenv("TZ",":Europe/Berlin",1);
-    }
-
-    void tearDown()
-    { }
-
-    /////////////////////////////////////////////////////
-    // Points in time
-    /////////////////////////////////////////////////////
-
-    void NotYetToday()
-    {
-        WeekCron cron("2345",3600);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100800), cron.get_next_run(1233099657));
-    }
-
-    void Now()
-    {
-        WeekCron cron("2345",3600);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100800));
-    }
-
-    void LaterToday()
-    {
-        WeekCron cron("2345",3600);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100801));
-    }
-
-    void Tomorrow()
-    {
-        WeekCron cron("45",3600);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233099657));
-    }
-
-    void NextWeek()
-    {
-        WeekCron cron("1",3600);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233532800), cron.get_next_run(1233099657));
-    }
-
-    void NextWeekFromToday()
-    {
-        WeekCron cron("13",3600);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233532800), cron.get_next_run(1233100801));
-    }
-
-    void StartMidnight()
-    {
-        WeekCron cron("2345",0);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
-    }
-
-    void StartMidnightTomorrow()
-    {
-        WeekCron cron("2345",0);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
-    }
-
-    void StartLastDaysec()
-    {
-        WeekCron cron("2345",86399);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183599), cron.get_next_run(1233097200));
-    }
-
-    void HalfOpenInterval()
-    {
-        WeekCron cron("2345",86400);
-        CPPUNIT_ASSERT_THROW(cron.get_next_run(1233097200),std::runtime_error);
-    }
-
-    void LongBeforeDSTBackwards()
-    {
-        WeekCron cron("0123456",75600);
-        // calc at: Sun Oct 26 00:00:00 CEST 2008
-        // expected next run: Sun Oct 26 20:00:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225047600), cron.get_next_run(1224968400));
-    }
-
-    void BeforeDSTBackwards()
-    {
-        WeekCron cron("0123456",7200);
-        // calc at: Sun Oct 26 02:59:59 CEST 2008
-        // expected next run: Sun Oct 26 02:00:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224979200), cron.get_next_run(1224979199));
-    }
-
-    void AtDSTBackwards()
-    {
-        WeekCron cron("0123456",7200);
-        // calc at: Sun Oct 26 02:00:00 CET 2008
-        // expected next run: Mon Oct 27 02:00:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225069200), cron.get_next_run(1224979200));
-    }
-
-    void DuringDSTBackwards()
-    {
-        WeekCron cron("0123456",7200);
-        // calc at: Sun Oct 26 02:00:01 CET 2008
-        // expected next run: Mon Oct 27 02:00:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225069200), cron.get_next_run(1224979201));
-    }
-
-    void EndDSTBackwards1()
-    {
-        WeekCron cron("0123456",10800);
-        // calc at: Sun Oct 26 02:00:00 CET 2008
-        // expected next run: Sun Oct 26 02:00:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224979200));
-    }
-
-    void EndDSTBackwards2()
-    {
-        WeekCron cron("0123456",10800);
-        // calc at: Sun Oct 26 02:00:01 CET 2008
-        // expected next run: Sun Oct 26 02:00:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224979201));
-    }
-
-    void EndDSTBackwards3()
-    {
-        WeekCron cron("0123456",10799);
-        // calc at: Sun Oct 26 02:00:01 CET 2008
-        // expected next run: Sun Oct 26 02:59:59 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982799), cron.get_next_run(1224979201));
-    }
-
-    void EndDSTBackwards4()
-    {
-        WeekCron cron("0123456",10799);
-        // calc at: Sun Oct 26 02:03:20 2008
-        // expected next run: Mon Oct 27 02:59:59 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225072799), cron.get_next_run(1224983000));
-    }
-
-    void OverDSTBackwards()
-    {
-        WeekCron cron("234",10800);
-        // calc at: Sat Oct 25 05:00:00 2008
-        // expected next run: Tue Oct 28 03:00:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225159200), cron.get_next_run(1224903600));
-    }
-
-    void OverDSTBackwardsDaychange()
-    {
-        WeekCron cron("234",0);
-        // calc at: Sat Oct 25 00:00:00 2008
-        // expected next run: Tue Oct 28 00:00:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225148400), cron.get_next_run(1224885600));
-    }
-
-    void LongBeforeDSTForward()
-    {
-        WeekCron cron("0123456",75600);
-        // calc at: Sat Mar 28 22:00:00 CET 2009
-        // expected next run: Sun Mar 29 22:00:00 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238356800), cron.get_next_run(1238274000));
-    }
-
-    void BeforeDSTForward()
-    {
-        WeekCron cron("0123456",7200);
-        // calc at: Sun Mar 29 01:59:59 CET 2009
-        // expected next run: Sun Mar 29 03:00:00 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
-    }
-
-    void AtDSTForward()
-    {
-        WeekCron cron("0123456",7200);
-        // calc at: Sun Mar 29 03:00:00 CEST 2009
-        // expected next run: Mon Mar 30 02:00:00 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238371200), cron.get_next_run(1238288400));
-    }
-
-    void DuringDSTForward()
-    {
-        WeekCron cron("0123456",9000);
-        // calc at: Sun Mar 29 01:59:59 CET 2009
-        // expected next run: Sun Mar 29 03:30:00 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238290200), cron.get_next_run(1238288399));
-    }
-
-    void EndDSTForward1()
-    {
-        WeekCron cron("0123456",10800);
-        // calc at: Sun Mar 29 01:59:59 CET 2009
-        // expected next run: Sun Mar 29 04:00:00 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238292000), cron.get_next_run(1238288399));
-    }
-
-    void EndDSTForward2()
-    {
-        WeekCron cron("0123456",10800);
-        // calc at: Sun Mar 29 03:00:00 2009
-        // expected next run: Sun Mar 29 04:00:00 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238292000), cron.get_next_run(1238288400));
-    }
-
-    void EndDSTForward3()
-    {
-        WeekCron cron("0123456",10800);
-        // calc at: Sun Mar 29 04:00:00 2009
-        // expected next run: Mon Mar 30 03:00:00 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238374800), cron.get_next_run(1238292000));
-    }
-
-    void OverDSTForward()
-    {
-        WeekCron cron("234",10800);
-        // calc at: Sat Mar 28 23:00:00 2009
-        // expected next run: Tue Mar 31 03:00:00 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238461200), cron.get_next_run(1238277600));
-    }
-
-    void OverDSTForwardDaychange()
-    {
-        WeekCron cron("1234",0);
-        // calc at: Sun Mar 29 00:00:00 2009
-        // expected next run: Mon Mar 30 00:00:00 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238364000), cron.get_next_run(1238281200));
-    }
-
-
-
-    /////////////////////////////////////////////////////
-    // Intervals
-    /////////////////////////////////////////////////////
-
-    void IntervalBeginToday()
-    {
-        WeekCron cron("2345",3600,7200,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100800), cron.get_next_run(1233099657));
-    }
-
-    void IntervalDoneToday()
-    {
-        WeekCron cron("2345",3600);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233150000));
-    }
-
-    void IntervalBeginNow()
-    {
-        WeekCron cron("2345",3600,7200,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100810), cron.get_next_run(1233100800));
-    }
-
-    void IntervalBeginStep()
-    {
-        WeekCron cron("2345",3600,7200,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100820), cron.get_next_run(1233100810));
-    }
-
-    void IntervalWithin()
-    {
-        WeekCron cron("2345",3600,7200,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100830), cron.get_next_run(1233100822));
-    }
-
-    void IntervalLaststep1()
-    {
-        WeekCron cron("2345",3600,7200,11);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104399));
-    }
-
-    void IntervalLaststep2()
-    {
-        WeekCron cron("2345",3600,7200,11);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104398));
-    }
-
-    void IntervalLaststep3()
-    {
-        WeekCron cron("2345",3600,7199,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104397));
-    }
-
-    void IntervalLaststep4()
-    {
-        WeekCron cron("2345",3600,7200,3599);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233104399), cron.get_next_run(1233104398));
-    }
-
-    void IntervalLaststep5()
-    {
-        WeekCron cron("2345",3600,7200,3598);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104398));
-    }
-
-    void IntervalLaststepMatch()
-    {
-        WeekCron cron("2345",3600,7200,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104399));
-    }
-
-    void IntervalEnd()
-    {
-        WeekCron cron("2345",3600,7200,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104400));
-    }
-
-    void IntervalBigstep()
-    {
-        WeekCron cron("2345",3600,7200,10000);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100800));
-    }
-
-    void IntervalWholeDayStart()
-    {
-        WeekCron cron("345",0,86400,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
-    }
-
-    void IntervalWholeDayStartNow()
-    {
-        WeekCron cron("345",0,86400,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097210), cron.get_next_run(1233097200));
-    }
-
-    void IntervalWholeDayEnd()
-    {
-        WeekCron cron("2",0,86400,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233615600), cron.get_next_run(1233097199));
-    }
-
-    void IntervalWholeDayWithin1()
-    {
-        WeekCron cron("2345",0,86400,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097230), cron.get_next_run(1233097220));
-    }
-
-    void IntervalWholeDayWithin2()
-    {
-        WeekCron cron("2345",0,86400,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097230), cron.get_next_run(1233097229));
-    }
-
-    void IntervalWholeDayWithinBoundary()
-    {
-        WeekCron cron("2345",0,86400,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
-    }
-
-    void IntervalBeforeOnce()
-    {
-        WeekCron cron("2345",0,3600,3600);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233100799));
-    }
-
-    void IntervalBeforeOnceBig()
-    {
-        WeekCron cron("2345",0,3600,86400);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233100799));
-    }
-
-    void IntervalAfterOnce()
-    {
-        WeekCron cron("2345",0,3600,86400);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
-    }
-
-    void IntervalOnceShort()
-    {
-        WeekCron cron("2345",0,1,86400);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
-    }
-
-    void IntervalTooShort()
-    {
-        WeekCron cron("2345",0,0,86400);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
-    }
-
-    void IntervalOverDSTBackwards1()
-    {
-        WeekCron cron("0123456",0,14400,60);
-        // calc at: Sun Oct 26 01:59:59 2008
-        // expected next run: Sun Oct 26 02:00:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224979200), cron.get_next_run(1224979199));
-    }
-
-    void IntervalOverDSTBackwards2()
-    {
-        WeekCron cron("0123456",0,14400,60);
-        // calc at: Sun Oct 26 02:29:59 2008
-        // expected next run: Sun Oct 26 02:30:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224981000), cron.get_next_run(1224980999));
-    }
-
-    void IntervalOverDSTBackwards3()
-    {
-        WeekCron cron("0123456",0,14400,60);
-        // calc at: Sun Oct 26 02:59:59 2008
-        // expected next run: Sun Oct 26 02:00:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224982799));
-    }
-
-    void IntervalOverDSTBackwards4()
-    {
-        WeekCron cron("0123456",0,14400,60);
-        // calc at: Sun Oct 26 02:59:59 2008
-        // expected next run: Mon Oct 27 00:00:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225062000), cron.get_next_run(1224986399));
-    }
-
-    void IntervalInFirstDSTBackwards1()
-    {
-        WeekCron cron("0123456",0,9000,60);
-        // calc at: Sun Oct 26 02:28:59 2008
-        // expected next run: Sun Oct 26 02:29:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224980940), cron.get_next_run(1224980939));
-    }
-
-    void IntervalInFirstDSTBackwards2()
-    {
-        WeekCron cron("0123456",0,9000,60);
-        // calc at: Sun Oct 26 02:29:01 2008
-        // expected next run: Mon Oct 27 00:00:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225062000), cron.get_next_run(1224980941));
-    }
-
-    void IntervalInSecondDSTBackwards1()
-    {
-        WeekCron cron("0123456",0,12600,60);
-        // calc at: Sun Oct 26 02:28:59 2008
-        // expected next run: Sun Oct 26 02:29:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984540), cron.get_next_run(1224984539));
-    }
-
-    void IntervalInSecondDSTBackwards2()
-    {
-        WeekCron cron("0123456",0,12600,60);
-        // calc at: Sun Oct 26 02:29:01 2008
-        // expected next run: Mon Oct 27 00:00:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225062000), cron.get_next_run(1224984541));
-    }
-
-    void IntervalOutFirstDSTBackwards1()
-    {
-        WeekCron cron("0123456",9000,18000,60);
-        // calc at: Sun Oct 26 02:29:00 2008
-        // expected next run: Sun Oct 26 02:30:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224981000), cron.get_next_run(1224980940));
-    }
-
-    void IntervalOutFirstDSTBackwards2()
-    {
-        WeekCron cron("0123456",9000,18000,60);
-        // calc at: Sun Oct 26 02:30:00 2008
-        // expected next run: Sun Oct 26 02:31:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224981060), cron.get_next_run(1224981000));
-    }
-
-    void IntervalOutFirstDSTBackwards3()
-    {
-        WeekCron cron("0123456",9000,18000,60);
-        // calc at: Sun Oct 26 02:59:59 CEST 2008
-        // expected next run: Sun Oct 26 02:00:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224982799));
-    }
-
-    void IntervalOutFirstDSTBackwards4()
-    {
-        WeekCron cron("0123456",9000,18000,60);
-        // calc at: Sun Oct 26 02:29:00 2008
-        // expected next run: Sun Oct 26 02:30:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984600), cron.get_next_run(1224984540));
-    }
-
-    void IntervalOutSecondDSTBackwards1()
-    {
-        WeekCron cron("0123456",12600,18000,60);
-        // calc at: Sun Oct 26 02:29:59 2008
-        // expected next run: Sun Oct 26 02:30:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984600), cron.get_next_run(1224984599));
-    }
-
-    void IntervalOutSecondDSTBackwards2()
-    {
-        WeekCron cron("0123456",12600,18000,60);
-        // calc at: Sun Oct 26 02:30:00 2008
-        // expected next run: Sun Oct 26 02:31:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984660), cron.get_next_run(1224984600));
-    }
-
-    void IntervalOutSecondDSTBackwards3()
-    {
-        WeekCron cron("0123456",12600,18000,60);
-        // calc at: Sun Oct 26 02:59:59 2008
-        // expected next run: Sun Oct 26 03:00:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224986400), cron.get_next_run(1224986399));
-    }
-
-    void IntervalOutSecondDSTBackwards4()
-    {
-        WeekCron cron("0123456",12600,18000,60);
-        // calc at: Sun Oct 26 03:00:00 2008
-        // expected next run: Sun Oct 26 03:01:00 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224986460), cron.get_next_run(1224986400));
-    }
-
-    void StartHourStaysTheSameTill2038()
-    {
-        int daysec = 79200;
-
-        // Schedule daily at 22h from 1970 till 01.01.2038. Check every 90 minutes.
-        WeekCron cron("0123456", daysec);
-        for (time_t now = 86400*15; now < 2145916800; now += 90*60)
-        {
-            time_t result = cron.get_next_run(now);
-
-            // Calculate unix time for the begin of the day
-            struct tm calc_daybegin;
-            bool conversion_ok = (localtime_r(&result, &calc_daybegin) != NULL);
-            CPPUNIT_ASSERT_EQUAL(true, conversion_ok);
-
-            calc_daybegin.tm_hour=0;
-            calc_daybegin.tm_min=0;
-            calc_daybegin.tm_sec=0;
-            // tm_isdst=-1 means to use the dst in use at the given time
-            calc_daybegin.tm_isdst=-1;
-
-            time_t daybegin = mktime(&calc_daybegin);
-
-            CPPUNIT_ASSERT_EQUAL(daybegin + daysec, result);
-        }
-    }
-};
-
-CPPUNIT_TEST_SUITE_REGISTRATION(TestCronFunc);
diff --git a/test/test_cron_interval.cpp b/test/test_cron_interval.cpp
new file mode 100644 (file)
index 0000000..c873607
--- /dev/null
@@ -0,0 +1,358 @@
+/** @file
+ * @brief unit test for cron functions.
+ *
+ * @copyright Copyright &copy; 2009 by Intra2net AG
+ * @license commercial
+ * @contact info@intra2net.com
+ *
+ */
+
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <time.h>
+#include <stdlib.h>
+#include <stdexcept>
+
+#include <cron.hpp>
+
+using namespace std;
+using namespace I2n::Time;
+using namespace CppUnit;
+
+class TestCronIntervalFunc : public TestFixture
+{
+    CPPUNIT_TEST_SUITE(TestCronIntervalFunc);
+
+    // Intervals
+    CPPUNIT_TEST(IntervalBeginToday);
+    CPPUNIT_TEST(IntervalDoneToday);
+    CPPUNIT_TEST(IntervalBeginNow);
+    CPPUNIT_TEST(IntervalBeginStep);
+    CPPUNIT_TEST(IntervalWithin);
+    CPPUNIT_TEST(IntervalLaststep1);
+    CPPUNIT_TEST(IntervalLaststep2);
+    CPPUNIT_TEST(IntervalLaststep3);
+    CPPUNIT_TEST(IntervalLaststep4);
+    CPPUNIT_TEST(IntervalLaststep5);
+    CPPUNIT_TEST(IntervalLaststepMatch);
+    CPPUNIT_TEST(IntervalEnd);
+    CPPUNIT_TEST(IntervalBigstep);
+    CPPUNIT_TEST(IntervalWholeDayStart);
+    CPPUNIT_TEST(IntervalWholeDayStartNow);
+    CPPUNIT_TEST(IntervalWholeDayEnd);
+    CPPUNIT_TEST(IntervalWholeDayWithin1);
+    CPPUNIT_TEST(IntervalWholeDayWithin2);
+    CPPUNIT_TEST(IntervalWholeDayWithinBoundary);
+    CPPUNIT_TEST(IntervalBeforeOnce);
+    CPPUNIT_TEST(IntervalBeforeOnceBig);
+    CPPUNIT_TEST(IntervalAfterOnce);
+    CPPUNIT_TEST(IntervalOnceShort);
+    CPPUNIT_TEST(IntervalTooShort);
+    CPPUNIT_TEST(IntervalOverDSTBackwards1);
+    CPPUNIT_TEST(IntervalOverDSTBackwards2);
+    CPPUNIT_TEST(IntervalOverDSTBackwards3);
+    CPPUNIT_TEST(IntervalOverDSTBackwards4);
+    CPPUNIT_TEST(IntervalInFirstDSTBackwards1);
+    CPPUNIT_TEST(IntervalInFirstDSTBackwards2);
+    CPPUNIT_TEST(IntervalInSecondDSTBackwards1);
+    CPPUNIT_TEST(IntervalInSecondDSTBackwards2);
+    CPPUNIT_TEST(IntervalOutFirstDSTBackwards1);
+    CPPUNIT_TEST(IntervalOutFirstDSTBackwards2);
+    CPPUNIT_TEST(IntervalOutFirstDSTBackwards3);
+    CPPUNIT_TEST(IntervalOutFirstDSTBackwards4);
+    CPPUNIT_TEST(IntervalOutSecondDSTBackwards1);
+    CPPUNIT_TEST(IntervalOutSecondDSTBackwards2);
+    CPPUNIT_TEST(IntervalOutSecondDSTBackwards3);
+    CPPUNIT_TEST(IntervalOutSecondDSTBackwards4);
+
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+
+    void setUp()
+    {
+        // our check-values are set for Germany
+        setenv("TZ",":Europe/Berlin",1);
+    }
+
+    void tearDown()
+    { }
+
+
+    void IntervalBeginToday()
+    {
+        WeekCron cron("2345",3600,7200,10);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100800), cron.get_next_run(1233099657));
+    }
+
+    void IntervalDoneToday()
+    {
+        WeekCron cron("2345",3600);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233150000));
+    }
+
+    void IntervalBeginNow()
+    {
+        WeekCron cron("2345",3600,7200,10);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100810), cron.get_next_run(1233100800));
+    }
+
+    void IntervalBeginStep()
+    {
+        WeekCron cron("2345",3600,7200,10);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100820), cron.get_next_run(1233100810));
+    }
+
+    void IntervalWithin()
+    {
+        WeekCron cron("2345",3600,7200,10);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100830), cron.get_next_run(1233100822));
+    }
+
+    void IntervalLaststep1()
+    {
+        WeekCron cron("2345",3600,7200,11);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104399));
+    }
+
+    void IntervalLaststep2()
+    {
+        WeekCron cron("2345",3600,7200,11);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104398));
+    }
+
+    void IntervalLaststep3()
+    {
+        WeekCron cron("2345",3600,7199,10);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104397));
+    }
+
+    void IntervalLaststep4()
+    {
+        WeekCron cron("2345",3600,7200,3599);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233104399), cron.get_next_run(1233104398));
+    }
+
+    void IntervalLaststep5()
+    {
+        WeekCron cron("2345",3600,7200,3598);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104398));
+    }
+
+    void IntervalLaststepMatch()
+    {
+        WeekCron cron("2345",3600,7200,10);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104399));
+    }
+
+    void IntervalEnd()
+    {
+        WeekCron cron("2345",3600,7200,10);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104400));
+    }
+
+    void IntervalBigstep()
+    {
+        WeekCron cron("2345",3600,7200,10000);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100800));
+    }
+
+    void IntervalWholeDayStart()
+    {
+        WeekCron cron("345",0,86400,10);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
+    }
+
+    void IntervalWholeDayStartNow()
+    {
+        WeekCron cron("345",0,86400,10);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097210), cron.get_next_run(1233097200));
+    }
+
+    void IntervalWholeDayEnd()
+    {
+        WeekCron cron("2",0,86400,10);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233615600), cron.get_next_run(1233097199));
+    }
+
+    void IntervalWholeDayWithin1()
+    {
+        WeekCron cron("2345",0,86400,10);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097230), cron.get_next_run(1233097220));
+    }
+
+    void IntervalWholeDayWithin2()
+    {
+        WeekCron cron("2345",0,86400,10);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097230), cron.get_next_run(1233097229));
+    }
+
+    void IntervalWholeDayWithinBoundary()
+    {
+        WeekCron cron("2345",0,86400,10);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
+    }
+
+    void IntervalBeforeOnce()
+    {
+        WeekCron cron("2345",0,3600,3600);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233100799));
+    }
+
+    void IntervalBeforeOnceBig()
+    {
+        WeekCron cron("2345",0,3600,86400);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233100799));
+    }
+
+    void IntervalAfterOnce()
+    {
+        WeekCron cron("2345",0,3600,86400);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
+    }
+
+    void IntervalOnceShort()
+    {
+        WeekCron cron("2345",0,1,86400);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
+    }
+
+    void IntervalTooShort()
+    {
+        WeekCron cron("2345",0,0,86400);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
+    }
+
+    void IntervalOverDSTBackwards1()
+    {
+        WeekCron cron("0123456",0,14400,60);
+        // calc at: Sun Oct 26 01:59:59 2008
+        // expected next run: Sun Oct 26 02:00:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224979200), cron.get_next_run(1224979199));
+    }
+
+    void IntervalOverDSTBackwards2()
+    {
+        WeekCron cron("0123456",0,14400,60);
+        // calc at: Sun Oct 26 02:29:59 2008
+        // expected next run: Sun Oct 26 02:30:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224981000), cron.get_next_run(1224980999));
+    }
+
+    void IntervalOverDSTBackwards3()
+    {
+        WeekCron cron("0123456",0,14400,60);
+        // calc at: Sun Oct 26 02:59:59 2008
+        // expected next run: Sun Oct 26 02:00:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224982799));
+    }
+
+    void IntervalOverDSTBackwards4()
+    {
+        WeekCron cron("0123456",0,14400,60);
+        // calc at: Sun Oct 26 02:59:59 2008
+        // expected next run: Mon Oct 27 00:00:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225062000), cron.get_next_run(1224986399));
+    }
+
+    void IntervalInFirstDSTBackwards1()
+    {
+        WeekCron cron("0123456",0,9000,60);
+        // calc at: Sun Oct 26 02:28:59 2008
+        // expected next run: Sun Oct 26 02:29:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224980940), cron.get_next_run(1224980939));
+    }
+
+    void IntervalInFirstDSTBackwards2()
+    {
+        WeekCron cron("0123456",0,9000,60);
+        // calc at: Sun Oct 26 02:29:01 2008
+        // expected next run: Mon Oct 27 00:00:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225062000), cron.get_next_run(1224980941));
+    }
+
+    void IntervalInSecondDSTBackwards1()
+    {
+        WeekCron cron("0123456",0,12600,60);
+        // calc at: Sun Oct 26 02:28:59 2008
+        // expected next run: Sun Oct 26 02:29:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984540), cron.get_next_run(1224984539));
+    }
+
+    void IntervalInSecondDSTBackwards2()
+    {
+        WeekCron cron("0123456",0,12600,60);
+        // calc at: Sun Oct 26 02:29:01 2008
+        // expected next run: Mon Oct 27 00:00:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225062000), cron.get_next_run(1224984541));
+    }
+
+    void IntervalOutFirstDSTBackwards1()
+    {
+        WeekCron cron("0123456",9000,18000,60);
+        // calc at: Sun Oct 26 02:29:00 2008
+        // expected next run: Sun Oct 26 02:30:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224981000), cron.get_next_run(1224980940));
+    }
+
+    void IntervalOutFirstDSTBackwards2()
+    {
+        WeekCron cron("0123456",9000,18000,60);
+        // calc at: Sun Oct 26 02:30:00 2008
+        // expected next run: Sun Oct 26 02:31:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224981060), cron.get_next_run(1224981000));
+    }
+
+    void IntervalOutFirstDSTBackwards3()
+    {
+        WeekCron cron("0123456",9000,18000,60);
+        // calc at: Sun Oct 26 02:59:59 CEST 2008
+        // expected next run: Sun Oct 26 02:00:00 CET 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224982799));
+    }
+
+    void IntervalOutFirstDSTBackwards4()
+    {
+        WeekCron cron("0123456",9000,18000,60);
+        // calc at: Sun Oct 26 02:29:00 2008
+        // expected next run: Sun Oct 26 02:30:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984600), cron.get_next_run(1224984540));
+    }
+
+    void IntervalOutSecondDSTBackwards1()
+    {
+        WeekCron cron("0123456",12600,18000,60);
+        // calc at: Sun Oct 26 02:29:59 2008
+        // expected next run: Sun Oct 26 02:30:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984600), cron.get_next_run(1224984599));
+    }
+
+    void IntervalOutSecondDSTBackwards2()
+    {
+        WeekCron cron("0123456",12600,18000,60);
+        // calc at: Sun Oct 26 02:30:00 2008
+        // expected next run: Sun Oct 26 02:31:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984660), cron.get_next_run(1224984600));
+    }
+
+    void IntervalOutSecondDSTBackwards3()
+    {
+        WeekCron cron("0123456",12600,18000,60);
+        // calc at: Sun Oct 26 02:59:59 2008
+        // expected next run: Sun Oct 26 03:00:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224986400), cron.get_next_run(1224986399));
+    }
+
+    void IntervalOutSecondDSTBackwards4()
+    {
+        WeekCron cron("0123456",12600,18000,60);
+        // calc at: Sun Oct 26 03:00:00 2008
+        // expected next run: Sun Oct 26 03:01:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224986460), cron.get_next_run(1224986400));
+    }
+
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(TestCronIntervalFunc);
diff --git a/test/test_cron_point.cpp b/test/test_cron_point.cpp
new file mode 100644 (file)
index 0000000..0bd5752
--- /dev/null
@@ -0,0 +1,318 @@
+/** @file
+ * @brief unit test for cron functions.
+ *
+ * @copyright Copyright &copy; 2009 by Intra2net AG
+ * @license commercial
+ * @contact info@intra2net.com
+ *
+ */
+
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <time.h>
+#include <stdlib.h>
+#include <stdexcept>
+
+#include <cron.hpp>
+
+using namespace std;
+using namespace I2n::Time;
+using namespace CppUnit;
+
+class TestCronPointFunc : public TestFixture
+{
+    CPPUNIT_TEST_SUITE(TestCronPointFunc);
+
+    // Points in time
+    CPPUNIT_TEST(NotYetToday);
+    CPPUNIT_TEST(LaterToday);
+    CPPUNIT_TEST(Now);
+    CPPUNIT_TEST(Tomorrow);
+    CPPUNIT_TEST(NextWeek);
+    CPPUNIT_TEST(NextWeekFromToday);
+    CPPUNIT_TEST(StartMidnight);
+    CPPUNIT_TEST(StartMidnightTomorrow);
+    CPPUNIT_TEST(StartLastDaysec);
+    CPPUNIT_TEST(HalfOpenInterval);
+    CPPUNIT_TEST(LongBeforeDSTBackwards);
+    CPPUNIT_TEST(BeforeDSTBackwards);
+    CPPUNIT_TEST(AtDSTBackwards);
+    CPPUNIT_TEST(DuringDSTBackwards);
+    CPPUNIT_TEST(EndDSTBackwards1);
+    CPPUNIT_TEST(EndDSTBackwards2);
+    CPPUNIT_TEST(EndDSTBackwards3);
+    CPPUNIT_TEST(EndDSTBackwards4);
+    CPPUNIT_TEST(OverDSTBackwards);
+    CPPUNIT_TEST(OverDSTBackwardsDaychange);
+    CPPUNIT_TEST(LongBeforeDSTForward);
+    CPPUNIT_TEST(BeforeDSTForward);
+    CPPUNIT_TEST(AtDSTForward);
+    CPPUNIT_TEST(DuringDSTForward);
+    CPPUNIT_TEST(EndDSTForward1);
+    CPPUNIT_TEST(EndDSTForward2);
+    CPPUNIT_TEST(EndDSTForward3);
+    CPPUNIT_TEST(OverDSTForward);
+    CPPUNIT_TEST(OverDSTForwardDaychange);
+
+    CPPUNIT_TEST(StartHourStaysTheSameTill2038);
+
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+
+    void setUp()
+    {
+        // our check-values are set for Germany
+        setenv("TZ",":Europe/Berlin",1);
+    }
+
+    void tearDown()
+    { }
+
+    /////////////////////////////////////////////////////
+    // Points in time
+    /////////////////////////////////////////////////////
+
+    void NotYetToday()
+    {
+        WeekCron cron("2345",3600);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100800), cron.get_next_run(1233099657));
+    }
+
+    void Now()
+    {
+        WeekCron cron("2345",3600);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100800));
+    }
+
+    void LaterToday()
+    {
+        WeekCron cron("2345",3600);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100801));
+    }
+
+    void Tomorrow()
+    {
+        WeekCron cron("45",3600);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233099657));
+    }
+
+    void NextWeek()
+    {
+        WeekCron cron("1",3600);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233532800), cron.get_next_run(1233099657));
+    }
+
+    void NextWeekFromToday()
+    {
+        WeekCron cron("13",3600);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233532800), cron.get_next_run(1233100801));
+    }
+
+    void StartMidnight()
+    {
+        WeekCron cron("2345",0);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
+    }
+
+    void StartMidnightTomorrow()
+    {
+        WeekCron cron("2345",0);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
+    }
+
+    void StartLastDaysec()
+    {
+        WeekCron cron("2345",86399);
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183599), cron.get_next_run(1233097200));
+    }
+
+    void HalfOpenInterval()
+    {
+        WeekCron cron("2345",86400);
+        CPPUNIT_ASSERT_THROW(cron.get_next_run(1233097200),std::runtime_error);
+    }
+
+    void LongBeforeDSTBackwards()
+    {
+        WeekCron cron("0123456",75600);
+        // calc at: Sun Oct 26 00:00:00 CEST 2008
+        // expected next run: Sun Oct 26 20:00:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225047600), cron.get_next_run(1224968400));
+    }
+
+    void BeforeDSTBackwards()
+    {
+        WeekCron cron("0123456",7200);
+        // calc at: Sun Oct 26 02:59:59 CEST 2008
+        // expected next run: Sun Oct 26 02:00:00 CET 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224979200), cron.get_next_run(1224979199));
+    }
+
+    void AtDSTBackwards()
+    {
+        WeekCron cron("0123456",7200);
+        // calc at: Sun Oct 26 02:00:00 CET 2008
+        // expected next run: Mon Oct 27 02:00:00 CET 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225069200), cron.get_next_run(1224979200));
+    }
+
+    void DuringDSTBackwards()
+    {
+        WeekCron cron("0123456",7200);
+        // calc at: Sun Oct 26 02:00:01 CET 2008
+        // expected next run: Mon Oct 27 02:00:00 CET 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225069200), cron.get_next_run(1224979201));
+    }
+
+    void EndDSTBackwards1()
+    {
+        WeekCron cron("0123456",10800);
+        // calc at: Sun Oct 26 02:00:00 CET 2008
+        // expected next run: Sun Oct 26 02:00:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224979200));
+    }
+
+    void EndDSTBackwards2()
+    {
+        WeekCron cron("0123456",10800);
+        // calc at: Sun Oct 26 02:00:01 CET 2008
+        // expected next run: Sun Oct 26 02:00:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224979201));
+    }
+
+    void EndDSTBackwards3()
+    {
+        WeekCron cron("0123456",10799);
+        // calc at: Sun Oct 26 02:00:01 CET 2008
+        // expected next run: Sun Oct 26 02:59:59 CET 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982799), cron.get_next_run(1224979201));
+    }
+
+    void EndDSTBackwards4()
+    {
+        WeekCron cron("0123456",10799);
+        // calc at: Sun Oct 26 02:03:20 2008
+        // expected next run: Mon Oct 27 02:59:59 CET 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225072799), cron.get_next_run(1224983000));
+    }
+
+    void OverDSTBackwards()
+    {
+        WeekCron cron("234",10800);
+        // calc at: Sat Oct 25 05:00:00 2008
+        // expected next run: Tue Oct 28 03:00:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225159200), cron.get_next_run(1224903600));
+    }
+
+    void OverDSTBackwardsDaychange()
+    {
+        WeekCron cron("234",0);
+        // calc at: Sat Oct 25 00:00:00 2008
+        // expected next run: Tue Oct 28 00:00:00 2008
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225148400), cron.get_next_run(1224885600));
+    }
+
+    void LongBeforeDSTForward()
+    {
+        WeekCron cron("0123456",75600);
+        // calc at: Sat Mar 28 22:00:00 CET 2009
+        // expected next run: Sun Mar 29 22:00:00 2009
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238356800), cron.get_next_run(1238274000));
+    }
+
+    void BeforeDSTForward()
+    {
+        WeekCron cron("0123456",7200);
+        // calc at: Sun Mar 29 01:59:59 CET 2009
+        // expected next run: Sun Mar 29 03:00:00 CEST 2009
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
+    }
+
+    void AtDSTForward()
+    {
+        WeekCron cron("0123456",7200);
+        // calc at: Sun Mar 29 03:00:00 CEST 2009
+        // expected next run: Mon Mar 30 02:00:00 2009
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238371200), cron.get_next_run(1238288400));
+    }
+
+    void DuringDSTForward()
+    {
+        WeekCron cron("0123456",9000);
+        // calc at: Sun Mar 29 01:59:59 CET 2009
+        // expected next run: Sun Mar 29 03:30:00 CEST 2009
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238290200), cron.get_next_run(1238288399));
+    }
+
+    void EndDSTForward1()
+    {
+        WeekCron cron("0123456",10800);
+        // calc at: Sun Mar 29 01:59:59 CET 2009
+        // expected next run: Sun Mar 29 04:00:00 2009
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238292000), cron.get_next_run(1238288399));
+    }
+
+    void EndDSTForward2()
+    {
+        WeekCron cron("0123456",10800);
+        // calc at: Sun Mar 29 03:00:00 2009
+        // expected next run: Sun Mar 29 04:00:00 2009
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238292000), cron.get_next_run(1238288400));
+    }
+
+    void EndDSTForward3()
+    {
+        WeekCron cron("0123456",10800);
+        // calc at: Sun Mar 29 04:00:00 2009
+        // expected next run: Mon Mar 30 03:00:00 2009
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238374800), cron.get_next_run(1238292000));
+    }
+
+    void OverDSTForward()
+    {
+        WeekCron cron("234",10800);
+        // calc at: Sat Mar 28 23:00:00 2009
+        // expected next run: Tue Mar 31 03:00:00 2009
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238461200), cron.get_next_run(1238277600));
+    }
+
+    void OverDSTForwardDaychange()
+    {
+        WeekCron cron("1234",0);
+        // calc at: Sun Mar 29 00:00:00 2009
+        // expected next run: Mon Mar 30 00:00:00 2009
+        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238364000), cron.get_next_run(1238281200));
+    }
+
+    void StartHourStaysTheSameTill2038()
+    {
+        int daysec = 79200;
+
+        // Schedule daily at 22h from 1970 till 01.01.2038. Check every 90 minutes.
+        WeekCron cron("0123456", daysec);
+        for (time_t now = 86400*15; now < 2145916800; now += 90*60)
+        {
+            time_t result = cron.get_next_run(now);
+
+            // Calculate unix time for the begin of the day
+            struct tm calc_daybegin;
+            bool conversion_ok = (localtime_r(&result, &calc_daybegin) != NULL);
+            CPPUNIT_ASSERT_EQUAL(true, conversion_ok);
+
+            calc_daybegin.tm_hour=0;
+            calc_daybegin.tm_min=0;
+            calc_daybegin.tm_sec=0;
+            // tm_isdst=-1 means to use the dst in use at the given time
+            calc_daybegin.tm_isdst=-1;
+
+            time_t daybegin = mktime(&calc_daybegin);
+
+            CPPUNIT_ASSERT_EQUAL(daybegin + daysec, result);
+        }
+    }
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(TestCronPointFunc);