From 64fd53cea864a26c9cd4b34646a787c1049587e6 Mon Sep 17 00:00:00 2001 From: Douglas Rumbaugh Date: Tue, 9 May 2023 14:37:32 -0400 Subject: MutableBuffer tests and bugfixes --- tests/testing.h | 153 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 tests/testing.h (limited to 'tests/testing.h') diff --git a/tests/testing.h b/tests/testing.h new file mode 100644 index 0000000..234deef --- /dev/null +++ b/tests/testing.h @@ -0,0 +1,153 @@ +/* + * + * + */ + +#pragma once + +#include + +#include +#include + +#include "util/types.h" +#include "util/base.h" +#include "framework/MutableBuffer.h" +#include "framework/InternalLevel.h" + +typedef de::Record WeightedRec; +typedef de::MutableBuffer WeightedMBuffer; +typedef de::InternalLevel WeightedLevel; + +typedef de::Record UnweightedRec; +typedef de::MutableBuffer UnweightedMBuffer; +typedef de::InternalLevel UnweightedLevel; + +static gsl_rng *g_rng = gsl_rng_alloc(gsl_rng_mt19937); + +static bool initialize_test_file(std::string fname, size_t page_cnt) +{ + auto flags = O_RDWR | O_CREAT | O_TRUNC; + mode_t mode = 0640; + char *page = nullptr; + + int fd = open(fname.c_str(), flags, mode); + if (fd == -1) { + goto error; + } + + page = (char *) aligned_alloc(de::SECTOR_SIZE, de::PAGE_SIZE); + if (!page) { + goto error_opened; + } + + for (size_t i=0; i<=page_cnt; i++) { + *((int *) page) = i; + if (write(fd, page, de::PAGE_SIZE) == -1) { + goto error_alloced; + } + } + + free(page); + + return 1; + +error_alloced: + free(page); + +error_opened: + close(fd); + +error: + return 0; +} + +static bool roughly_equal(int n1, int n2, size_t mag, double epsilon) { + return ((double) std::abs(n1 - n2) / (double) mag) < epsilon; +} + +static WeightedMBuffer *create_test_mbuffer(size_t cnt) +{ + auto buffer = new WeightedMBuffer(cnt, true, cnt, g_rng); + + for (size_t i = 0; i < cnt; i++) { + uint64_t key = rand(); + uint32_t val = rand(); + + buffer->append(key, val); + } + + return buffer; +} + +static WeightedMBuffer *create_test_mbuffer_tombstones(size_t cnt, size_t ts_cnt) +{ + auto buffer = new WeightedMBuffer(cnt, true, ts_cnt, g_rng); + + std::vector> tombstones; + + for (size_t i = 0; i < cnt; i++) { + uint64_t key = rand(); + uint32_t val = rand(); + + if (i < ts_cnt) { + tombstones.push_back({key, val}); + } + + buffer->append(key, val); + } + + for (size_t i=0; iappend(tombstones[i].first, tombstones[i].second, 1.0, true); + } + + return buffer; +} + +static WeightedMBuffer *create_weighted_mbuffer(size_t cnt) +{ + auto buffer = new WeightedMBuffer(cnt, true, cnt, g_rng); + + // Put in half of the count with weight one. + uint64_t key = 1; + for (size_t i=0; i< cnt / 2; i++) { + buffer->append(key, i, 2); + } + + // put in a quarter of the count with weight two. + key = 2; + for (size_t i=0; i< cnt / 4; i++) { + buffer->append(key, i, 4); + } + + // the remaining quarter with weight four. + key = 3; + for (size_t i=0; i< cnt / 4; i++) { + buffer->append(key, i, 8); + } + + return buffer; +} + +static WeightedMBuffer *create_double_seq_mbuffer(size_t cnt, bool ts=false) +{ + auto buffer = new WeightedMBuffer(cnt, true, cnt, g_rng); + + for (size_t i = 0; i < cnt / 2; i++) { + uint64_t key = i; + uint32_t val = i; + + buffer->append(key, val, 1.0, ts); + } + + for (size_t i = 0; i < cnt / 2; i++) { + uint64_t key = i; + uint32_t val = i + 1; + + buffer->append(key, val, 1.0, ts); + } + + return buffer; +} + + -- cgit v1.2.3