From a73e366dc914f4d2a20dc58d3656b598089f4ac2 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Sat, 3 Feb 2024 17:03:23 -0800 Subject: [PATCH] Draw num writes directly --- Internal.h | 62 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/Internal.h b/Internal.h index 2d329f1..7a3dffc 100644 --- a/Internal.h +++ b/Internal.h @@ -474,11 +474,13 @@ template 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(arena); - while (int(keys.size()) < numWriteKeys) { + while (int(keys.size()) < numPointWrites + numRangeWrites * 2) { if (!arbitrary.hasEntropy()) { return true; } @@ -487,37 +489,51 @@ template 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); @@ -566,4 +582,4 @@ template struct TestDriver { }; } // namespace -// GCOVR_EXCL_STOP \ No newline at end of file +// GCOVR_EXCL_STOP