diff --git a/Internal.h b/Internal.h index 238bcab..1233288 100644 --- a/Internal.h +++ b/Internal.h @@ -507,6 +507,18 @@ inline std::string printable(std::span key) { return printable(std::string_view((const char *)key.data(), key.size())); } +inline const char *resultToStr(ConflictSet::Result r) { + switch (r) { + case ConflictSet::Commit: + return "commit"; + case ConflictSet::Conflict: + return "conflict"; + case ConflictSet::TooOld: + return "too old"; + } + abort(); +} + namespace { template struct TestDriver { @@ -523,18 +535,6 @@ template struct TestDriver { bool ok = true; - static const char *resultToStr(ConflictSet::Result r) { - switch (r) { - case ConflictSet::Commit: - return "commit"; - case ConflictSet::Conflict: - return "conflict"; - case ConflictSet::TooOld: - return "too old"; - } - abort(); - } - // Call until it returns true, for "done". Check internal invariants etc // between calls to next. bool next() { diff --git a/ScriptTest.cpp b/ScriptTest.cpp index e9f26bd..6a7a4e2 100644 --- a/ScriptTest.cpp +++ b/ScriptTest.cpp @@ -84,6 +84,7 @@ int main(int argc, const char **argv) { readRanges.push_back(r); } else if (line.starts_with("pointwrite"_v)) { printf("pointwrite\n"); + // TODO check sorted ConflictSet::WriteRange w; w.begin.p = b.data(); w.begin.len = b.size(); @@ -100,6 +101,7 @@ int main(int argc, const char **argv) { readRanges.push_back(r); } else if (line.starts_with("rangewrite"_v)) { printf("rangewrite\n"); + // TODO check sorted ConflictSet::WriteRange w; w.begin.p = b.data(); w.begin.len = b.size(); @@ -114,7 +116,11 @@ int main(int argc, const char **argv) { ref.check(readRanges.data(), expected, readRanges.size()); cs.check(readRanges.data(), actual, readRanges.size()); for (int i = 0; i < int(readRanges.size()); ++i) { - assert(expected[i] == actual[i]); + if (expected[i] != actual[i]) { + fprintf(stderr, "Expected %s, got %s at index %d\n", + resultToStr(expected[i]), resultToStr(actual[i]), i); + return 1; + } } readRanges = {}; } else if (line.starts_with("addwrites"_v)) { @@ -126,6 +132,8 @@ int main(int argc, const char **argv) { printf("setoldest\n"); cs.setOldestVersion(v); ref.setOldestVersion(v); + } else if (line.empty() || line.starts_with(";"_v)) { + // skip } else { printf("Unrecognized line: %.*s\n", int(line.size()), line.data()); } diff --git a/script_tests/inner-full-word.txt b/script_tests/inner-full-word.txt new file mode 100644 index 0000000..f1319ad --- /dev/null +++ b/script_tests/inner-full-word.txt @@ -0,0 +1,212 @@ +; insert \x3fa at version 1 +begin ?a +pointwrite + +; insert \x81a at version 1 +begin a +pointwrite +version 1 +addwrites + +; insert [\x40-\x80]a at version 2 +begin @a +pointwrite + +begin Aa +pointwrite + +begin Ba +pointwrite + +begin Ca +pointwrite + +begin Da +pointwrite + +begin Ea +pointwrite + +begin Fa +pointwrite + +begin Ga +pointwrite + +begin Ha +pointwrite + +begin Ia +pointwrite + +begin Ja +pointwrite + +begin Ka +pointwrite + +begin La +pointwrite + +begin Ma +pointwrite + +begin Na +pointwrite + +begin Oa +pointwrite + +begin Pa +pointwrite + +begin Qa +pointwrite + +begin Ra +pointwrite + +begin Sa +pointwrite + +begin Ta +pointwrite + +begin Ua +pointwrite + +begin Va +pointwrite + +begin Wa +pointwrite + +begin Xa +pointwrite + +begin Ya +pointwrite + +begin Za +pointwrite + +begin [a +pointwrite + +begin \a +pointwrite + +begin ]a +pointwrite + +begin ^a +pointwrite + +begin _a +pointwrite + +begin `a +pointwrite + +begin aa +pointwrite + +begin ba +pointwrite + +begin ca +pointwrite + +begin da +pointwrite + +begin ea +pointwrite + +begin fa +pointwrite + +begin ga +pointwrite + +begin ha +pointwrite + +begin ia +pointwrite + +begin ja +pointwrite + +begin ka +pointwrite + +begin la +pointwrite + +begin ma +pointwrite + +begin na +pointwrite + +begin oa +pointwrite + +begin pa +pointwrite + +begin qa +pointwrite + +begin ra +pointwrite + +begin sa +pointwrite + +begin ta +pointwrite + +begin ua +pointwrite + +begin va +pointwrite + +begin wa +pointwrite + +begin xa +pointwrite + +begin ya +pointwrite + +begin za +pointwrite + +begin {a +pointwrite + +begin |a +pointwrite + +begin }a +pointwrite + +begin ~a +pointwrite + +begin a +pointwrite + +version 2 +addwrites + +; readrange a superset at version 1 +begin ! +end ‚ +version 1 +rangeread +check