aboutsummaryrefslogtreecommitdiffstats
path: root/roms/skiboot/libc/test/run-time.c
diff options
context:
space:
mode:
authorAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
committerAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
commitaf1a266670d040d2f4083ff309d732d648afba2a (patch)
tree2fc46203448ddcc6f81546d379abfaeb323575e9 /roms/skiboot/libc/test/run-time.c
parente02cda008591317b1625707ff8e115a4841aa889 (diff)
Add submodule dependency filesHEADmaster
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'roms/skiboot/libc/test/run-time.c')
-rw-r--r--roms/skiboot/libc/test/run-time.c86
1 files changed, 86 insertions, 0 deletions
diff --git a/roms/skiboot/libc/test/run-time.c b/roms/skiboot/libc/test/run-time.c
new file mode 100644
index 000000000..95e83e5a9
--- /dev/null
+++ b/roms/skiboot/libc/test/run-time.c
@@ -0,0 +1,86 @@
+// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
+/*
+ * Copyright 2014-2015 IBM Corp.
+ */
+#include "/usr/include/assert.h"
+#include <stdio.h>
+#include <libc/include/time.h>
+#include <stdint.h>
+
+#include "../time.c"
+
+#define MKTIME_TEST(Y,M,D,h,m,s,t) \
+ tm.tm_year = Y; \
+ tm.tm_mon = M; \
+ tm.tm_mday = D; \
+ tm.tm_hour = h; \
+ tm.tm_min = m; \
+ tm.tm_sec = s; \
+ assert(mktime(&tm) == t); \
+ assert(tm.tm_year == Y); \
+ assert(tm.tm_mon == M); \
+ assert(tm.tm_mday == D); \
+ assert(tm.tm_hour == h); \
+ assert(tm.tm_min == m); \
+ assert(tm.tm_sec == s)
+
+#define GMTIME_TEST(Y,M,D,h,m,s,tv) \
+ t = tv; \
+ gmtime_r(&t, &tm); \
+ assert(tm.tm_year == Y); \
+ assert(tm.tm_mon == M); \
+ assert(tm.tm_mday == D); \
+ assert(tm.tm_hour == h); \
+ assert(tm.tm_min == m); \
+ assert(tm.tm_sec == s)
+
+#define TIME_TEST(Y,M,D,h,m,s,tv) \
+ MKTIME_TEST(Y,M,D,h,m,s,tv); \
+ GMTIME_TEST(Y,M,D,h,m,s,tv)
+
+int main(void)
+{
+ struct tm tm;
+ time_t t = 0;
+
+ TIME_TEST(1970, 0, 1, 0, 0, 0, 0);
+ TIME_TEST(1971, 0, 1, 0, 0, 0, 365*SECS_PER_DAY);
+ TIME_TEST(1972, 0, 1, 0, 0, 0, 2*365*SECS_PER_DAY);
+ TIME_TEST(1972, 11, 31, 0, 0, 0, 3*365*SECS_PER_DAY);
+ TIME_TEST(1973, 0, 1, 0, 0, 0, (3*365+1)*SECS_PER_DAY);
+ TIME_TEST(2000, 11, 31, 0, 0, 0, 978220800);
+ TIME_TEST(2001, 0, 1, 0, 0, 0, 978307200);
+ TIME_TEST(2003, 11, 31, 0, 0, 0, 1072828800);
+ TIME_TEST(2004, 0, 1, 0, 0, 0, 1072828800+SECS_PER_DAY);
+ TIME_TEST(2004, 11, 29, 0, 0, 0, 1072828800+364*SECS_PER_DAY);
+ TIME_TEST(2004, 11, 30, 0, 0, 0, 1072828800+365*SECS_PER_DAY);
+ TIME_TEST(2004, 11, 31, 0, 0, 0, 1072828800+366*SECS_PER_DAY);
+ TIME_TEST(2004, 11, 31, 23, 59, 59, 1072828800+367*SECS_PER_DAY-1);
+ TIME_TEST(2100, 11, 31, 0, 0, 0, 4133894400);
+ TIME_TEST(2101, 0, 1, 0, 0, 0, 4133980800);
+
+ /* Test the normalisation functionality of mktime */
+ tm.tm_year = 2000;
+ tm.tm_mon = 1;
+ tm.tm_mday = 10;
+ tm.tm_hour = 5;
+ tm.tm_min = 32;
+ tm.tm_sec = 105;
+ mktime(&tm);
+ assert(tm.tm_year == 2000);
+ assert(tm.tm_mon == 1);
+ assert(tm.tm_mday == 10);
+ assert(tm.tm_hour == 5);
+ assert(tm.tm_min == 33);
+ assert(tm.tm_sec == 45);
+ tm.tm_sec += 366*24*60*60;
+ mktime(&tm);
+ assert(tm.tm_year == 2001);
+ assert(tm.tm_mon == 1);
+ assert(tm.tm_mday == 10);
+ assert(tm.tm_hour == 5);
+ assert(tm.tm_min == 33);
+ assert(tm.tm_sec == 45);
+
+ return 0;
+}