mdbx-test: доработка генератора ключей/значений для надежной генерации уникальных значений.

В текущем понимании коммитом этим устраняется застарелая проблема редких
сбоев стохастического теста из-за вероятности ошибочной генерации
повторяющихся пар key-value.
This commit is contained in:
Леонид Юрьев (Leonid Yuriev)
2024-03-02 01:08:22 +03:00
parent 9480599afa
commit e29cb076d3
3 changed files with 91 additions and 21 deletions

View File

@@ -108,10 +108,14 @@ class maker {
struct essentials {
uint16_t minlen{0};
enum { prng_fill_flag = 1, value_age_width = 8 };
enum { prng_fill_flag = 1, value_age_minwidth = 5 };
uint16_t flags{0};
uint32_t maxlen{0};
serial_t mask{0};
unsigned bits;
} key_essentials, value_essentials;
unsigned value_age_bits;
serial_t value_age_mask{0};
static serial_t mk_begin(serial_t serial, const essentials &params,
result &out);
@@ -136,6 +140,11 @@ public:
}
return increment(serial, int64_t(uint64_t(delta) << mapping.split));
}
serial_t remix_age(serial_t serial) const {
return (UINT64_C(768097847591) * (serial ^ UINT64_C(768097847591))) &
value_age_mask;
}
};
void log_pair(logging::loglevel level, const char *prefix, const buffer &key,