1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-01-07 17:17:44 +03:00

test-tables: make sure we can test tables of either int or int64_t base type

To support both types, we unfortunately need to go down the macro rabbit
hole a bit more. But it works.
This commit is contained in:
Lennart Poettering 2021-02-11 16:02:26 +01:00
parent a9a43d8aa2
commit d385d54638

View File

@ -1,48 +1,43 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
#include <errno.h>
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef const char* (*lookup_t)(int);
typedef int (*reverse_t)(const char*);
#include "string-util.h"
static inline void _test_table(const char *name,
lookup_t lookup,
reverse_t reverse,
int size,
bool sparse) {
int i, boring = 0;
for (i = -1; i < size + 1; i++) {
const char* val = lookup(i);
int rev;
if (val) {
rev = reverse(val);
boring = 0;
} else {
rev = reverse("--no-such--value----");
boring += i >= 0;
}
if (boring < 1 || i == size)
printf("%s: %d → %s → %d\n", name, i, strnull(val), rev);
else if (boring == 1)
printf("%*s ...\n", (int) strlen(name), "");
if (i >= 0 && i < size) {
if (sparse)
assert_se(rev == i || rev == -EINVAL);
else
assert_se(val != NULL && rev == i);
} else
assert_se(val == NULL && rev == -EINVAL);
#define _test_table(name, lookup, reverse, size, sparse) \
for (int64_t _i = -EINVAL, _boring = 0; _i < size + 1; _i++) { \
const char* _val; \
int64_t _rev; \
\
_val = lookup(_i); \
if (_val) { \
_rev = reverse(_val); \
_boring = 0; \
} else { \
_rev = reverse("--no-such--value----"); \
_boring += _i >= 0; \
} \
if (_boring == 0 || _i == size) \
printf("%s: %" PRIi64 " → %s → %" PRIi64 "\n", name, _i, strnull(_val), _rev); \
else if (_boring == 1) \
printf("%*s ...\n", (int) strlen(name), ""); \
\
if (_i >= 0 && _i < size) { \
if (sparse) \
assert_se(_rev == _i || _rev == -EINVAL); \
else \
assert_se(_val && _rev == _i); \
} else \
assert_se(!_val && _rev == -EINVAL); \
}
}
#define test_table(lower, upper) \
#define test_table(lower, upper) \
_test_table(STRINGIFY(lower), lower##_to_string, lower##_from_string, _##upper##_MAX, false)
#define test_table_sparse(lower, upper) \
#define test_table_sparse(lower, upper) \
_test_table(STRINGIFY(lower), lower##_to_string, lower##_from_string, _##upper##_MAX, true)