use logvec::LogVec;
use std::hint::black_box;
#[derive(Clone, Eq, PartialEq, Ord, PartialOrd)]
pub struct LargeKey {
key: u64,
_padding: [u64; 8],
}
impl LargeKey {
fn new(key: u64) -> Self {
Self {
key,
_padding: [0; 8],
}
}
}
#[inline(never)]
pub fn insert_u64_seq(n: u64) -> LogVec<u64> {
let mut arr = LogVec::new();
for i in 0..n {
arr.insert(black_box(i));
}
arr
}
#[inline(never)]
pub fn insert_u128_seq(n: u64) -> LogVec<u128> {
let mut arr = LogVec::new();
for i in 0..n {
arr.insert(black_box(i as u128));
}
arr
}
#[inline(never)]
pub fn insert_large_seq(n: u64) -> LogVec<LargeKey> {
let mut arr = LogVec::new();
for i in 0..n {
arr.insert(black_box(LargeKey::new(i)));
}
arr
}
#[inline(never)]
pub fn contains_u64(arr: &LogVec<u64>, q: u64) -> bool {
black_box(arr.contains(black_box(&q)))
}
#[inline(never)]
pub fn contains_u128(arr: &LogVec<u128>, q: u128) -> bool {
black_box(arr.contains(black_box(&q)))
}
fn main() {
let arr_u64 = insert_u64_seq(black_box(1024));
let _ = black_box(contains_u64(&arr_u64, black_box(777)));
let arr_u128 = insert_u128_seq(black_box(1024));
let _ = black_box(contains_u128(&arr_u128, black_box(777)));
let _ = black_box(insert_large_seq(black_box(256)));
}