Partial keys seem to be working

This commit is contained in:
2024-01-31 11:10:41 -08:00
parent 2e6265b784
commit 5a69ec82df
2 changed files with 57 additions and 71 deletions

View File

@@ -449,6 +449,8 @@ template <class ConflictSetImpl> struct TestDriver {
ConflictSetImpl cs{writeVersion};
ReferenceImpl refImpl{writeVersion};
constexpr static auto kMaxKeyLen = 24;
// Call until it returns true, for "done". Check internal invariants etc
// between calls to next.
bool next() {
@@ -457,7 +459,7 @@ template <class ConflictSetImpl> struct TestDriver {
}
Arena arena;
{
int numWrites = arbitrary.bounded(10);
int numWrites = arbitrary.bounded(kMaxKeyLen);
int64_t v = ++writeVersion;
auto *writes = new (arena) ConflictSet::WriteRange[numWrites];
auto keys = set<std::string_view>(arena);
@@ -465,7 +467,7 @@ template <class ConflictSetImpl> struct TestDriver {
if (!arbitrary.hasEntropy()) {
return true;
}
int keyLen = arbitrary.bounded(8);
int keyLen = arbitrary.bounded(kMaxKeyLen);
auto *begin = new (arena) uint8_t[keyLen];
arbitrary.randomBytes(begin, keyLen);
keys.insert(std::string_view((const char *)begin, keyLen));
@@ -478,8 +480,9 @@ template <class ConflictSetImpl> struct TestDriver {
writes[i].end.len = 0;
writes[i].writeVersion = v;
#if DEBUG_VERBOSE && !defined(NDEBUG)
printf("Write: {%s} -> %d\n", printable(writes[i].begin).c_str(),
int(writes[i].writeVersion));
fprintf(stderr, "Write: {%s} -> %d\n",
printable(writes[i].begin).c_str(),
int(writes[i].writeVersion));
#endif
}
assert(iter == keys.end());
@@ -488,14 +491,14 @@ template <class ConflictSetImpl> struct TestDriver {
}
{
int numReads = arbitrary.bounded(10);
int64_t v = writeVersion - arbitrary.bounded(10);
int64_t v = std::max<int64_t>(writeVersion - arbitrary.bounded(10), 0);
auto *reads = new (arena) ConflictSet::ReadRange[numReads];
auto keys = set<std::string_view>(arena);
while (int(keys.size()) < numReads) {
if (!arbitrary.hasEntropy()) {
return true;
}
int keyLen = arbitrary.bounded(8);
int keyLen = arbitrary.bounded(kMaxKeyLen);
auto *begin = new (arena) uint8_t[keyLen];
arbitrary.randomBytes(begin, keyLen);
keys.insert(std::string_view((const char *)begin, keyLen));
@@ -508,8 +511,8 @@ template <class ConflictSetImpl> struct TestDriver {
reads[i].end.len = 0;
reads[i].readVersion = v;
#if DEBUG_VERBOSE && !defined(NDEBUG)
printf("Read: {%s} at %d\n", printable(reads[i].begin).c_str(),
int(reads[i].readVersion));
fprintf(stderr, "Read: {%s} at %d\n", printable(reads[i].begin).c_str(),
int(reads[i].readVersion));
#endif
}
assert(iter == keys.end());