diff --git a/Internal.h b/Internal.h index c768932..0d4f791 100644 --- a/Internal.h +++ b/Internal.h @@ -467,13 +467,15 @@ inline uint32_t Arbitrary::bounded(uint32_t s) { // ==================== END ARBITRARY IMPL ==================== struct ReferenceImpl { - explicit ReferenceImpl(int64_t oldestVersion) : oldestVersion(oldestVersion) { + explicit ReferenceImpl(int64_t oldestVersion) + : oldestVersion(oldestVersion), newestVersion(oldestVersion) { writeVersionMap[""] = oldestVersion; } void check(const ConflictSet::ReadRange *reads, ConflictSet::Result *results, int count) const { for (int i = 0; i < count; ++i) { - if (reads[i].readVersion < oldestVersion) { + if (reads[i].readVersion < oldestVersion || + reads[i].readVersion < newestVersion - 2e9) { results[i] = ConflictSet::TooOld; continue; } @@ -495,6 +497,8 @@ struct ReferenceImpl { } void addWrites(const ConflictSet::WriteRange *writes, int count, int64_t writeVersion) { + assert(writeVersion >= newestVersion); + newestVersion = writeVersion; for (int i = 0; i < count; ++i) { auto begin = std::string((const char *)writes[i].begin.p, writes[i].begin.len); @@ -519,6 +523,7 @@ struct ReferenceImpl { } int64_t oldestVersion; + int64_t newestVersion; std::map writeVersionMap; }; @@ -600,7 +605,7 @@ template struct TestDriver { { int numPointWrites = arbitrary.bounded(100); int numRangeWrites = arbitrary.bounded(100); - int64_t v = (writeVersion += arbitrary.bounded(10)); + int64_t v = (writeVersion += arbitrary.bounded(2e9)); auto *writes = new (arena) ConflictSet::WriteRange[numPointWrites + numRangeWrites]; auto keys = set(arena); @@ -642,18 +647,19 @@ template struct TestDriver { } #if DEBUG_VERBOSE && !defined(NDEBUG) if (writes[i].end.len == 0) { - fprintf(stderr, "Write: {%s} -> %" PRId64 "\n", - printable(writes[i].begin).c_str(), writeVersion); + fprintf(stderr, "Write: {%s}\n", printable(writes[i].begin).c_str()); } else { - fprintf(stderr, "Write: [%s, %s) -> %" PRId64 "\n", + fprintf(stderr, "Write: [%s, %s)\n", printable(writes[i].begin).c_str(), - printable(writes[i].end).c_str(), writeVersion); + printable(writes[i].end).c_str()); } #endif } assert(iter == keys.end()); assert(i == numPointWrites + numRangeWrites); + fprintf(stderr, "Write @ %" PRId64 "\n", v); + CALLGRIND_START_INSTRUMENTATION; cs.addWrites(writes, numPointWrites + numRangeWrites, v); CALLGRIND_STOP_INSTRUMENTATION;