diff --git a/Internal.h b/Internal.h index f929d0c..a14912f 100644 --- a/Internal.h +++ b/Internal.h @@ -35,6 +35,17 @@ operator<=>(const std::span &lhs, return lhs.size() <=> rhs.size(); } +[[nodiscard]] inline auto operator<=>(const std::span &lhs, + const ConflictSet::Key &rhs) noexcept { + int cl = std::min(lhs.size(), rhs.len); + if (cl > 0) { + if (auto c = memcmp(lhs.data(), rhs.p, cl) <=> 0; c != 0) { + return c; + } + } + return lhs.size() <=> size_t(rhs.len); +} + // This header contains code that we want to reuse outside of ConflictSet.cpp or // want to exclude from coverage since it's only testing related. diff --git a/ScriptTest.cpp b/ScriptTest.cpp index 6a7a4e2..d9c9a3a 100644 --- a/ScriptTest.cpp +++ b/ScriptTest.cpp @@ -51,6 +51,8 @@ int main(int argc, const char **argv) { StringView b; StringView e; int64_t v = 0; + int64_t lastWriteVersion = 0; + int64_t lastOldestVersion = 0; std::vector writeRanges; std::vector readRanges; std::vector results; @@ -84,7 +86,9 @@ int main(int argc, const char **argv) { readRanges.push_back(r); } else if (line.starts_with("pointwrite"_v)) { printf("pointwrite\n"); - // TODO check sorted + assert(writeRanges.empty() || + (writeRanges.back().end.len == 0 ? writeRanges.back().begin + : writeRanges.back().end) < b); ConflictSet::WriteRange w; w.begin.p = b.data(); w.begin.len = b.size(); @@ -101,7 +105,10 @@ int main(int argc, const char **argv) { readRanges.push_back(r); } else if (line.starts_with("rangewrite"_v)) { printf("rangewrite\n"); - // TODO check sorted + assert(b < e); + assert(writeRanges.empty() || + (writeRanges.back().end.len == 0 ? writeRanges.back().begin + : writeRanges.back().end) < b); ConflictSet::WriteRange w; w.begin.p = b.data(); w.begin.len = b.size(); @@ -125,11 +132,15 @@ int main(int argc, const char **argv) { readRanges = {}; } else if (line.starts_with("addwrites"_v)) { printf("addwrites\n"); + assert(v > lastWriteVersion); + lastWriteVersion = v; cs.addWrites(writeRanges.data(), writeRanges.size(), v); ref.addWrites(writeRanges.data(), writeRanges.size(), v); writeRanges = {}; } else if (line.starts_with("setoldest"_v)) { printf("setoldest\n"); + assert(v > lastOldestVersion); + lastOldestVersion = v; cs.setOldestVersion(v); ref.setOldestVersion(v); } else if (line.empty() || line.starts_with(";"_v)) { diff --git a/script_tests/256-256.txt b/script_tests/256-256.txt index 394e9e6..2f50ba2 100644 --- a/script_tests/256-256.txt +++ b/script_tests/256-256.txt @@ -160,6 +160,8 @@ pointwrite begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz pointwrite +version 1 +addwrites ; Lower its partial key length begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/script_tests/48-48.txt b/script_tests/48-48.txt index daad7f8..9f3163a 100644 --- a/script_tests/48-48.txt +++ b/script_tests/48-48.txt @@ -1,5 +1,5 @@ ; Create a node with a large partial key capacity -begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0 pointwrite ; Make it a Node48 @@ -53,22 +53,20 @@ pointwrite begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaq pointwrite +version 2 +addwrites ; Lower its partial key length begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa pointwrite -version 2 +version 3 addwrites ; Create work for setoldest begin x end y -rangewrite -version 3 -addwrites - rangewrite version 4 addwrites @@ -141,5 +139,9 @@ rangewrite version 21 addwrites +rangewrite +version 22 +addwrites + version 1 setoldest diff --git a/script_tests/downsize-256.txt b/script_tests/downsize-256.txt index 7b12b3a..1e57296 100644 --- a/script_tests/downsize-256.txt +++ b/script_tests/downsize-256.txt @@ -108,13 +108,17 @@ begin 00y pointwrite begin 00z pointwrite +version 1 +addwrites begin 0 end 000 rangewrite +version 2 +addwrites begin end 00 rangewrite - +version 3 addwrites diff --git a/script_tests/downsize-48.txt b/script_tests/downsize-48.txt index dc05bde..e78f894 100644 --- a/script_tests/downsize-48.txt +++ b/script_tests/downsize-48.txt @@ -56,13 +56,17 @@ begin 00y pointwrite begin 00z pointwrite +version 1 +addwrites begin 0 end 000 rangewrite +version 2 +addwrites begin end 00 rangewrite - +version 3 addwrites