Draw num writes directly

This commit is contained in:
2024-02-03 17:03:23 -08:00
parent a632d0cbbb
commit a73e366dc9

View File

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