#![cfg(feature = "db-int-key")]
#![allow(clippy::many_single_char_names)]
use std::fs;
use serde_derive::Serialize;
use tempfile::Builder;
use rkv::{backend::SafeMode, PrimitiveInt, Rkv, StoreOptions, Value};
#[test]
fn test_integer_keys() {
let root = Builder::new()
.prefix("test_integer_keys")
.tempdir()
.expect("tempdir");
fs::create_dir_all(root.path()).expect("dir created");
let k = Rkv::new::<SafeMode>(root.path()).expect("new succeeded");
let s = k.open_integer("s", StoreOptions::create()).expect("open");
macro_rules! test_integer_keys {
($store:expr, $key:expr) => {{
let mut writer = k.write().expect("writer");
$store
.put(&mut writer, $key, &Value::Str("hello!"))
.expect("write");
assert_eq!(
$store.get(&writer, $key).expect("read"),
Some(Value::Str("hello!"))
);
writer.commit().expect("committed");
let reader = k.read().expect("reader");
assert_eq!(
$store.get(&reader, $key).expect("read"),
Some(Value::Str("hello!"))
);
}};
}
test_integer_keys!(s, std::u32::MIN);
test_integer_keys!(s, std::u32::MAX);
let t = k.open_integer("s", StoreOptions::create()).expect("open");
#[derive(Serialize)]
struct I32(i32);
impl PrimitiveInt for I32 {}
test_integer_keys!(t, I32(std::i32::MIN));
test_integer_keys!(t, I32(std::i32::MAX));
let u = k.open_integer("s", StoreOptions::create()).expect("open");
#[derive(Serialize)]
struct U16(u16);
impl PrimitiveInt for U16 {}
test_integer_keys!(u, U16(std::u16::MIN));
test_integer_keys!(u, U16(std::u16::MAX));
let v = k.open_integer("s", StoreOptions::create()).expect("open");
#[derive(Serialize)]
struct U64(u64);
impl PrimitiveInt for U64 {}
test_integer_keys!(v, U64(std::u64::MIN));
test_integer_keys!(v, U64(std::u64::MAX));
}