Fixed set but unused variable bugs
[gnupg.git] / common / t-timestuff.c
1 /* t-timestuff.c - Regression tests for time functions
2  * Copyright (C) 2007 Free Software Foundation, Inc.
3  *
4  * This file is part of JNLIB.
5  *
6  * JNLIB is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License as
8  * published by the Free Software Foundation; either version 3 of
9  * the License, or (at your option) any later version.
10  *
11  * JNLIB is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #include <config.h>
21 #include <stdio.h>
22 #include <stdlib.h>
23 #include <string.h>
24 #include <errno.h>
25 #include <time.h>
26
27 #include "mischelp.h"
28
29 #include "t-support.h"
30
31
32 static int
33 cmp_time_s (struct tm *a, struct tm *b)
34 {
35   if (a->tm_year != b->tm_year
36       || a->tm_mon  != b->tm_mon
37       || a->tm_mday != b->tm_mday
38       || a->tm_hour != b->tm_hour
39       || a->tm_min  != b->tm_min
40       || a->tm_sec  != b->tm_sec
41       || a->tm_wday != b->tm_wday
42       || a->tm_yday != b->tm_yday
43       || !a->tm_isdst != !b->tm_isdst)
44     return -1;
45   return 0;
46 }
47
48
49
50 static void
51 test_timegm (void)
52 {
53   static struct {
54     int year, mon, mday, hour, min, sec;
55   } tvalues[] = {
56     { -1 },
57     { -2,  1 },
58     { -2,  2 },
59     { -2,  86399 },
60     { -2,  86400 },
61     { -2,  0x7ffffffe },
62     { -2,  0x7fffffff },
63     /* Note: Because we use mktime below we can only start with the
64        day after Epoch.  */
65     { 1970, 1, 2, 0, 0 , 1},
66     { 1970, 1, 2, 0, 0 , 2},
67     { 1970, 1, 2, 12, 0 , 0},
68     { 1970, 1, 2, 23, 59 , 59},
69     { 1999, 12, 31, 23, 59 , 59},
70     { 2000, 1, 1, 0, 0, 0},
71     { 2000, 1, 1, 0, 0, 1},
72     { 2010, 12, 31, 23, 59 , 59},
73     { 2010, 1, 1, 0, 0, 0},
74     { 2010, 1, 1, 0, 0, 1},
75     /* The date below is about the last time mktime works in CET on
76        Windows XP; this is a somewhat strange because 32 bit Unices
77        will happily work along for another month until they reach the
78        end of all ticks on 20380119T031408 (unless Uli takes
79        compassion on us and changes time_t to a u64).  */
80     { 2037, 12, 18, 23, 59, 59}
81
82   };
83   int tidx;
84   time_t now, atime;
85   struct tm tbuf, tbuf2, *tp;
86
87   for (tidx=0; tidx < DIM (tvalues); tidx++)
88     {
89       if (tvalues[tidx].year == -1)
90         {
91           now = time (NULL);
92         }
93       else if (tvalues[tidx].year == -2)
94         {
95           now = tvalues[tidx].mon;
96         }
97       else
98         {
99           memset (&tbuf, 0, sizeof tbuf);
100           tbuf.tm_year = tvalues[tidx].year - 1900;
101           tbuf.tm_mon  = tvalues[tidx].mon;
102           tbuf.tm_mday = tvalues[tidx].mday;
103           tbuf.tm_hour = tvalues[tidx].hour;
104           tbuf.tm_min  = tvalues[tidx].min;
105           tbuf.tm_sec  = tvalues[tidx].sec;
106           now = mktime (&tbuf);
107         }
108       if (now == (time_t)(-1))
109         fail (tidx);
110
111       tp = gmtime (&now);
112       if (!tp)
113         fail (tidx);
114       tbuf = *tp;
115       tbuf2 = tbuf;
116       atime = timegm (&tbuf);
117       if (atime == (time_t)(-1))
118         fail (tidx);
119       if (atime != now)
120         fail (tidx);
121
122       tp = gmtime (&atime);
123       if (!tp)
124         fail (tidx);
125       if (cmp_time_s (tp, &tbuf))
126         fail (tidx);
127       if (cmp_time_s (tp, &tbuf2))
128         fail (tidx);
129     }
130 }
131
132
133
134 int
135 main (int argc, char **argv)
136 {
137   (void)argc;
138   (void)argv;
139
140   test_timegm ();
141
142   return 0;
143 }