From c164c4575da0747076693f4163fa01ec6fb766a7 Mon Sep 17 00:00:00 2001
From: Ralf Mueller <ralf.mueller@zmaw.de>
Date: Fri, 8 Apr 2016 15:47:15 +0200
Subject: [PATCH] put all test under libcheck

---
 check/mtime_timedelta_test.c | 73 ++++++++++++++++++++++++++++++++++++
 doc/Makefile.in              |  2 +-
 2 files changed, 74 insertions(+), 1 deletion(-)

diff --git a/check/mtime_timedelta_test.c b/check/mtime_timedelta_test.c
index b286392c..3ee4ce9d 100644
--- a/check/mtime_timedelta_test.c
+++ b/check/mtime_timedelta_test.c
@@ -574,6 +574,77 @@ START_TEST(test_mtime_add_months)
 }
 END_TEST
 
+/**
+ * check adding negative time periods
+ */
+START_TEST(test_add_negative_delta)
+{
+  struct _datetime *dummy;
+  struct _datetime *init = newDateTime("1111-11-11T00:00:00.000");
+  struct _timedelta *delta = newTimeDelta("PT10M");
+  struct _timedelta *minusdelta = newTimeDelta("-PT10M");
+  char init_s[MAX_DATETIME_STR_LEN];
+
+  ck_assert_str_eq("1111-11-11T00:10:00.000",datetimeToString(addTimeDeltaToDateTime(init,delta,init),init_s));
+  ck_assert_str_eq("1111-11-11T00:20:00.000",datetimeToString(addTimeDeltaToDateTime(init,delta,init),init_s));
+  ck_assert_str_eq("1111-11-11T00:10:00.000",datetimeToString(addTimeDeltaToDateTime(init,minusdelta,init),init_s));
+  ck_assert_str_eq("1111-11-11T00:00:00.000",datetimeToString(addTimeDeltaToDateTime(init,minusdelta,init),init_s));
+}
+END_TEST
+
+/**
+ * test events created with offset to trigger 10 minutes before end of months
+ */
+START_TEST(test_event_at_end_of_month)
+{
+  /* some lines stolen from model_integrate.c */
+  char current_time[MAX_DATETIME_STR_LEN];  // Again, we use *STR_LEN.
+  char current_step[MAX_TIMEDELTA_STR_LEN]; // and here too.
+  struct _timedelta *timestep  = newTimeDelta("PT10M");
+  struct _datetime *dummy;
+  struct _datetime *start_date = newDateTime("2013-01-01T00:00:00.000");
+  struct _datetime *stop_date  = newDateTime("2014-03-03T14:00:00.000");
+  struct _datetime *model_time = newDateTime("2013-01-01T00:00:00.000");
+
+  struct _event* out = newEvent("outputEvent",
+                                "2013-01-01T00:00:00.000",
+                                "2013-01-01T00:00:00.000",
+                                "2019-01-01T00:00:00.000",
+                                "P1M",
+                                 NULL);
+  struct _event* outAtEnd = newEvent("outputEventAtEnd",
+                                     "2012-12-31T23:50:00.000",
+                                     "2013-01-01T00:00:00.000",
+                                     "2019-01-01T00:00:00.000",
+                                     "P1M",
+                                     NULL);
+
+#ifdef EBUG
+  printf("Model time step: %s\n", timedeltaToString(timestep, current_step));
+  printf("Model start time: %s\n\n", datetimeToString(model_time, current_time));
+#endif
+
+  do
+    {
+      /* check if outputEvent is active */
+      dummy = addTimeDeltaToDateTime(model_time,newTimeDelta("PT10"),dummy);
+      bool activeOut      = isCurrentEventActive(out,model_time, NULL, NULL);
+      bool activeOutShift = isCurrentEventActive(out,dummy , NULL, NULL);
+      bool activeOutAtEnd = isCurrentEventActive(outAtEnd,model_time, NULL, NULL);
+#ifdef EBUG
+      if (activeOut || activeOutAtEnd || activeOutShift) printf("Model time: %s  ", datetimeToString(model_time, current_time));
+      if (activeOut)                   printf("outputEvent active! ");
+      if (activeOutAtEnd)              printf("outputEventAtEnd active!");
+      if (activeOutShift)              printf("outputShifted    active!");
+      if (activeOut || activeOutAtEnd ) printf("\n");
+#endif
+
+      addTimeDeltaToDateTime(model_time, timestep, model_time); /* Increment time by timestep. */
+
+
+    } while (compareDatetime(model_time, stop_date) <= 0);
+}
+END_TEST
 static void setup_ProlepticGregorian(void)
 {
 	initCalendar(PROLEPTIC_GREGORIAN);
@@ -624,6 +695,8 @@ void add_mtime_timedelta_test_to_suite(Suite* suite)
         tcase_add_test(tcase_timedeltaCompute,test_timeDeltaAddLeadingZero);
         tcase_add_test(tcase_timedeltaCompute,test_mtime_add_months);
         tcase_add_test(tcase_timedeltaCompute,test_mtime_add_months_atEnd);
+        tcase_add_test(tcase_timedeltaCompute,test_add_negative_delta);
+        tcase_add_test(tcase_timedeltaCompute,test_event_at_end_of_month);
         tcase_add_test(tcase_timedeltaCompute,test_timeDeltaMilliseconds);
 }
 
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 8969603f..0b89088e 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -403,8 +403,8 @@ distclean-generic:
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
-@DX_COND_doc_FALSE@mostlyclean-local:
 @DX_COND_doc_FALSE@install-data-local:
+@DX_COND_doc_FALSE@mostlyclean-local:
 clean: clean-am
 
 clean-am: clean-generic clean-libtool mostlyclean-am
-- 
GitLab