Fix two node-copying bugs in update

This commit is contained in:
2024-05-14 17:44:01 -07:00
parent 862fc3297c
commit 67c8ca8f3a
4 changed files with 74 additions and 17 deletions

View File

@@ -1,4 +1,5 @@
#include "Facade.h"
#include "PrintMutation.h"
#include "VersionedMap.h"
#include <inttypes.h>
@@ -24,6 +25,8 @@ weaselab::VersionedMap::Mutation clear(weaselab::VersionedMap::Key begin,
return {begin.p, end.p, begin.len, end.len, weaselab::VersionedMap::Clear};
}
void breakpoint_me() {}
int main() {
Facade f(0);
int64_t version = 1;
@@ -42,13 +45,14 @@ int main() {
}
for (int64_t i = 0; i < version; ++i) {
printf("--- version %" PRId64 " ---\n", i);
auto result = f.viewAt(i).rangeRead("a"_s, "d"_s, 10, false);
printf("merged:\n");
auto result = f.viewAt(i).rangeRead("a"_s, "z"_s, 100, false);
for (const auto &[k, v] : result) {
for (auto c : k) {
if (isprint(c)) {
printf("%c", c);
} else {
printf("0x%02x", c);
printf("x%02x", c);
}
}
printf(" -> ");
@@ -56,10 +60,35 @@ int main() {
if (isprint(c)) {
printf("%c", c);
} else {
printf("0x%02x", c);
printf("x%02x", c);
}
}
printf("\n");
}
printf("unversioned:\n");
for (const auto &[k, v] : f.unversioned) {
for (auto c : k) {
if (isprint(c)) {
printf("%c", c);
} else {
printf("x%02x", c);
}
}
printf(" -> ");
for (auto c : v) {
if (isprint(c)) {
printf("%c", c);
} else {
printf("x%02x", c);
}
}
printf("\n");
}
breakpoint_me();
printf("versioned:\n");
for (auto iter = f.versioned.begin(i), end = f.versioned.end(i);
iter != end; ++iter) {
printMutation(*iter);
}
}
}