Draw num writes directly
This commit is contained in:
60
Internal.h
60
Internal.h
@@ -474,11 +474,13 @@ template <class ConflictSetImpl> struct TestDriver {
|
||||
}
|
||||
Arena arena;
|
||||
{
|
||||
int numWriteKeys = arbitrary.bounded(10);
|
||||
int numPointWrites = arbitrary.bounded(100);
|
||||
int numRangeWrites = arbitrary.bounded(100);
|
||||
int64_t v = ++writeVersion;
|
||||
auto *writes = new (arena) ConflictSet::WriteRange[numWriteKeys];
|
||||
auto *writes =
|
||||
new (arena) ConflictSet::WriteRange[numPointWrites + numRangeWrites];
|
||||
auto keys = set<std::string_view>(arena);
|
||||
while (int(keys.size()) < numWriteKeys) {
|
||||
while (int(keys.size()) < numPointWrites + numRangeWrites * 2) {
|
||||
if (!arbitrary.hasEntropy()) {
|
||||
return true;
|
||||
}
|
||||
@@ -487,37 +489,51 @@ template <class ConflictSetImpl> struct TestDriver {
|
||||
arbitrary.randomBytes(begin, keyLen);
|
||||
keys.insert(std::string_view((const char *)begin, keyLen));
|
||||
}
|
||||
|
||||
auto iter = keys.begin();
|
||||
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;
|
||||
if (i + 1 < numWriteKeys && arbitrary.bounded(2)) {
|
||||
++i;
|
||||
writes[numWrites].end.p = (const uint8_t *)iter->data();
|
||||
writes[numWrites].end.len = iter->size();
|
||||
int i = 0;
|
||||
for (int pointsRemaining = numPointWrites,
|
||||
rangesRemaining = numRangeWrites;
|
||||
pointsRemaining > 0 || rangesRemaining > 0; ++i) {
|
||||
bool pointRead = pointsRemaining > 0 && rangesRemaining > 0
|
||||
? bool(arbitrary.bounded(2))
|
||||
: pointsRemaining > 0;
|
||||
if (pointRead) {
|
||||
assert(pointsRemaining > 0);
|
||||
writes[i].begin.p = (const uint8_t *)iter->data();
|
||||
writes[i].begin.len = iter->size();
|
||||
writes[i].end.len = 0;
|
||||
++iter;
|
||||
--pointsRemaining;
|
||||
} else {
|
||||
writes[numWrites].end.len = 0;
|
||||
assert(rangesRemaining > 0);
|
||||
writes[i].begin.p = (const uint8_t *)iter->data();
|
||||
writes[i].begin.len = iter->size();
|
||||
++iter;
|
||||
writes[i].end.p = (const uint8_t *)iter->data();
|
||||
writes[i].end.len = iter->size();
|
||||
++iter;
|
||||
--rangesRemaining;
|
||||
}
|
||||
writes[numWrites].writeVersion = v;
|
||||
writes[i].writeVersion = v;
|
||||
#if DEBUG_VERBOSE && !defined(NDEBUG)
|
||||
if (writes[numWrites].end.len == 0) {
|
||||
if (writes[i].end.len == 0) {
|
||||
fprintf(stderr, "Write: {%s} -> %d\n",
|
||||
printable(writes[numWrites].begin).c_str(),
|
||||
int(writes[numWrites].writeVersion));
|
||||
printable(writes[i].begin).c_str(),
|
||||
int(writes[i].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));
|
||||
printable(writes[i].begin).c_str(),
|
||||
printable(writes[i].end).c_str(),
|
||||
int(writes[i].writeVersion));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
assert(iter == keys.end());
|
||||
cs.addWrites(writes, numWrites);
|
||||
refImpl.addWrites(writes, numWrites);
|
||||
assert(i == numPointWrites + numRangeWrites);
|
||||
|
||||
cs.addWrites(writes, numPointWrites + numRangeWrites);
|
||||
refImpl.addWrites(writes, numPointWrites + numRangeWrites);
|
||||
}
|
||||
{
|
||||
int numReads = arbitrary.bounded(10);
|
||||
|
Reference in New Issue
Block a user