Files
versioned-map/FacadeTest.cpp

95 lines
2.5 KiB
C++

#include "Facade.h"
#include "PrintMutation.h"
#include "VersionedMap.h"
#include <inttypes.h>
inline weaselab::VersionedMap::Key operator"" _k(const char *str, size_t size) {
return {reinterpret_cast<const uint8_t *>(str), int(size)};
}
inline String operator"" _s(const char *str, size_t size) {
return String{reinterpret_cast<const uint8_t *>(str), size};
}
weaselab::VersionedMap::Mutation set(weaselab::VersionedMap::Key k,
weaselab::VersionedMap::Key v) {
return {k.p, v.p, k.len, v.len, weaselab::VersionedMap::Set};
}
weaselab::VersionedMap::Mutation clear(weaselab::VersionedMap::Key k) {
return {k.p, nullptr, k.len, 0, weaselab::VersionedMap::Clear};
}
weaselab::VersionedMap::Mutation clear(weaselab::VersionedMap::Key begin,
weaselab::VersionedMap::Key end) {
return {begin.p, end.p, begin.len, end.len, weaselab::VersionedMap::Clear};
}
void breakpoint_me() {}
int main() {
Facade f(0);
int64_t version = 1;
{
weaselab::VersionedMap::Mutation m[] = {
set("a"_k, "a"_k), set("b"_k, "b"_k), set("c"_k, "c"_k),
set("d"_k, "d"_k), set("e"_k, "e"_k),
};
f.addMutations(m, sizeof(m) / sizeof(m[0]), version++);
}
{
weaselab::VersionedMap::Mutation m[] = {
clear("b"_k, "d"_k),
};
f.addMutations(m, sizeof(m) / sizeof(m[0]), version++);
}
f.setOldestVersion(1);
for (int64_t i = 1; i < version; ++i) {
printf("--- version %" PRId64 " ---\n", i);
printf("merged:\n");
auto result = f.viewAt(i).rangeRead("a"_s, "e"_s, 100, false);
for (const auto &[k, v] : result) {
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");
}
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);
}
}
}