@@ -261,13 +261,14 @@ if(BUILD_TESTING)
|
||||
|
||||
# scripted tests. Written manually to fill in anything libfuzzer couldn't
|
||||
# find.
|
||||
add_executable(script_test ScriptTest.cpp)
|
||||
target_compile_options(script_test PRIVATE ${TEST_FLAGS})
|
||||
target_link_libraries(script_test PRIVATE ${PROJECT_NAME})
|
||||
file(GLOB SCRIPT_TESTS ${CMAKE_SOURCE_DIR}/script_tests/*)
|
||||
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
||||
execute_process(
|
||||
COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test_conflict_set.py list
|
||||
OUTPUT_VARIABLE SCRIPT_TESTS)
|
||||
foreach(TEST ${SCRIPT_TESTS})
|
||||
get_filename_component(name ${TEST} NAME)
|
||||
add_test(NAME conflict_set_script_${name} COMMAND script_test ${TEST})
|
||||
add_test(NAME script_test_${TEST}
|
||||
COMMAND ${Python3_EXECUTABLE}
|
||||
${CMAKE_SOURCE_DIR}/test_conflict_set.py test ${TEST})
|
||||
endforeach()
|
||||
|
||||
find_program(VALGRIND_EXE valgrind)
|
||||
|
155
ScriptTest.cpp
155
ScriptTest.cpp
@@ -1,155 +0,0 @@
|
||||
#include "Internal.h"
|
||||
#include <ConflictSet.h>
|
||||
|
||||
#include <chrono>
|
||||
#include <cstring>
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <vector>
|
||||
|
||||
inline size_t getPageSize() {
|
||||
static size_t kPageSize = sysconf(_SC_PAGESIZE);
|
||||
return kPageSize;
|
||||
}
|
||||
|
||||
/// Helper for rounding up to page size (or some other alignment)
|
||||
constexpr inline size_t rightAlign(size_t offset, size_t alignment) {
|
||||
return offset % alignment == 0 ? offset
|
||||
: ((offset / alignment) + 1) * alignment;
|
||||
}
|
||||
|
||||
using StringView = std::basic_string_view<uint8_t>;
|
||||
|
||||
inline StringView operator"" _v(const char *str, size_t size) {
|
||||
return {reinterpret_cast<const uint8_t *>(str), size};
|
||||
}
|
||||
|
||||
int main(int argc, const char **argv) {
|
||||
|
||||
ConflictSet cs{0};
|
||||
ReferenceImpl ref{0};
|
||||
|
||||
for (int i = 1; i < argc; ++i) {
|
||||
int fd = open(argv[i], O_RDONLY);
|
||||
struct stat st;
|
||||
if (fstat(fd, &st) == -1) {
|
||||
int err = errno;
|
||||
fprintf(stderr, "stat error %s - %s\n", argv[i], strerror(err));
|
||||
fflush(stderr);
|
||||
abort();
|
||||
}
|
||||
|
||||
int64_t size = rightAlign(st.st_size, getPageSize());
|
||||
const uint8_t *begin =
|
||||
(uint8_t *)mmap(0, size, PROT_READ, MAP_PRIVATE, fd, 0);
|
||||
madvise((void *)begin, size, MADV_SEQUENTIAL);
|
||||
auto *const mapOriginal = begin;
|
||||
const auto sizeOriginal = size;
|
||||
|
||||
StringView b;
|
||||
StringView e;
|
||||
int64_t v = 0;
|
||||
int64_t lastWriteVersion = 0;
|
||||
int64_t lastOldestVersion = 0;
|
||||
std::vector<ConflictSet::WriteRange> writeRanges;
|
||||
std::vector<ConflictSet::ReadRange> readRanges;
|
||||
std::vector<ConflictSet::Result> results;
|
||||
|
||||
for (uint8_t *end = (uint8_t *)memchr(begin, '\n', size); end != nullptr;) {
|
||||
StringView line{begin, static_cast<size_t>(end - begin)};
|
||||
size -= end - begin + 1;
|
||||
begin = end + 1;
|
||||
end = (uint8_t *)memchr(begin, '\n', size);
|
||||
|
||||
if (line.starts_with("begin"_v)) {
|
||||
b = line.substr("begin "_v.size(), line.size());
|
||||
printf("b <- %.*s\n", int(b.size()), b.data());
|
||||
} else if (line.starts_with("end"_v)) {
|
||||
e = line.substr("end "_v.size(), line.size());
|
||||
printf("e <- %.*s\n", int(e.size()), e.data());
|
||||
} else if (line.starts_with("version"_v)) {
|
||||
line = line.substr("version "_v.size(), line.size());
|
||||
v = 0;
|
||||
for (auto c : line) {
|
||||
v = v * 10 + int(c) - int('0');
|
||||
}
|
||||
printf("v <- %" PRId64 "\n", v);
|
||||
} else if (line.starts_with("pointread"_v)) {
|
||||
printf("pointread\n");
|
||||
ConflictSet::ReadRange r;
|
||||
r.begin.p = b.data();
|
||||
r.begin.len = b.size();
|
||||
r.end.len = 0;
|
||||
r.readVersion = v;
|
||||
readRanges.push_back(r);
|
||||
} else if (line.starts_with("pointwrite"_v)) {
|
||||
printf("pointwrite\n");
|
||||
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();
|
||||
w.end.len = 0;
|
||||
writeRanges.push_back(w);
|
||||
} else if (line.starts_with("rangeread"_v)) {
|
||||
printf("rangeread\n");
|
||||
ConflictSet::ReadRange r;
|
||||
r.begin.p = b.data();
|
||||
r.begin.len = b.size();
|
||||
r.end.p = e.data();
|
||||
r.end.len = e.size();
|
||||
r.readVersion = v;
|
||||
readRanges.push_back(r);
|
||||
} else if (line.starts_with("rangewrite"_v)) {
|
||||
printf("rangewrite\n");
|
||||
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();
|
||||
w.end.p = e.data();
|
||||
w.end.len = e.size();
|
||||
writeRanges.push_back(w);
|
||||
} else if (line.starts_with("check"_v)) {
|
||||
printf("check\n");
|
||||
Arena arena;
|
||||
auto *expected = new (arena) ConflictSet::Result[readRanges.size()];
|
||||
auto *actual = new (arena) ConflictSet::Result[readRanges.size()];
|
||||
ref.check(readRanges.data(), expected, readRanges.size());
|
||||
cs.check(readRanges.data(), actual, readRanges.size());
|
||||
for (int i = 0; i < int(readRanges.size()); ++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)) {
|
||||
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)) {
|
||||
// skip
|
||||
} else {
|
||||
printf("Unrecognized line: %.*s\n", int(line.size()), line.data());
|
||||
}
|
||||
}
|
||||
munmap((void *)mapOriginal, sizeOriginal);
|
||||
close(fd);
|
||||
}
|
||||
}
|
@@ -1,262 +0,0 @@
|
||||
|
||||
; Create a node with a large partial key capacity
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
pointwrite
|
||||
|
||||
; Make it a Node256
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaB
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaC
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaD
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaE
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaF
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaG
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaH
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaI
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJ
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaK
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaL
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaM
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaN
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaO
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaP
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaQ
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaR
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaS
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaT
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaU
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaV
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaW
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaX
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaY
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZ
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaad
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaae
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaf
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaj
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaak
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaam
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaan
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaao
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaap
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaq
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaat
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaau
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaav
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaw
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaax
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaay
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz
|
||||
pointwrite
|
||||
version 1
|
||||
addwrites
|
||||
|
||||
; Lower its partial key length
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
pointwrite
|
||||
|
||||
version 2
|
||||
addwrites
|
||||
|
||||
; Create work for setoldest
|
||||
|
||||
begin x
|
||||
end y
|
||||
rangewrite
|
||||
version 3
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 4
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 5
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 6
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 7
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 8
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 9
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 10
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 11
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 12
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 13
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 14
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 15
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 16
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 17
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 18
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 19
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 20
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 21
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 22
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 23
|
||||
addwrites
|
||||
|
||||
version 1
|
||||
setoldest
|
@@ -1,147 +0,0 @@
|
||||
; Create a node with a large partial key capacity
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0
|
||||
pointwrite
|
||||
|
||||
; Make it a Node48
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaad
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaae
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaf
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaj
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaak
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaam
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaan
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaao
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaap
|
||||
pointwrite
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaq
|
||||
pointwrite
|
||||
version 2
|
||||
addwrites
|
||||
|
||||
; Lower its partial key length
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
pointwrite
|
||||
|
||||
version 3
|
||||
addwrites
|
||||
|
||||
; Create work for setoldest
|
||||
|
||||
begin x
|
||||
end y
|
||||
rangewrite
|
||||
version 4
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 5
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 6
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 7
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 8
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 9
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 10
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 11
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 12
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 13
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 14
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 15
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 16
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 17
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 18
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 19
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 20
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 21
|
||||
addwrites
|
||||
|
||||
rangewrite
|
||||
version 22
|
||||
addwrites
|
||||
|
||||
version 1
|
||||
setoldest
|
@@ -1,124 +0,0 @@
|
||||
begin
|
||||
pointwrite
|
||||
begin 0
|
||||
pointwrite
|
||||
begin 00
|
||||
pointwrite
|
||||
begin 00A
|
||||
pointwrite
|
||||
begin 00B
|
||||
pointwrite
|
||||
begin 00C
|
||||
pointwrite
|
||||
begin 00D
|
||||
pointwrite
|
||||
begin 00E
|
||||
pointwrite
|
||||
begin 00F
|
||||
pointwrite
|
||||
begin 00G
|
||||
pointwrite
|
||||
begin 00H
|
||||
pointwrite
|
||||
begin 00I
|
||||
pointwrite
|
||||
begin 00J
|
||||
pointwrite
|
||||
begin 00K
|
||||
pointwrite
|
||||
begin 00L
|
||||
pointwrite
|
||||
begin 00M
|
||||
pointwrite
|
||||
begin 00N
|
||||
pointwrite
|
||||
begin 00O
|
||||
pointwrite
|
||||
begin 00P
|
||||
pointwrite
|
||||
begin 00Q
|
||||
pointwrite
|
||||
begin 00R
|
||||
pointwrite
|
||||
begin 00S
|
||||
pointwrite
|
||||
begin 00T
|
||||
pointwrite
|
||||
begin 00U
|
||||
pointwrite
|
||||
begin 00V
|
||||
pointwrite
|
||||
begin 00W
|
||||
pointwrite
|
||||
begin 00X
|
||||
pointwrite
|
||||
begin 00Y
|
||||
pointwrite
|
||||
begin 00Z
|
||||
pointwrite
|
||||
begin 00a
|
||||
pointwrite
|
||||
begin 00b
|
||||
pointwrite
|
||||
begin 00c
|
||||
pointwrite
|
||||
begin 00d
|
||||
pointwrite
|
||||
begin 00e
|
||||
pointwrite
|
||||
begin 00f
|
||||
pointwrite
|
||||
begin 00g
|
||||
pointwrite
|
||||
begin 00h
|
||||
pointwrite
|
||||
begin 00i
|
||||
pointwrite
|
||||
begin 00j
|
||||
pointwrite
|
||||
begin 00k
|
||||
pointwrite
|
||||
begin 00l
|
||||
pointwrite
|
||||
begin 00m
|
||||
pointwrite
|
||||
begin 00n
|
||||
pointwrite
|
||||
begin 00o
|
||||
pointwrite
|
||||
begin 00p
|
||||
pointwrite
|
||||
begin 00q
|
||||
pointwrite
|
||||
begin 00r
|
||||
pointwrite
|
||||
begin 00s
|
||||
pointwrite
|
||||
begin 00t
|
||||
pointwrite
|
||||
begin 00u
|
||||
pointwrite
|
||||
begin 00v
|
||||
pointwrite
|
||||
begin 00w
|
||||
pointwrite
|
||||
begin 00x
|
||||
pointwrite
|
||||
begin 00y
|
||||
pointwrite
|
||||
begin 00z
|
||||
pointwrite
|
||||
version 1
|
||||
addwrites
|
||||
|
||||
begin 0
|
||||
end 000
|
||||
rangewrite
|
||||
version 2
|
||||
addwrites
|
||||
|
||||
begin
|
||||
end 00
|
||||
rangewrite
|
||||
version 3
|
||||
addwrites
|
@@ -1,72 +0,0 @@
|
||||
begin
|
||||
pointwrite
|
||||
begin 0
|
||||
pointwrite
|
||||
begin 00
|
||||
pointwrite
|
||||
begin 00a
|
||||
pointwrite
|
||||
begin 00b
|
||||
pointwrite
|
||||
begin 00c
|
||||
pointwrite
|
||||
begin 00d
|
||||
pointwrite
|
||||
begin 00e
|
||||
pointwrite
|
||||
begin 00f
|
||||
pointwrite
|
||||
begin 00g
|
||||
pointwrite
|
||||
begin 00h
|
||||
pointwrite
|
||||
begin 00i
|
||||
pointwrite
|
||||
begin 00j
|
||||
pointwrite
|
||||
begin 00k
|
||||
pointwrite
|
||||
begin 00l
|
||||
pointwrite
|
||||
begin 00m
|
||||
pointwrite
|
||||
begin 00n
|
||||
pointwrite
|
||||
begin 00o
|
||||
pointwrite
|
||||
begin 00p
|
||||
pointwrite
|
||||
begin 00q
|
||||
pointwrite
|
||||
begin 00r
|
||||
pointwrite
|
||||
begin 00s
|
||||
pointwrite
|
||||
begin 00t
|
||||
pointwrite
|
||||
begin 00u
|
||||
pointwrite
|
||||
begin 00v
|
||||
pointwrite
|
||||
begin 00w
|
||||
pointwrite
|
||||
begin 00x
|
||||
pointwrite
|
||||
begin 00y
|
||||
pointwrite
|
||||
begin 00z
|
||||
pointwrite
|
||||
version 1
|
||||
addwrites
|
||||
|
||||
begin 0
|
||||
end 000
|
||||
rangewrite
|
||||
version 2
|
||||
addwrites
|
||||
|
||||
begin
|
||||
end 00
|
||||
rangewrite
|
||||
version 3
|
||||
addwrites
|
@@ -1,9 +0,0 @@
|
||||
begin aa
|
||||
pointwrite
|
||||
version 1
|
||||
addwrites
|
||||
begin aa
|
||||
end bb
|
||||
version 0
|
||||
rangeread
|
||||
check
|
@@ -1,212 +0,0 @@
|
||||
; 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
|
@@ -1,19 +0,0 @@
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
end aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab
|
||||
rangeread
|
||||
check
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
end aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazaaaaaaaaaaaaaaaaaaaaaab
|
||||
rangeread
|
||||
check
|
||||
|
||||
begin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
end aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaa
|
||||
rangeread
|
||||
check
|
||||
|
||||
begin aaaaaaaaaa
|
||||
end aaaaaaabaa
|
||||
rangeread
|
||||
check
|
@@ -10,3 +10,31 @@ def test_conflict_set():
|
||||
assert cs.check(read(0, key)) == [Result.CONFLICT]
|
||||
cs.setOldestVersion(1)
|
||||
assert cs.check(read(0, key)) == [Result.TOO_OLD]
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# budget "pytest" for ctest integration without pulling in a dependency. You can of course still use pytest in local development.
|
||||
import argparse
|
||||
import inspect
|
||||
import sys
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
subparsers = parser.add_subparsers(dest="command")
|
||||
|
||||
list_parser = subparsers.add_parser("list")
|
||||
test_parser = subparsers.add_parser("test")
|
||||
test_parser.add_argument("test")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.command == "list":
|
||||
sys.stdout.write(
|
||||
";".join(
|
||||
name[5:]
|
||||
for name in dir()
|
||||
if name.startswith("test_")
|
||||
and inspect.isfunction(getattr(sys.modules[__name__], name))
|
||||
)
|
||||
)
|
||||
elif args.command == "test":
|
||||
globals()["test_" + args.test]()
|
||||
|
Reference in New Issue
Block a user