scc

A fork of https://git.simple-cc.org/scc/ for Qute

git clone https://git.8pit.net/scc.git

  1/*
  2output:
  3testing
  4test 0
  5tm_sec= 0, tm_min= 3, tm_hour= 0, tm_mday= 1, tm_mon= 0, tm_year= 121, tm_wday=5, tm_yday=  0, tm_isdst=0
  6Fri Jan  1 00:03:00 2021 UTC
  7Fri Jan  1 00:03:00 2021 UTC
  8Fri Jan  1 00:03:00 2021 UTC
  9Fri Jan  1 00:03:00 2021
 10Fri Jan  1 00:03:00 2021
 11test 1
 12tm_sec=50, tm_min=30, tm_hour=23, tm_mday=31, tm_mon=11, tm_year= 120, tm_wday=4, tm_yday=365, tm_isdst=0
 13Thu Dec 31 23:30:50 2020 UTC
 14Thu Dec 31 23:30:50 2020 UTC
 15Thu Dec 31 23:30:50 2020 UTC
 16Thu Dec 31 23:30:50 2020
 17Thu Dec 31 23:30:50 2020
 18test 2
 19tm_sec=59, tm_min=30, tm_hour= 0, tm_mday= 1, tm_mon= 0, tm_year= 121, tm_wday=5, tm_yday=  0, tm_isdst=0
 20Fri Jan  1 00:30:59 2021 UTC
 21Fri Jan  1 00:30:59 2021 UTC
 22Fri Jan  1 00:30:59 2021 UTC
 23Fri Jan  1 00:30:59 2021
 24Fri Jan  1 00:30:59 2021
 25test 3
 26tm_sec=59, tm_min=30, tm_hour=12, tm_mday=30, tm_mon=11, tm_year= 120, tm_wday=3, tm_yday=364, tm_isdst=0
 27Wed Dec 30 12:30:59 2020 UTC
 28Wed Dec 30 12:30:59 2020 UTC
 29Wed Dec 30 12:30:59 2020 UTC
 30Wed Dec 30 12:30:59 2020
 31Wed Dec 30 12:30:59 2020
 32test 4
 33tm_sec=59, tm_min=30, tm_hour=12, tm_mday= 1, tm_mon= 0, tm_year= 121, tm_wday=5, tm_yday=  0, tm_isdst=0
 34Fri Jan  1 12:30:59 2021 UTC
 35Fri Jan  1 12:30:59 2021 UTC
 36Fri Jan  1 12:30:59 2021 UTC
 37Fri Jan  1 12:30:59 2021
 38Fri Jan  1 12:30:59 2021
 39test 5
 40tm_sec=59, tm_min=59, tm_hour=23, tm_mday=31, tm_mon=11, tm_year= 120, tm_wday=4, tm_yday=365, tm_isdst=0
 41Thu Dec 31 23:59:59 2020 UTC
 42Thu Dec 31 23:59:59 2020 UTC
 43Thu Dec 31 23:59:59 2020 UTC
 44Thu Dec 31 23:59:59 2020
 45Thu Dec 31 23:59:59 2020
 46test 6
 47tm_sec= 0, tm_min= 3, tm_hour= 0, tm_mday= 1, tm_mon= 0, tm_year= 121, tm_wday=5, tm_yday=  0, tm_isdst=0
 48Fri Jan  1 00:03:00 2021 UTC
 49Fri Jan  1 00:03:00 2021 UTC
 50Fri Jan  1 00:03:00 2021 UTC
 51Fri Jan  1 00:03:00 2021
 52Fri Jan  1 00:03:00 2021
 53test 7
 54tm_sec=59, tm_min=30, tm_hour=12, tm_mday=30, tm_mon=11, tm_year= 120, tm_wday=3, tm_yday=364, tm_isdst=0
 55Wed Dec 30 12:30:59 2020 UTC
 56Wed Dec 30 12:30:59 2020 UTC
 57Wed Dec 30 12:30:59 2020 UTC
 58Wed Dec 30 12:30:59 2020
 59Wed Dec 30 12:30:59 2020
 60test 8
 61tm_sec=59, tm_min=30, tm_hour=12, tm_mday=20, tm_mon= 0, tm_year= 121, tm_wday=3, tm_yday= 19, tm_isdst=0
 62Wed Jan 20 12:30:59 2021 UTC
 63Wed Jan 20 12:30:59 2021 UTC
 64Wed Jan 20 12:30:59 2021 UTC
 65Wed Jan 20 12:30:59 2021
 66Wed Jan 20 12:30:59 2021
 67test 9
 68tm_sec=59, tm_min=59, tm_hour=23, tm_mday=31, tm_mon=11, tm_year= 120, tm_wday=4, tm_yday=365, tm_isdst=0
 69Thu Dec 31 23:59:59 2020 UTC
 70Thu Dec 31 23:59:59 2020 UTC
 71Thu Dec 31 23:59:59 2020 UTC
 72Thu Dec 31 23:59:59 2020
 73Thu Dec 31 23:59:59 2020
 74test 10
 75tm_sec= 0, tm_min= 0, tm_hour= 0, tm_mday= 1, tm_mon= 0, tm_year= 121, tm_wday=5, tm_yday=  0, tm_isdst=0
 76Fri Jan  1 00:00:00 2021 UTC
 77Fri Jan  1 00:00:00 2021 UTC
 78Fri Jan  1 00:00:00 2021 UTC
 79Fri Jan  1 00:00:00 2021
 80Fri Jan  1 00:00:00 2021
 81test 11
 82tm_sec=59, tm_min=38, tm_hour=12, tm_mday=10, tm_mon=11, tm_year=  33, tm_wday=0, tm_yday=343, tm_isdst=0
 83Sun Dec 10 12:38:59 1933 UTC
 84Sun Dec 10 12:38:59 1933 UTC
 85Sun Dec 10 12:38:59 1933 UTC
 86Sun Dec 10 12:38:59 1933
 87Sun Dec 10 12:38:59 1933
 88test 12
 89tm_sec=59, tm_min=38, tm_hour=12, tm_mday=12, tm_mon=11, tm_year=  33, tm_wday=2, tm_yday=345, tm_isdst=0
 90Tue Dec 12 12:38:59 1933 UTC
 91Tue Dec 12 12:38:59 1933 UTC
 92Tue Dec 12 12:38:59 1933 UTC
 93Tue Dec 12 12:38:59 1933
 94Tue Dec 12 12:38:59 1933
 95test 13
 96tm_wday=200, tm_yday=500
 97failed
 98test 14
 99tm_sec= 0, tm_min= 3, tm_hour= 0, tm_mday= 1, tm_mon= 0, tm_year= 121, tm_wday=5, tm_yday=  0, tm_isdst=0
100Fri Jan  1 00:03:00 2021 UTC
101Fri Jan  1 00:03:00 2021 UTC
102Fri Jan  1 00:03:00 2021 UTC
103Fri Jan  1 00:03:00 2021
104Fri Jan  1 00:03:00 2021
105test 15
106tm_sec= 0, tm_min= 3, tm_hour= 0, tm_mday= 1, tm_mon= 0, tm_year= 121, tm_wday=5, tm_yday=  0, tm_isdst=0
107Fri Jan  1 00:03:00 2021 UTC
108Fri Jan  1 00:03:00 2021 UTC
109Fri Jan  1 00:03:00 2021 UTC
110Fri Jan  1 00:03:00 2021
111Fri Jan  1 00:03:00 2021
112test 16
113tm_sec= 0, tm_min= 3, tm_hour= 0, tm_mday= 1, tm_mon= 0, tm_year= 121, tm_wday=5, tm_yday=  0, tm_isdst=0
114Fri Jan  1 00:03:00 2021 UTC
115Fri Jan  1 00:03:00 2021 UTC
116Fri Jan  1 00:03:00 2021 UTC
117Fri Jan  1 00:03:00 2021
118Fri Jan  1 00:03:00 2021
119done
120end:
121*/
122
123#include <limits.h>
124#include <stdio.h>
125#include <stdlib.h>
126#include <string.h>
127#include <time.h>
128
129#define NELEM(x) (sizeof(x)/sizeof((x)[0]))
130
131struct test {
132	struct tm tm;
133	int fail;
134} tests[] = {
135	//sec,min,hour,mday,mon,year,wday,yday,isdst,fail
136	{{ 60, 62,  23,  31, 11, 120, 200, 500}},
137	{{ 50, 30,  -1,   1,  0, 121}},
138	{{ 59, 30,  24,  31, 11, 120}},
139	{{ 59, 30,  12,  -1,  0, 121}},
140	{{ 59, 30,  12,  32, 11, 120}},
141	{{ 59, -1,   0,   1,  0, 121}},
142	{{ 60, 62,  23,  31, 11, 120}},
143	{{ 59, 30,  12,  30, -1, 121}},
144	{{ 59, 30,  12,  20, 12, 120}},
145	{{ -1,  0,   0,   1,  0, 121}},
146	{{ 60, 59,  23,  31, 11, 120}},
147	{{ 59, 38,  12,  10, 11,  33}},
148	{{ 59, 38,  12,  12, 11,  33}},
149	{{ 72, 38,   1,  31, 15,INT_MAX, 200, 500}, 1},
150	{{ 60, 62,  23,  31, 11,  120,  0,   0,     1}},
151	{{ 60, 62,  23,  31, 11,  120,  0,   0,     0}},
152	{{ 60, 62,  23,  31, 11,  120,  0,   0,    -1}},
153};
154
155#ifndef __unix__
156#define putenv(x) (x)
157/*
158 * Ok, this is by definition undefined behaviour because
159 * we are using the name of a library function. The reallity
160 * is that if you use a static linker then this would
161 * overload the libc getenv and it will work as expected,
162 * but if you use a dynamic linker then the internal
163 * references will be tied to the internal getenv function
164 * and this would not work. For our main use case that is
165 * testing scc libc this is good enough, and with the
166 * fallback to putenv this will work in the systems we are
167 * interested on
168 */
169char *
170getenv(const char *name)
171{
172	if (strcmp(name, "TZ") != 0)
173		return NULL;
174	return "UTC";
175}
176#endif
177
178int
179main(void)
180{
181	time_t t;
182	char buf[70];
183	struct tm *tm;
184	struct test *tp;
185
186	puts("testing");
187	putenv("TZ=UTC");
188	for (tp = tests; tp < &tests[NELEM(tests)]; ++tp) {
189		printf("test %d\n", (int) (tp - tests));
190		t = mktime(&tp->tm);
191		if (tp->fail) {
192			printf("tm_wday=%d, tm_yday=%d\n",
193			       tp->tm.tm_wday, tp->tm.tm_yday);
194			puts(t == -1 ? "failed" : "not failed");
195			continue;
196		}
197		printf("tm_sec=%2d, "
198		       "tm_min=%2d, "
199		       "tm_hour=%2d, "
200		       "tm_mday=%2d, "
201		       "tm_mon=%2d, "
202		       "tm_year=%4d, "
203		       "tm_wday=%d, "
204		       "tm_yday=%3d, "
205		       "tm_isdst=%d\n",
206		       tp->tm.tm_sec,
207		       tp->tm.tm_min,
208		       tp->tm.tm_hour,
209		       tp->tm.tm_mday,
210		       tp->tm.tm_mon,
211		       tp->tm.tm_year,
212		       tp->tm.tm_wday,
213		       tp->tm.tm_yday,
214		       tp->tm.tm_isdst);
215		strftime(buf, sizeof(buf), "%c %Z", &tp->tm);
216		puts(buf);
217
218		tm = gmtime(&t);
219		strftime(buf, sizeof(buf), "%c %Z", tm);
220		puts(buf);
221
222		tm = localtime(&t);
223		strftime(buf, sizeof(buf), "%c %Z", tm);
224		puts(buf);
225
226		fputs(asctime(tm), stdout);
227		fputs(ctime(&t), stdout);
228	}
229	puts("done");
230
231	return 0;
232}
233