2 * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
3 * Copyright (C) 2010 Christian Hergert <chris@dronelabs.com>
5 * gstdatetime.c: Unit tests for GstDateTime
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Library General Public License for more details.
17 * You should have received a copy of the GNU Library General Public
18 * License along with this library; if not, write to the
19 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 * Boston, MA 02111-1307, USA.
25 #include <gst/check/gstcheck.h>
27 #define assert_almost_equals_int(a, b) \
31 fail_unless(ABS (first - second) <= 1, \
32 "'" #a "' (%d) is not almost equal to '" #b"' (%d)", first, second); \
35 GST_START_TEST (test_GstDateTime_now)
41 memset (&tm, 0, sizeof (tm));
43 #ifdef HAVE_LOCALTIME_R
44 localtime_r (&t, &tm);
46 memcpy (&tm, localtime (&t), sizeof (struct tm));
48 dt = gst_date_time_new_now_local_time ();
49 assert_equals_int (gst_date_time_get_year (dt), 1900 + tm.tm_year);
50 assert_equals_int (gst_date_time_get_month (dt), 1 + tm.tm_mon);
51 assert_equals_int (gst_date_time_get_day (dt), tm.tm_mday);
52 assert_equals_int (gst_date_time_get_hour (dt), tm.tm_hour);
53 assert_equals_int (gst_date_time_get_minute (dt), tm.tm_min);
54 assert_almost_equals_int (gst_date_time_get_second (dt), tm.tm_sec);
55 gst_date_time_unref (dt);
60 GST_START_TEST (test_GstDateTime_new_from_unix_epoch_local_time)
66 memset (&tm, 0, sizeof (tm));
68 #ifdef HAVE_LOCALTIME_R
69 localtime_r (&t, &tm);
71 memcpy (&tm, localtime (&t), sizeof (struct tm));
73 dt = gst_date_time_new_from_unix_epoch_local_time (t);
74 assert_equals_int (gst_date_time_get_year (dt), 1900 + tm.tm_year);
75 assert_equals_int (gst_date_time_get_month (dt), 1 + tm.tm_mon);
76 assert_equals_int (gst_date_time_get_day (dt), tm.tm_mday);
77 assert_equals_int (gst_date_time_get_hour (dt), tm.tm_hour);
78 assert_equals_int (gst_date_time_get_minute (dt), tm.tm_min);
79 assert_equals_int (gst_date_time_get_second (dt), tm.tm_sec);
80 gst_date_time_unref (dt);
82 memset (&tm, 0, sizeof (tm));
90 dt = gst_date_time_new_from_unix_epoch_local_time (t);
91 assert_equals_int (gst_date_time_get_year (dt), 1970);
92 assert_equals_int (gst_date_time_get_month (dt), 1);
93 assert_equals_int (gst_date_time_get_day (dt), 1);
94 assert_equals_int (gst_date_time_get_hour (dt), 0);
95 assert_equals_int (gst_date_time_get_minute (dt), 0);
96 assert_equals_int (gst_date_time_get_second (dt), 0);
97 gst_date_time_unref (dt);
103 GST_START_TEST (test_GstDateTime_new_from_unix_epoch_utc)
109 memset (&tm, 0, sizeof (tm));
114 memcpy (&tm, gmtime (&t), sizeof (struct tm));
116 dt = gst_date_time_new_from_unix_epoch_utc (t);
117 assert_equals_int (gst_date_time_get_year (dt), 1900 + tm.tm_year);
118 assert_equals_int (gst_date_time_get_month (dt), 1 + tm.tm_mon);
119 assert_equals_int (gst_date_time_get_day (dt), tm.tm_mday);
120 assert_equals_int (gst_date_time_get_hour (dt), tm.tm_hour);
121 assert_equals_int (gst_date_time_get_minute (dt), tm.tm_min);
122 assert_equals_int (gst_date_time_get_second (dt), tm.tm_sec);
123 assert_equals_int (gst_date_time_get_time_zone_offset (dt), 0);
124 gst_date_time_unref (dt);
129 GST_START_TEST (test_GstDateTime_get_dmy)
136 #ifdef HAVE_LOCALTIME_R
137 localtime_r (&t, &tt);
139 memcpy (&tt, localtime (&t), sizeof (struct tm));
141 dt = gst_date_time_new_from_unix_epoch_local_time (t);
142 assert_equals_int (gst_date_time_get_year (dt), tt.tm_year + 1900);
143 assert_equals_int (gst_date_time_get_month (dt), tt.tm_mon + 1);
144 assert_equals_int (gst_date_time_get_day (dt), tt.tm_mday);
146 gst_date_time_unref (dt);
151 GST_START_TEST (test_GstDateTime_get_hour)
155 dt = gst_date_time_new (0, 2009, 10, 19, 15, 13, 11);
156 assert_equals_int (15, gst_date_time_get_hour (dt));
157 gst_date_time_unref (dt);
159 dt = gst_date_time_new (0, 100, 10, 19, 1, 0, 0);
160 assert_equals_int (1, gst_date_time_get_hour (dt));
161 gst_date_time_unref (dt);
163 dt = gst_date_time_new (0, 100, 10, 19, 0, 0, 0);
164 assert_equals_int (0, gst_date_time_get_hour (dt));
165 gst_date_time_unref (dt);
167 dt = gst_date_time_new (0, 100, 10, 1, 23, 59, 59);
168 assert_equals_int (23, gst_date_time_get_hour (dt));
169 gst_date_time_unref (dt);
174 GST_START_TEST (test_GstDateTime_get_microsecond)
179 g_get_current_time (&tv);
180 dt = gst_date_time_new (0, 2010, 7, 15, 11, 12,
181 13 + (tv.tv_usec / 1000000.0));
182 assert_almost_equals_int (tv.tv_usec, gst_date_time_get_microsecond (dt));
183 gst_date_time_unref (dt);
188 GST_START_TEST (test_GstDateTime_get_minute)
192 dt = gst_date_time_new (0, 2009, 12, 1, 1, 31, 0);
193 assert_equals_int (31, gst_date_time_get_minute (dt));
194 gst_date_time_unref (dt);
199 GST_START_TEST (test_GstDateTime_get_second)
203 dt = gst_date_time_new (0, 2009, 12, 1, 1, 31, 44);
204 assert_equals_int (44, gst_date_time_get_second (dt));
205 gst_date_time_unref (dt);
210 GST_START_TEST (test_GstDateTime_new_full)
214 dt = gst_date_time_new (0, 2009, 12, 11, 12, 11, 10.001234);
215 assert_equals_int (2009, gst_date_time_get_year (dt));
216 assert_equals_int (12, gst_date_time_get_month (dt));
217 assert_equals_int (11, gst_date_time_get_day (dt));
218 assert_equals_int (12, gst_date_time_get_hour (dt));
219 assert_equals_int (11, gst_date_time_get_minute (dt));
220 assert_equals_int (10, gst_date_time_get_second (dt));
221 assert_equals_int (1234, gst_date_time_get_microsecond (dt));
222 assert_equals_float (0, gst_date_time_get_time_zone_offset (dt));
223 gst_date_time_unref (dt);
225 dt = gst_date_time_new (2.5, 2010, 3, 29, 12, 13, 16.5);
226 assert_equals_int (2010, gst_date_time_get_year (dt));
227 assert_equals_int (3, gst_date_time_get_month (dt));
228 assert_equals_int (29, gst_date_time_get_day (dt));
229 assert_equals_int (12, gst_date_time_get_hour (dt));
230 assert_equals_int (13, gst_date_time_get_minute (dt));
231 assert_equals_int (16, gst_date_time_get_second (dt));
232 assert_equals_int (500000, gst_date_time_get_microsecond (dt));
233 assert_equals_float (2.5, gst_date_time_get_time_zone_offset (dt));
234 gst_date_time_unref (dt);
239 GST_START_TEST (test_GstDateTime_utc_now)
249 memcpy (&tm, gmtime (&t), sizeof (struct tm));
251 dt = gst_date_time_new_now_utc ();
252 assert_equals_int (tm.tm_year + 1900, gst_date_time_get_year (dt));
253 assert_equals_int (tm.tm_mon + 1, gst_date_time_get_month (dt));
254 assert_equals_int (tm.tm_mday, gst_date_time_get_day (dt));
255 assert_equals_int (tm.tm_hour, gst_date_time_get_hour (dt));
256 assert_equals_int (tm.tm_min, gst_date_time_get_minute (dt));
257 assert_almost_equals_int (tm.tm_sec, gst_date_time_get_second (dt));
258 gst_date_time_unref (dt);
263 GST_START_TEST (test_GstDateTime_get_utc_offset)
271 memset (&tm, 0, sizeof (tm));
272 #ifdef HAVE_LOCALTIME_R
273 localtime_r (&t, &tm);
275 memcpy (&tm, localtime (&t), sizeof (struct tm));
278 dt = gst_date_time_new_now_local_time ();
279 ts = gst_date_time_get_time_zone_offset (dt);
280 assert_equals_int (ts, tm.tm_gmtoff / 3600.0);
281 gst_date_time_unref (dt);
287 gst_date_time_suite (void)
289 Suite *s = suite_create ("GstDateTime");
290 TCase *tc_chain = tcase_create ("general");
292 suite_add_tcase (s, tc_chain);
293 tcase_add_test (tc_chain, test_GstDateTime_get_dmy);
294 tcase_add_test (tc_chain, test_GstDateTime_get_hour);
295 tcase_add_test (tc_chain, test_GstDateTime_get_microsecond);
296 tcase_add_test (tc_chain, test_GstDateTime_get_minute);
297 tcase_add_test (tc_chain, test_GstDateTime_get_second);
298 tcase_add_test (tc_chain, test_GstDateTime_get_utc_offset);
299 tcase_add_test (tc_chain, test_GstDateTime_new_from_unix_epoch_local_time);
300 tcase_add_test (tc_chain, test_GstDateTime_new_from_unix_epoch_utc);
301 tcase_add_test (tc_chain, test_GstDateTime_new_full);
302 tcase_add_test (tc_chain, test_GstDateTime_now);
303 tcase_add_test (tc_chain, test_GstDateTime_utc_now);
308 GST_CHECK_MAIN (gst_date_time);