File: timecheck.h

package info (click to toggle)
libreswan 5.2-2.2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 81,632 kB
  • sloc: ansic: 129,988; sh: 32,018; xml: 20,646; python: 10,303; makefile: 3,022; javascript: 1,506; sed: 574; yacc: 511; perl: 264; awk: 52
file content (72 lines) | stat: -rw-r--r-- 2,051 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/* test *time_t code, for libreswan
 *
 * Copyright (C) 2019 Andrew Cagney
 *
 * This library is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Library General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or (at your
 * option) any later version.  See <https://www.gnu.org/licenses/lgpl-2.1.txt>.
 *
 * This library is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
 * License for more details.
 *
 */

#ifndef TIMECHECK_H
#define TIMECHECK_H

extern int fails;

void check_deltatime(void);
void check_monotime(void);
void check_realtime(void);

extern const struct time_cmp {
	intmax_t l, r;
	bool lt;
	bool le;
	bool eq;
	bool ge;
	bool gt;
	bool ne;
	bool sentinel;
} time_cmp[];

#define CHECK_TIME_CMP_OP(TIME, CONVERT, O, OP)				\
	{								\
		TIME##_t l = CONVERT(t->l);				\
		TIME##_t r = CONVERT(t->r);				\
		bool o = TIME##_cmp(l, OP, r);				\
		FILE *out = (o == t->O) ? stdout : stderr;		\
		fprintf(out, #TIME"_cmp(%s(%jd), %s, %s(%jd))) -> %s",	\
			#CONVERT, t->l,					\
			#OP,						\
			#CONVERT, t->r,					\
			bool_str(t->O));				\
		if (out == stderr) {					\
			fprintf(out, "; FAIL: returned %s",		\
				bool_str(o));				\
			fails++;					\
		}							\
		fprintf(out, "\n");					\
	}

#define CHECK_TIME_CMP_CONVERT(TIME, CONVERT)				\
	for (const struct time_cmp *t = time_cmp; !t->sentinel; t++) {	\
		CHECK_TIME_CMP_OP(TIME, CONVERT, lt,  <); \
		CHECK_TIME_CMP_OP(TIME, CONVERT, le, <=); \
		CHECK_TIME_CMP_OP(TIME, CONVERT, eq, ==); \
		CHECK_TIME_CMP_OP(TIME, CONVERT, ge, >=); \
		CHECK_TIME_CMP_OP(TIME, CONVERT, gt,  >); \
		CHECK_TIME_CMP_OP(TIME, CONVERT, ne, !=); \
	}

#define CHECK_TIME_CMP_SECONDS(TIME, ...) \
	CHECK_TIME_CMP_CONVERT(TIME, TIME)

#define CHECK_TIME_CMP_MILLISECONDS(TIME, ...) \
	CHECK_TIME_CMP_CONVERT(TIME, TIME##_from_milliseconds)

#endif