mirror of
https://github.com/isar/libmdbx.git
synced 2025-03-03 16:58:14 +08:00
mdbx-test: поддержка rnd/rand/random для опций --keylen
и --datalen
.
This commit is contained in:
parent
164d112507
commit
544c6bc1e4
@ -145,6 +145,16 @@ bool parse_option(int argc, char *const argv[], int &narg, const char *option,
|
||||
return true;
|
||||
}
|
||||
|
||||
if (strcmp(value_cstr, "rnd") == 0 || strcmp(value_cstr, "rand") == 0 ||
|
||||
strcmp(value_cstr, "random") == 0) {
|
||||
value = minval;
|
||||
if (maxval > minval)
|
||||
value += (prng32() + UINT64_C(44263400549519813)) % (maxval - minval);
|
||||
if (scale == intkey)
|
||||
value &= ~3u;
|
||||
return true;
|
||||
}
|
||||
|
||||
char *suffix = nullptr;
|
||||
errno = 0;
|
||||
unsigned long long raw = strtoull(value_cstr, &suffix, 0);
|
||||
@ -159,7 +169,7 @@ bool parse_option(int argc, char *const argv[], int &narg, const char *option,
|
||||
|
||||
uint64_t multiplier = 1;
|
||||
if (suffix && *suffix) {
|
||||
if (scale == no_scale)
|
||||
if (scale == no_scale || scale == intkey)
|
||||
failure("Option '--%s' doesn't accepts suffixes, so '%s' is unexpected\n",
|
||||
option, suffix);
|
||||
if (strcmp(suffix, "K") == 0 || strcasecmp(suffix, "Kilo") == 0)
|
||||
@ -203,6 +213,8 @@ bool parse_option(int argc, char *const argv[], int &narg, const char *option,
|
||||
if (value < minval)
|
||||
failure("The minimal value for option '--%s' is %" PRIu64 "\n", option,
|
||||
minval);
|
||||
if (scale == intkey)
|
||||
value &= ~3u;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -63,7 +63,7 @@ const char *keygencase2str(const keygen_case);
|
||||
|
||||
namespace config {
|
||||
|
||||
enum scale_mode { no_scale, decimal, binary, duration };
|
||||
enum scale_mode { no_scale, decimal, binary, duration, intkey };
|
||||
|
||||
bool parse_option(int argc, char *const argv[], int &narg, const char *option,
|
||||
const char **value, const char *default_value = nullptr);
|
||||
|
@ -468,49 +468,59 @@ int main(int argc, char *const argv[]) {
|
||||
keycase_setup(value, params);
|
||||
continue;
|
||||
}
|
||||
if (config::parse_option(argc, argv, narg, "keylen.min", params.keylen_min,
|
||||
config::no_scale, params.mdbx_keylen_min(),
|
||||
params.mdbx_keylen_max())) {
|
||||
if (config::parse_option(
|
||||
argc, argv, narg, "keylen.min", params.keylen_min,
|
||||
(params.table_flags & MDBX_INTEGERKEY) ? config::intkey
|
||||
: config::no_scale,
|
||||
params.mdbx_keylen_min(), params.mdbx_keylen_max())) {
|
||||
if ((params.table_flags & MDBX_INTEGERKEY) ||
|
||||
params.keylen_max < params.keylen_min)
|
||||
params.keylen_max = params.keylen_min;
|
||||
continue;
|
||||
}
|
||||
if (config::parse_option(argc, argv, narg, "keylen.max", params.keylen_max,
|
||||
config::no_scale, params.mdbx_keylen_min(),
|
||||
params.mdbx_keylen_max())) {
|
||||
if (config::parse_option(
|
||||
argc, argv, narg, "keylen.max", params.keylen_max,
|
||||
(params.table_flags & MDBX_INTEGERKEY) ? config::intkey
|
||||
: config::no_scale,
|
||||
params.mdbx_keylen_min(), params.mdbx_keylen_max())) {
|
||||
if ((params.table_flags & MDBX_INTEGERKEY) ||
|
||||
params.keylen_min > params.keylen_max)
|
||||
params.keylen_min = params.keylen_max;
|
||||
continue;
|
||||
}
|
||||
if (config::parse_option(argc, argv, narg, "keylen", params.keylen_min,
|
||||
config::no_scale, params.mdbx_keylen_min(),
|
||||
params.mdbx_keylen_max())) {
|
||||
if (config::parse_option(
|
||||
argc, argv, narg, "keylen", params.keylen_min,
|
||||
(params.table_flags & MDBX_INTEGERKEY) ? config::intkey
|
||||
: config::no_scale,
|
||||
params.mdbx_keylen_min(), params.mdbx_keylen_max())) {
|
||||
params.keylen_max = params.keylen_min;
|
||||
continue;
|
||||
}
|
||||
if (config::parse_option(argc, argv, narg, "datalen.min",
|
||||
params.datalen_min, config::no_scale,
|
||||
params.mdbx_datalen_min(),
|
||||
params.mdbx_datalen_max())) {
|
||||
if (config::parse_option(
|
||||
argc, argv, narg, "datalen.min", params.datalen_min,
|
||||
(params.table_flags & MDBX_INTEGERDUP) ? config::intkey
|
||||
: config::no_scale,
|
||||
params.mdbx_datalen_min(), params.mdbx_datalen_max())) {
|
||||
if ((params.table_flags & (MDBX_INTEGERDUP | MDBX_DUPFIXED)) ||
|
||||
params.datalen_max < params.datalen_min)
|
||||
params.datalen_max = params.datalen_min;
|
||||
continue;
|
||||
}
|
||||
if (config::parse_option(argc, argv, narg, "datalen.max",
|
||||
params.datalen_max, config::no_scale,
|
||||
params.mdbx_datalen_min(),
|
||||
params.mdbx_datalen_max())) {
|
||||
if (config::parse_option(
|
||||
argc, argv, narg, "datalen.max", params.datalen_max,
|
||||
(params.table_flags & MDBX_INTEGERDUP) ? config::intkey
|
||||
: config::no_scale,
|
||||
params.mdbx_datalen_min(), params.mdbx_datalen_max())) {
|
||||
if ((params.table_flags & (MDBX_INTEGERDUP | MDBX_DUPFIXED)) ||
|
||||
params.datalen_min > params.datalen_max)
|
||||
params.datalen_min = params.datalen_max;
|
||||
continue;
|
||||
}
|
||||
if (config::parse_option(argc, argv, narg, "datalen", params.datalen_min,
|
||||
config::no_scale, params.mdbx_datalen_min(),
|
||||
params.mdbx_datalen_max())) {
|
||||
if (config::parse_option(
|
||||
argc, argv, narg, "datalen", params.datalen_min,
|
||||
(params.table_flags & MDBX_INTEGERDUP) ? config::intkey
|
||||
: config::no_scale,
|
||||
params.mdbx_datalen_min(), params.mdbx_datalen_max())) {
|
||||
params.datalen_max = params.datalen_min;
|
||||
continue;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user