use super::LeafNode15;
use crate::leaf15::{MODSTATE_DELETED_LAYER, MODSTATE_EMPTY, MODSTATE_INSERT, MODSTATE_REMOVE};
use crate::policy::BoxPolicy;
#[test]
fn test_prefetch_adaptive() {
let leaf: Box<LeafNode15<BoxPolicy<u64>>> = LeafNode15::new_boxed();
leaf.prefetch_for_search_adaptive(0);
leaf.prefetch_for_search_adaptive(4);
leaf.prefetch_for_search_adaptive(8);
leaf.prefetch_for_search_adaptive(12);
leaf.prefetch_for_search_adaptive(15);
}
#[test]
fn test_prefetch_for_search() {
let leaf: Box<LeafNode15<BoxPolicy<u64>>> = LeafNode15::new_boxed();
leaf.prefetch_for_search();
}
#[test]
fn test_prefetch_adaptive_empty_node() {
let leaf: Box<LeafNode15<BoxPolicy<u64>>> = LeafNode15::new_boxed();
assert_eq!(leaf.size(), 0);
leaf.prefetch_for_search_adaptive(0);
}
#[test]
fn test_prefetch_adaptive_small_node() {
let leaf: Box<LeafNode15<BoxPolicy<u64>>> = LeafNode15::new_boxed();
leaf.prefetch_for_search_adaptive(1);
leaf.prefetch_for_search_adaptive(7);
leaf.prefetch_for_search_adaptive(8);
}
#[test]
fn test_prefetch_adaptive_large_node() {
let leaf: Box<LeafNode15<BoxPolicy<u64>>> = LeafNode15::new_boxed();
leaf.prefetch_for_search_adaptive(9);
leaf.prefetch_for_search_adaptive(14);
leaf.prefetch_for_search_adaptive(15);
}
type TestLeaf = LeafNode15<BoxPolicy<u64>>;
#[test]
fn test_modstate_queued_bit_lifecycle() {
let leaf: Box<TestLeaf> = LeafNode15::new_boxed();
assert!(!leaf.is_queued());
assert!(!leaf.is_empty_state());
assert!(!leaf.is_removing());
assert!(!leaf.deleted_layer());
assert!(leaf.try_mark_queued());
assert!(leaf.is_queued());
assert!(!leaf.try_mark_queued());
assert!(leaf.is_queued());
assert!(!leaf.is_empty_state());
assert!(!leaf.is_removing());
assert!(!leaf.deleted_layer());
}
#[test]
fn test_modstate_transitions_preserve_queued_bit() {
let leaf: Box<TestLeaf> = LeafNode15::new_boxed();
assert!(leaf.try_mark_queued());
leaf.mark_remove();
assert!(leaf.is_removing());
assert!(leaf.is_queued());
leaf.mark_empty();
assert!(leaf.is_empty_state());
assert!(leaf.is_queued());
assert!(!leaf.is_removing());
leaf.mark_deleted_layer();
assert!(leaf.deleted_layer());
assert!(leaf.is_queued());
assert!(!leaf.is_empty_state());
}
#[test]
fn test_modstate_clear_empty_clears_queued() {
let leaf: Box<TestLeaf> = LeafNode15::new_boxed();
leaf.mark_empty();
assert!(leaf.try_mark_queued());
assert!(leaf.is_queued());
assert!(leaf.is_empty_state());
leaf.clear_empty_state();
assert!(!leaf.is_queued());
assert!(!leaf.is_empty_state());
}
#[test]
fn test_modstate_clear_queued_preserves_value() {
let leaf: Box<TestLeaf> = LeafNode15::new_boxed();
leaf.mark_empty();
assert!(leaf.try_mark_queued());
assert!(leaf.is_empty_state());
assert!(leaf.is_queued());
leaf.clear_queued();
assert!(!leaf.is_queued());
assert!(leaf.is_empty_state());
}
#[test]
fn test_modstate_value_constants() {
assert_eq!(MODSTATE_INSERT & 0x04, 0);
assert_eq!(MODSTATE_REMOVE & 0x04, 0);
assert_eq!(MODSTATE_DELETED_LAYER & 0x04, 0);
assert_eq!(MODSTATE_EMPTY & 0x04, 0);
const { assert!(MODSTATE_INSERT < 4) };
const { assert!(MODSTATE_REMOVE < 4) };
const { assert!(MODSTATE_DELETED_LAYER < 4) };
const { assert!(MODSTATE_EMPTY < 4) };
}