ksgi

Форк
0
/
test-epoch2datetime.c 
132 строки · 3.0 Кб
1
/*	$Id$ */
2
/*
3
 * Copyright (c) 2020 Kristaps Dzonsons <kristaps@bsd.lv>
4
 *
5
 * Permission to use, copy, modify, and distribute this software for any
6
 * purpose with or without fee is hereby granted, provided that the above
7
 * copyright notice and this permission notice appear in all copies.
8
 *
9
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
 */
17
#include "../config.h"
18

19
#if HAVE_ERR
20
# include <err.h>
21
#endif
22

23
#include <inttypes.h>
24
#include <stdarg.h>
25
#include <stdint.h>
26
#include <stdlib.h>
27
#include <string.h>
28
#include <time.h>
29
#include <unistd.h>
30

31
#include <curl/curl.h>
32

33
#include "../kcgi.h"
34
#include "regress.h"
35

36
int
37
main(int argc, char *argv[])
38
{
39
	size_t	 i;
40
	int64_t  v, vv, tm_sec, tm_min, tm_hour, tm_mday, 
41
		 tm_mon, tm_year, tm_wday, tm_yday;
42

43
	/* Test maximum possible input. */
44

45
	v = INT64_MAX;
46
	khttp_epoch2datetime(v,
47
		&tm_sec,
48
		&tm_min,
49
		&tm_hour,
50
		&tm_mday,
51
		&tm_mon,
52
		&tm_year,
53
		&tm_wday,
54
		&tm_yday);
55
	if (!khttp_datetime2epoch(&vv, tm_mday,
56
	    tm_mon, tm_year, tm_hour, tm_min, tm_sec))
57
		errx(1, "khttp_datetime2epoch: have {"
58
			"%" PRId64 ", "
59
			"%" PRId64 ", "
60
			"%" PRId64 ", "
61
			"%" PRId64 ", "
62
			"%" PRId64 ", "
63
			"%" PRId64 "}",
64
			tm_mday, tm_mon,
65
			tm_year, tm_hour,
66
			tm_min, tm_sec);
67
	if (v != vv)
68
		errx(1, "khttp_datetime2epoch: mismatch (max)");
69

70
	v = INT64_MIN;
71
	khttp_epoch2datetime(v,
72
		&tm_sec,
73
		&tm_min,
74
		&tm_hour,
75
		&tm_mday,
76
		&tm_mon,
77
		&tm_year,
78
		&tm_wday,
79
		&tm_yday);
80
	if (!khttp_datetime2epoch(&vv, tm_mday,
81
	    tm_mon, tm_year, tm_hour, tm_min, tm_sec))
82
		errx(1, "khttp_datetime2epoch: have {"
83
			"%" PRId64 ", "
84
			"%" PRId64 ", "
85
			"%" PRId64 ", "
86
			"%" PRId64 ", "
87
			"%" PRId64 ", "
88
			"%" PRId64 "}",
89
			tm_mday, tm_mon,
90
			tm_year, tm_hour,
91
			tm_min, tm_sec);
92
	if (v != vv)
93
		errx(1, "khttp_datetime2epoch: mismatch (min)");
94

95
	/* Test across random values.  */
96

97
	for (i = 0; i < 100000; i++) {
98
#if HAVE_ARC4RANDOM
99
		arc4random_buf(&v, sizeof(int64_t));
100
#else
101
		vv = (int64_t)random() * (int64_t)random();
102
		memcpy(&v, &vv, sizeof(uint32_t));
103
		vv = (int64_t)random() * (int64_t)random();
104
		memcpy((void *)&v + sizeof(uint32_t), &vv, sizeof(uint32_t));
105
#endif
106
		khttp_epoch2datetime(v,
107
			&tm_sec,
108
			&tm_min,
109
			&tm_hour,
110
			&tm_mday,
111
			&tm_mon,
112
			&tm_year,
113
			&tm_wday,
114
			&tm_yday);
115
		if (!khttp_datetime2epoch(&vv, tm_mday,
116
		    tm_mon, tm_year, tm_hour, tm_min, tm_sec))
117
			errx(1, "khttp_datetime2epoch: have {"
118
				"%" PRId64 ", "
119
				"%" PRId64 ", "
120
				"%" PRId64 ", "
121
				"%" PRId64 ", "
122
				"%" PRId64 ", "
123
				"%" PRId64 "}",
124
				tm_mday, tm_mon,
125
				tm_year, tm_hour,
126
				tm_min, tm_sec);
127
		if (v != vv)
128
			errx(1, "khttp_datetime2epoch: mismatch");
129
	}
130

131
	return 0;
132
}
133

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.