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;
|
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);
|
||||||
|
Reference in New Issue
Block a user