[v3,0/7] Fix some libm static issues
[platform/upstream/glibc.git] / time / tst-timegm.c
1 /* Basic tests for timegm.
2    Copyright (C) 2021-2024 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <https://www.gnu.org/licenses/>.  */
18
19 #include <time.h>
20 #include <stdlib.h>
21 #include <support/check.h>
22
23 static void
24 do_test_func (time_t (*func)(struct tm *))
25 {
26   {
27     struct tm tmg =
28       {
29         .tm_sec = 0,
30         .tm_min = 0,
31         .tm_hour = 0,
32         .tm_mday = 1,
33         .tm_mon = 0,
34         .tm_year = 70,
35         .tm_wday = 4,
36         .tm_yday = 0,
37         .tm_isdst = 0
38      };
39      time_t t = func (&tmg);
40      TEST_COMPARE (t, 0);
41   }
42
43   {
44     struct tm tmg =
45       {
46         .tm_sec = 7,
47         .tm_min = 14,
48         .tm_hour = 3,
49         .tm_mday = 19,
50         .tm_mon = 0,
51         .tm_year = 138,
52         .tm_wday = 2,
53         .tm_yday = 18,
54         .tm_isdst = 0
55      };
56      time_t t = func (&tmg);
57      TEST_COMPARE (t, 0x7fffffff);
58   }
59
60   if (sizeof (time_t) < 8)
61     return;
62
63   {
64     struct tm tmg =
65       {
66         .tm_sec = 8,
67         .tm_min = 14,
68         .tm_hour = 3,
69         .tm_mday = 19,
70         .tm_mon = 0,
71         .tm_year = 138,
72         .tm_wday = 2,
73         .tm_yday = 18,
74         .tm_isdst = 0
75      };
76      time_t t = func (&tmg);
77      TEST_COMPARE (t, (time_t) 0x80000000ull);
78   }
79 }
80
81 static int
82 do_test (void)
83 {
84   do_test_func (timegm);
85
86   /* timelocal is an alias to mktime and behaves like timegm with the
87      difference that it takes timezone into account.  */
88   TEST_VERIFY_EXIT (setenv ("TZ", ":", 1) == 0);
89   tzset ();
90   do_test_func (timelocal);
91
92   return 0;
93 }
94
95 #include <support/test-driver.c>