1 /* Test of getdate() function.
2 Copyright (C) 2008 Free Software Foundation, Inc.
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 3, or (at your option)
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software Foundation,
16 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
18 /* Written by Simon Josefsson <simon@josefsson.org>, 2008. */
28 #define ASSERT(expr) \
33 fprintf (stderr, "%s:%d: assertion failed\n", \
34 __FILE__, __LINE__); \
42 #define LOG(str, now, res) \
43 printf ("string `%s' diff %d %d\n", \
44 str, res.tv_sec - now.tv_sec, res.tv_nsec - now.tv_nsec);
46 #define LOG(str, now, res) 0
50 main (int argc, char **argv)
53 struct timespec result;
54 struct timespec result2;
61 ASSERT (get_date (&result, p, &now));
63 ASSERT (now.tv_sec == result.tv_sec && now.tv_nsec == result.tv_nsec);
68 ASSERT (get_date (&result, p, &now));
70 ASSERT (now.tv_sec + 24 * 60 * 60 == result.tv_sec
71 && now.tv_nsec == result.tv_nsec);
76 ASSERT (get_date (&result, p, &now));
78 ASSERT (now.tv_sec - 24 * 60 * 60 == result.tv_sec
79 && now.tv_nsec == result.tv_nsec);
84 ASSERT (get_date (&result, p, &now));
86 ASSERT (now.tv_sec + 4 * 60 * 60 == result.tv_sec
87 && now.tv_nsec == result.tv_nsec);
89 /* test if timezone is not being ignored for day offset */
92 p = "UTC+400 +24 hours";
93 ASSERT (get_date (&result, p, &now));
96 ASSERT (get_date (&result2, p, &now));
97 LOG (p, now, result2);
98 ASSERT (result.tv_sec == result2.tv_sec
99 && result.tv_nsec == result2.tv_nsec);
101 /* test if several time zones formats are handled same way */
105 ASSERT (get_date (&result, p, &now));
106 LOG (p, now, result);
108 ASSERT (get_date (&result2, p, &now));
109 LOG (p, now, result2);
110 ASSERT (result.tv_sec == result2.tv_sec
111 && result.tv_nsec == result2.tv_nsec);
113 ASSERT (get_date (&result2, p, &now));
114 LOG (p, now, result2);
115 ASSERT (result.tv_sec == result2.tv_sec
116 && result.tv_nsec == result2.tv_nsec);
121 ASSERT (get_date (&result, p, &now));
122 LOG (p, now, result);
124 ASSERT (get_date (&result2, p, &now));
125 LOG (p, now, result2);
126 ASSERT (result.tv_sec == result2.tv_sec
127 && result.tv_nsec == result2.tv_nsec);
129 ASSERT (get_date (&result2, p, &now));
130 LOG (p, now, result2);
131 ASSERT (result.tv_sec == result2.tv_sec
132 && result.tv_nsec == result2.tv_nsec);
137 ASSERT (get_date (&result, p, &now));
138 LOG (p, now, result);
140 ASSERT (get_date (&result2, p, &now));
141 LOG (p, now, result2);
142 ASSERT (result.tv_sec == result2.tv_sec
143 && result.tv_nsec == result2.tv_nsec);
148 ASSERT (get_date (&result, p, &now));
149 LOG (p, now, result);
151 ASSERT (get_date (&result2, p, &now));
152 LOG (p, now, result2);
153 ASSERT (result.tv_sec == result2.tv_sec
154 && result.tv_nsec == result2.tv_nsec);
157 /* TZ out of range should cause get_date failure */
161 ASSERT (!get_date (&result, p, &now));
163 /* Check for several invalid countable dayshifts */
166 p = "UTC+4:00 +40 yesterday";
167 ASSERT (!get_date (&result, p, &now));
168 p = "UTC+4:00 next yesterday";
169 ASSERT (!get_date (&result, p, &now));
170 p = "UTC+4:00 tomorrow ago";
171 ASSERT (!get_date (&result, p, &now));
172 p = "UTC+4:00 40 now ago";
173 ASSERT (!get_date (&result, p, &now));
174 p = "UTC+4:00 last tomorrow";
175 ASSERT (!get_date (&result, p, &now));
176 p = "UTC+4:00 -4 today";
177 ASSERT (!get_date (&result, p, &now));
179 /* And check correct usage of dayshifts */
182 p = "UTC+400 tomorrow";
183 ASSERT (get_date (&result, p, &now));
184 LOG (p, now, result);
185 p = "UTC+400 +1 day";
186 ASSERT (get_date (&result2, p, &now));
187 LOG (p, now, result2);
188 ASSERT (result.tv_sec == result2.tv_sec
189 && result.tv_nsec == result2.tv_nsec);
192 p = "UTC+400 yesterday";
193 ASSERT (get_date (&result, p, &now));
194 LOG (p, now, result);
195 p = "UTC+400 1 day ago";
196 ASSERT (get_date (&result2, p, &now));
197 LOG (p, now, result2);
198 ASSERT (result.tv_sec == result2.tv_sec
199 && result.tv_nsec == result2.tv_nsec);
203 ASSERT (get_date (&result, p, &now));
204 LOG (p, now, result);
205 p = "UTC+400 +0 minutes"; /* silly, but simple "UTC+400" is different*/
206 ASSERT (get_date (&result2, p, &now));
207 LOG (p, now, result2);
208 ASSERT (result.tv_sec == result2.tv_sec
209 && result.tv_nsec == result2.tv_nsec);