added header enum field

This commit is contained in:
bronku 2025-12-14 00:05:45 +01:00
parent c7c938dd67
commit 5bb846a53e
3 changed files with 21 additions and 6 deletions

View file

@ -41,6 +41,9 @@ where
} }
return None; return None;
} }
Node::Header(_) => {
panic!("What happened?")
}
} }
} }
} }
@ -190,11 +193,13 @@ where
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::file_storage::FileStorage;
use super::*; use super::*;
use crate::storage::InMemoryStorage;
use proptest::prelude::*; use proptest::prelude::*;
use proptest::proptest; use proptest::proptest;
use tempfile::NamedTempFile;
use std::collections::BTreeMap; use std::collections::BTreeMap;
@ -224,6 +229,11 @@ mod tests {
prop::collection::vec(arb_op(), 1..500) prop::collection::vec(arb_op(), 1..500)
} }
fn temp_storage() -> FileStorage {
let file = NamedTempFile::new().unwrap();
FileStorage::new(file.path().to_str().unwrap())
}
proptest! { proptest! {
#![proptest_config(ProptestConfig { #![proptest_config(ProptestConfig {
cases: 200, cases: 200,
@ -232,7 +242,7 @@ mod tests {
#[test] #[test]
fn prop_bplustree_matches_btreemap(ops in arb_ops()) { fn prop_bplustree_matches_btreemap(ops in arb_ops()) {
let storage = InMemoryStorage::new(); let storage = temp_storage();
let mut tree = BPlusTree::open(storage); let mut tree = BPlusTree::open(storage);
let mut model = BTreeMap::<i32, Record>::new(); let mut model = BTreeMap::<i32, Record>::new();
@ -258,7 +268,7 @@ mod tests {
proptest! { proptest! {
#[test] #[test]
fn prop_all_inserted_keys_are_findable(records in prop::collection::vec(arb_record(), 0..1000)) { fn prop_all_inserted_keys_are_findable(records in prop::collection::vec(arb_record(), 0..1000)) {
let storage = InMemoryStorage::new(); let storage = temp_storage();
let mut tree = BPlusTree::open(storage); let mut tree = BPlusTree::open(storage);
let mut model = BTreeMap::<i32, Record>::new(); let mut model = BTreeMap::<i32, Record>::new();
@ -275,7 +285,7 @@ mod tests {
#[test] #[test]
fn sanity_single_insert() { fn sanity_single_insert() {
let storage = InMemoryStorage::new(); let storage = temp_storage();
let mut tree = BPlusTree::open(storage); let mut tree = BPlusTree::open(storage);
let rec = [42, 1, 2, 3, 4, 5, 6]; let rec = [42, 1, 2, 3, 4, 5, 6];
@ -287,7 +297,7 @@ mod tests {
#[test] #[test]
fn sanity_update_overwrites_value() { fn sanity_update_overwrites_value() {
let storage = InMemoryStorage::new(); let storage = temp_storage();
let mut tree = BPlusTree::open(storage); let mut tree = BPlusTree::open(storage);
let r1 = [1, 1, 1, 1, 1, 1, 1]; let r1 = [1, 1, 1, 1, 1, 1, 1];

View file

@ -69,7 +69,6 @@ impl FileStorage {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::{ use crate::{
config::MAX_KEYS, config::MAX_KEYS,

View file

@ -7,6 +7,12 @@ use crate::record::Record;
pub enum Node { pub enum Node {
Leaf(LeafNode), Leaf(LeafNode),
Internal(InternalNode), Internal(InternalNode),
Header(HeaderNode),
}
#[derive(Debug, Clone, Encode, Decode, PartialEq, Eq)]
pub struct HeaderNode {
pub root: i32,
} }
#[derive(Debug, Clone, Encode, Decode, PartialEq, Eq)] #[derive(Debug, Clone, Encode, Decode, PartialEq, Eq)]