Branch data Line data Source code
1 : : // SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
2 : : /*
3 : : * Copyright 2014-2015 IBM Corp.
4 : : */
5 : : #include "/usr/include/assert.h"
6 : : #include <stdio.h>
7 : : #include <libc/include/time.h>
8 : : #include <stdint.h>
9 : :
10 : : #include "../time.c"
11 : :
12 : : #define MKTIME_TEST(Y,M,D,h,m,s,t) \
13 : : tm.tm_year = Y; \
14 : : tm.tm_mon = M; \
15 : : tm.tm_mday = D; \
16 : : tm.tm_hour = h; \
17 : : tm.tm_min = m; \
18 : : tm.tm_sec = s; \
19 : : assert(mktime(&tm) == t); \
20 : : assert(tm.tm_year == Y); \
21 : : assert(tm.tm_mon == M); \
22 : : assert(tm.tm_mday == D); \
23 : : assert(tm.tm_hour == h); \
24 : : assert(tm.tm_min == m); \
25 : : assert(tm.tm_sec == s)
26 : :
27 : : #define GMTIME_TEST(Y,M,D,h,m,s,tv) \
28 : : t = tv; \
29 : : gmtime_r(&t, &tm); \
30 : : assert(tm.tm_year == Y); \
31 : : assert(tm.tm_mon == M); \
32 : : assert(tm.tm_mday == D); \
33 : : assert(tm.tm_hour == h); \
34 : : assert(tm.tm_min == m); \
35 : : assert(tm.tm_sec == s)
36 : :
37 : : #define TIME_TEST(Y,M,D,h,m,s,tv) \
38 : : MKTIME_TEST(Y,M,D,h,m,s,tv); \
39 : : GMTIME_TEST(Y,M,D,h,m,s,tv)
40 : :
41 : 5 : int main(void)
42 : : {
43 : : struct tm tm;
44 : 5 : time_t t = 0;
45 : :
46 : 5 : TIME_TEST(1970, 0, 1, 0, 0, 0, 0);
47 : 5 : TIME_TEST(1971, 0, 1, 0, 0, 0, 365*SECS_PER_DAY);
48 : 5 : TIME_TEST(1972, 0, 1, 0, 0, 0, 2*365*SECS_PER_DAY);
49 : 5 : TIME_TEST(1972, 11, 31, 0, 0, 0, 3*365*SECS_PER_DAY);
50 : 5 : TIME_TEST(1973, 0, 1, 0, 0, 0, (3*365+1)*SECS_PER_DAY);
51 : 5 : TIME_TEST(2000, 11, 31, 0, 0, 0, 978220800);
52 : 5 : TIME_TEST(2001, 0, 1, 0, 0, 0, 978307200);
53 : 5 : TIME_TEST(2003, 11, 31, 0, 0, 0, 1072828800);
54 : 5 : TIME_TEST(2004, 0, 1, 0, 0, 0, 1072828800+SECS_PER_DAY);
55 : 5 : TIME_TEST(2004, 11, 29, 0, 0, 0, 1072828800+364*SECS_PER_DAY);
56 : 5 : TIME_TEST(2004, 11, 30, 0, 0, 0, 1072828800+365*SECS_PER_DAY);
57 : 5 : TIME_TEST(2004, 11, 31, 0, 0, 0, 1072828800+366*SECS_PER_DAY);
58 : 5 : TIME_TEST(2004, 11, 31, 23, 59, 59, 1072828800+367*SECS_PER_DAY-1);
59 : 5 : TIME_TEST(2100, 11, 31, 0, 0, 0, 4133894400);
60 : 5 : TIME_TEST(2101, 0, 1, 0, 0, 0, 4133980800);
61 : :
62 : : /* Test the normalisation functionality of mktime */
63 : 5 : tm.tm_year = 2000;
64 : 5 : tm.tm_mon = 1;
65 : 5 : tm.tm_mday = 10;
66 : 5 : tm.tm_hour = 5;
67 : 5 : tm.tm_min = 32;
68 : 5 : tm.tm_sec = 105;
69 : 5 : mktime(&tm);
70 : 5 : assert(tm.tm_year == 2000);
71 : 5 : assert(tm.tm_mon == 1);
72 : 5 : assert(tm.tm_mday == 10);
73 : 5 : assert(tm.tm_hour == 5);
74 : 5 : assert(tm.tm_min == 33);
75 : 5 : assert(tm.tm_sec == 45);
76 : 5 : tm.tm_sec += 366*24*60*60;
77 : 5 : mktime(&tm);
78 : 5 : assert(tm.tm_year == 2001);
79 : 5 : assert(tm.tm_mon == 1);
80 : 5 : assert(tm.tm_mday == 10);
81 : 5 : assert(tm.tm_hour == 5);
82 : 5 : assert(tm.tm_min == 33);
83 : 5 : assert(tm.tm_sec == 45);
84 : :
85 : 5 : return 0;
86 : : }
|