9#include <gtest/gtest.h>
26 namespace fs = std::filesystem;
30 static std::atomic<unsigned long long>
counter{0};
33 static std::mt19937_64
rng{[] {
34 std::random_device rd;
36 static_cast<unsigned long long>
37 (std::chrono::steady_clock::now().time_since_epoch().count());
39 (
static_cast<unsigned long long>(rd()) << 1u)};
42 const auto now = std::chrono::steady_clock::now().time_since_epoch().count();
43 std::uniform_int_distribution<unsigned long long> dist;
46 const auto id = std::to_string(
now) +
"_" +
50 const fs::path dir = fs::temp_directory_path() /
"aleph_file_bmap_tests";
51 fs::create_directories(dir);
52 return dir / (
id +
".idx");
59 explicit TempFile(fs::path p) : path(
std::move(p)) {}
65 fs::remove(path.string() +
".wal",
ec);
66 fs::remove(path.string() +
".wal.tmp",
ec);
67 fs::remove(path.string() +
".journal",
ec);
68 fs::remove(path.string() +
".journal.tmp",
ec);
69 fs::remove(path.string() +
".lock",
ec);
78 for (
size_t i = 0; i < arr.
size(); ++i)
79 out.push_back(arr[i]);
108 (std::vector<std::pair<int, long>>{{10, 150}, {20, 200}}));
122 EXPECT_EQ(map.max_item(), (std::optional<std::pair<int, int>>{{50, 500}}));
123 EXPECT_EQ(map.lower_bound(35), (std::optional<std::pair<int, int>>{{40, 400}}));
124 EXPECT_EQ(map.upper_bound(40), (std::optional<std::pair<int, int>>{{50, 500}}));
131 (std::vector<std::pair<int, int>>{{10, 100}, {40, 400}, {50, 500}}));
143 key_codec, value_codec> map(
tmp.path.string(),
false);
150 (std::optional<std::pair<std::string, std::string>>{
151 {
"banana",
"ripe yellow"}}));
163 (std::vector<std::pair<std::string, std::string>>{
165 {
"banana",
"ripe yellow"},
166 {
"kiwi",
"brown fuzz"}}));
Simple dynamic array with automatic resizing and functional operations.
constexpr size_t size() const noexcept
Return the number of elements stored in the stack.
Persistent ordered map backed by a paged File_B_Tree.
Value at(const Key &key) const
Return the mapped value associated with a key.
bool verify() const
Verify the structural invariants of the backing tree.
std::optional< value_type > lower_bound(const Key &key) const
Return the first key/value pair whose key is not less than key.
std::optional< Value > find(const Key &key) const
Return the mapped value associated with a key, if any.
void sync() const
Flush pending changes to the backing file.
bool insert(const Key &key, const Value &value)
Insert a new key/value pair if the key is not present.
std::optional< value_type > min_item() const
Return the smallest stored key/value pair.
bool insert_or_assign(const Key &key, const Value &value)
Insert or overwrite a key/value pair.
Main namespace for Aleph-w library functions.
Divide_Conquer_DP_Result< Cost > divide_and_conquer_partition_dp(const size_t groups, const size_t n, Transition_Cost_Fn transition_cost, const Cost inf=dp_optimization_detail::default_inf< Cost >())
Optimize partition DP using divide-and-conquer optimization.
std::vector< typename C::Item_Type > to_vector(const C &c)
Convert a container to a std::vector.
Persistent key/value map built on top of Aleph::File_B_Tree.