Range write WIP

This commit is contained in:
2024-01-31 17:06:59 -08:00
parent 812eb27708
commit 96aca4a1da
2 changed files with 88 additions and 30 deletions

View File

@@ -14,7 +14,7 @@
#include <utility>
#include <vector>
#define DEBUG_VERBOSE 0
#define DEBUG_VERBOSE 1
// This header contains code that we want to reuse outside of ConflictSet.cpp or
// want to exclude from coverage since it's only testing related.
@@ -459,11 +459,11 @@ template <class ConflictSetImpl> struct TestDriver {
}
Arena arena;
{
int numWrites = arbitrary.bounded(kMaxKeyLen);
int numWriteKeys = arbitrary.bounded(10);
int64_t v = ++writeVersion;
auto *writes = new (arena) ConflictSet::WriteRange[numWrites];
auto *writes = new (arena) ConflictSet::WriteRange[numWriteKeys];
auto keys = set<std::string_view>(arena);
while (int(keys.size()) < numWrites) {
while (int(keys.size()) < numWriteKeys) {
if (!arbitrary.hasEntropy()) {
return true;
}
@@ -473,16 +473,31 @@ template <class ConflictSetImpl> struct TestDriver {
keys.insert(std::string_view((const char *)begin, keyLen));
}
auto iter = keys.begin();
for (int i = 0; i < numWrites; ++i) {
writes[i].begin.p = (const uint8_t *)iter->data();
writes[i].begin.len = iter->size();
int numWrites = 0;
for (int i = 0; i < numWriteKeys; ++i, ++numWrites) {
writes[numWrites].begin.p = (const uint8_t *)iter->data();
writes[numWrites].begin.len = iter->size();
++iter;
writes[i].end.len = 0;
writes[i].writeVersion = v;
if (i + 1 < numWriteKeys && arbitrary.bounded(2)) {
++i;
writes[numWrites].end.p = (const uint8_t *)iter->data();
writes[numWrites].end.len = iter->size();
++iter;
} else {
writes[numWrites].end.len = 0;
}
writes[numWrites].writeVersion = v;
#if DEBUG_VERBOSE && !defined(NDEBUG)
fprintf(stderr, "Write: {%s} -> %d\n",
printable(writes[i].begin).c_str(),
int(writes[i].writeVersion));
if (writes[numWrites].end.len == 0) {
fprintf(stderr, "Write: {%s} -> %d\n",
printable(writes[numWrites].begin).c_str(),
int(writes[numWrites].writeVersion));
} else {
fprintf(stderr, "Write: [%s, %s) -> %d\n",
printable(writes[numWrites].begin).c_str(),
printable(writes[numWrites].end).c_str(),
int(writes[numWrites].writeVersion));
}
#endif
}
assert(iter == keys.end());