#![cfg(feature = "raw-ptr")]
mod util;
use rust_rocksdb::{AsRawPtr, DB, Env, Options};
use util::DBPath;
#[test]
fn test_db_as_raw_ptr() {
let path = DBPath::new("_rust_rocksdb_raw_ptr_db_test");
let db = DB::open_default(&path).unwrap();
let raw_ptr = unsafe { db.as_raw_ptr() };
assert!(!raw_ptr.is_null());
}
#[test]
fn test_options_as_raw_ptr() {
let opts = Options::default();
let raw_ptr = unsafe { opts.as_raw_ptr() };
assert!(!raw_ptr.is_null());
}
#[test]
fn test_env_as_raw_ptr() {
let env = Env::new().unwrap();
let raw_ptr = unsafe { env.as_raw_ptr() };
assert!(!raw_ptr.is_null());
}
#[test]
fn test_raw_ptr_stability() {
let path = DBPath::new("_rust_rocksdb_raw_ptr_stability_test");
let db = DB::open_default(&path).unwrap();
let ptr1 = unsafe { db.as_raw_ptr() };
let ptr2 = unsafe { db.as_raw_ptr() };
assert_eq!(ptr1, ptr2);
}
#[test]
fn test_options_raw_ptr_stability() {
let opts = Options::default();
let ptr1 = unsafe { opts.as_raw_ptr() };
let ptr2 = unsafe { opts.as_raw_ptr() };
assert_eq!(ptr1, ptr2);
}
#[test]
fn test_env_raw_ptr_stability() {
let env = Env::new().unwrap();
let ptr1 = unsafe { env.as_raw_ptr() };
let ptr2 = unsafe { env.as_raw_ptr() };
assert_eq!(ptr1, ptr2);
}
#[test]
fn test_raw_ptr_with_db_operations() {
let path = DBPath::new("_rust_rocksdb_raw_ptr_operations_test");
let db = DB::open_default(&path).unwrap();
let initial_ptr = unsafe { db.as_raw_ptr() };
db.put(b"key1", b"value1").unwrap();
db.put(b"key2", b"value2").unwrap();
db.get(b"key1").unwrap();
db.delete(b"key1").unwrap();
let after_ops_ptr = unsafe { db.as_raw_ptr() };
assert_eq!(initial_ptr, after_ops_ptr);
assert!(!after_ops_ptr.is_null());
}
#[test]
fn test_raw_ptr_with_configured_options() {
let mut opts = Options::default();
opts.create_if_missing(true);
opts.set_max_open_files(100);
opts.set_use_fsync(false);
opts.set_bytes_per_sync(8 * 1024 * 1024);
let raw_ptr = unsafe { opts.as_raw_ptr() };
assert!(!raw_ptr.is_null());
opts.set_max_background_jobs(4);
let raw_ptr_after = unsafe { opts.as_raw_ptr() };
assert_eq!(raw_ptr, raw_ptr_after);
}
#[test]
fn test_raw_ptr_with_configured_env() {
let mut env = Env::new().unwrap();
env.set_bottom_priority_background_threads(2);
env.set_low_priority_background_threads(4);
env.set_high_priority_background_threads(2);
let raw_ptr = unsafe { env.as_raw_ptr() };
assert!(!raw_ptr.is_null());
}
#[test]
fn test_multiple_dbs_have_different_raw_ptrs() {
let path1 = DBPath::new("_rust_rocksdb_raw_ptr_multi_db_1");
let path2 = DBPath::new("_rust_rocksdb_raw_ptr_multi_db_2");
let db1 = DB::open_default(&path1).unwrap();
let db2 = DB::open_default(&path2).unwrap();
let ptr1 = unsafe { db1.as_raw_ptr() };
let ptr2 = unsafe { db2.as_raw_ptr() };
assert_ne!(ptr1, ptr2);
assert!(!ptr1.is_null());
assert!(!ptr2.is_null());
}
#[test]
fn test_multiple_options_have_different_raw_ptrs() {
let opts1 = Options::default();
let opts2 = Options::default();
let ptr1 = unsafe { opts1.as_raw_ptr() };
let ptr2 = unsafe { opts2.as_raw_ptr() };
assert_ne!(ptr1, ptr2);
assert!(!ptr1.is_null());
assert!(!ptr2.is_null());
}
#[test]
fn test_multiple_envs_have_different_raw_ptrs() {
let env1 = Env::new().unwrap();
let env2 = Env::new().unwrap();
let ptr1 = unsafe { env1.as_raw_ptr() };
let ptr2 = unsafe { env2.as_raw_ptr() };
assert_ne!(ptr1, ptr2);
assert!(!ptr1.is_null());
assert!(!ptr2.is_null());
}