/* * tests/testing.h * * Unit test utility functions/definitions * * Copyright (C) 2023 Douglas Rumbaugh * Dong Xie * * All rights reserved. Published under the Modified BSD License. * */ #pragma once #include #include #include #include "util/types.h" #include "util/base.h" #include "framework/MutableBuffer.h" #include "framework/RecordInterface.h" typedef de::WeightedRecord WRec; typedef de::Record Rec; typedef de::EuclidPoint PRec; template std::vector strip_wrapping(std::vector> vec) { std::vector out(vec.size()); for (size_t i=0; i *create_2d_mbuffer(size_t cnt) { auto buffer = new de::MutableBuffer(cnt, cnt); for (int64_t i=0; iappend({rand(), rand()}); } return buffer; } static de::MutableBuffer *create_2d_sequential_mbuffer(size_t cnt) { auto buffer = new de::MutableBuffer(cnt, cnt); for (int64_t i=0; iappend({i, i}); } return buffer; } template static de::MutableBuffer *create_test_mbuffer(size_t cnt) { auto buffer = new de::MutableBuffer(cnt, cnt); R rec; for (size_t i = 0; i < cnt; i++) { rec.key = rand(); rec.value = rand(); if constexpr (de::WeightedRecordInterface) { rec.weight = 1; } buffer->append(rec); } return buffer; } template static de::MutableBuffer *create_sequential_mbuffer(decltype(R::key) start, decltype(R::key) stop) { size_t cnt = stop - start; auto buffer = new de::MutableBuffer(cnt, cnt); for (size_t i=start; i) { rec.weight = 1; } buffer->append(rec); } return buffer; } template static de::MutableBuffer *create_test_mbuffer_tombstones(size_t cnt, size_t ts_cnt) { auto buffer = new de::MutableBuffer(cnt, ts_cnt); std::vector> tombstones; R rec; for (size_t i = 0; i < cnt; i++) { rec.key = rand(); rec.value = rand(); if constexpr (de::WeightedRecordInterface) { rec.weight = 1; } if (i < ts_cnt) { tombstones.push_back({rec.key, rec.value}); } buffer->append(rec); } rec.set_tombstone(); for (size_t i=0; iappend(rec); } return buffer; } template requires de::WeightedRecordInterface && de::KVPInterface static de::MutableBuffer *create_weighted_mbuffer(size_t cnt) { auto buffer = new de::MutableBuffer(cnt, cnt); // Put in half of the count with weight one. for (uint32_t i=0; i< cnt / 2; i++) { buffer->append(R {1, i, 2}); } // put in a quarter of the count with weight four. for (uint32_t i=0; i< cnt / 4; i++) { buffer->append(R {2, i, 4}); } // the remaining quarter with weight eight. for (uint32_t i=0; i< cnt / 4; i++) { buffer->append(R {3, i, 8}); } return buffer; } template static de::MutableBuffer *create_double_seq_mbuffer(size_t cnt, bool ts=false) { auto buffer = new de::MutableBuffer(cnt, cnt); for (size_t i = 0; i < cnt / 2; i++) { R rec; rec.key = i; rec.value = i; buffer->append(rec, ts); } for (size_t i = 0; i < cnt / 2; i++) { R rec; rec.key = i; rec.value = i + 1; buffer->append(rec, ts); } return buffer; }