From 544c6bc1e49b46d35c1d6a2b8eae64d3b2c11e7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D0=B5=D0=BE=D0=BD=D0=B8=D0=B4=20=D0=AE=D1=80=D1=8C?= =?UTF-8?q?=D0=B5=D0=B2=20=28Leonid=20Yuriev=29?= Date: Tue, 20 Feb 2024 13:45:12 +0300 Subject: [PATCH] =?UTF-8?q?mdbx-test:=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5?= =?UTF-8?q?=D1=80=D0=B6=D0=BA=D0=B0=20rnd/rand/random=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=BE=D0=BF=D1=86=D0=B8=D0=B9=20`--keylen`=20=D0=B8=20`--da?= =?UTF-8?q?talen`.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/config.c++ | 14 +++++++++++++- test/config.h++ | 2 +- test/main.c++ | 50 +++++++++++++++++++++++++++++-------------------- 3 files changed, 44 insertions(+), 22 deletions(-) diff --git a/test/config.c++ b/test/config.c++ index 922f7b37..acad8fb6 100644 --- a/test/config.c++ +++ b/test/config.c++ @@ -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; } diff --git a/test/config.h++ b/test/config.h++ index 80996157..be369171 100644 --- a/test/config.h++ +++ b/test/config.h++ @@ -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); diff --git a/test/main.c++ b/test/main.c++ index 6242a05d..fe159142 100644 --- a/test/main.c++ +++ b/test/main.c++ @@ -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; }