From 95aa9599aa68da4cf1a92a65aae180c4278e278c Mon Sep 17 00:00:00 2001 From: wangboo <5417808+wangboa@user.noreply.gitee.com> Date: Mon, 3 Apr 2023 20:32:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20box=20syntax=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/db/log_wr_test.rs | 4 +- src/db/skip_list.rs | 12 +-- src/db/skip_list_test.rs | 217 +++++++++++++++++++-------------------- src/lib.rs | 2 - 4 files changed, 116 insertions(+), 119 deletions(-) diff --git a/src/db/log_wr_test.rs b/src/db/log_wr_test.rs index a5ad510..001b1e7 100644 --- a/src/db/log_wr_test.rs +++ b/src/db/log_wr_test.rs @@ -11,7 +11,7 @@ mod test { #[test] fn write() -> Result<()> { - let file = box File::create("../../1.bin")?; + let file = Box::new(File::create("../../1.bin")?); let mut writer = LogWriter::new(file); let sample: Vec = ('0'..='9').map(|a|a as u8).collect(); for i in 0..100 { @@ -23,7 +23,7 @@ mod test { #[test] fn read() -> Result<()> { - let file = box File::open("../../1.bin")?; + let file = Box::new(File::open("../../1.bin")?); let mut reader = LogReader::new(file, true, 0); let sample: Vec = ('0'..='9').map(|a|a as u8).collect(); for i in 0..100 { diff --git a/src/db/skip_list.rs b/src/db/skip_list.rs index 4d13c12..a7eab7c 100644 --- a/src/db/skip_list.rs +++ b/src/db/skip_list.rs @@ -286,31 +286,31 @@ impl ToString for SkipList { impl Node { #[inline] fn create(src: UnsafeSlice, level: usize, arena: ArenaRef) -> RawNode { - let node = box Self { + let node = Box::new(Self { key: Some(src), next_elems: allocate_next_elems(arena), level, - }; + }); Box::into_raw(node) } #[inline] fn create_head(arena: ArenaRef) -> RawNode { - let node = box Self { + let node = Box::new(Self { key: None, next_elems: allocate_next_elems(arena), level: MAX_LEVEL, - }; + }); Box::into_raw(node) } #[inline] fn create_tail() -> RawNode { - let node = box Self { + let node = Box::new(Self { key: None, next_elems: null_mut(), level: 0, - }; + }); Box::into_raw(node) } diff --git a/src/db/skip_list_test.rs b/src/db/skip_list_test.rs index 11b4573..721adb1 100644 --- a/src/db/skip_list_test.rs +++ b/src/db/skip_list_test.rs @@ -1,109 +1,108 @@ -mod test { - use std::collections::HashSet; - use std::env::args; - use std::ffi::{c_char, c_void}; - use std::ptr::{null, null_mut}; - use std::sync::{Arc, Mutex}; - - use criterion::{Criterion, criterion_group, criterion_main}; - use rand::Rng; - use skiplist::OrderedSkipList; - - use crate::db::DefaultSkipList; - use crate::db::skip_list::SkipList; - use crate::debug; - use crate::util::Arena; - use crate::util::arena::ArenaRef; - use crate::util::comparator::BytewiseComparatorImpl; - use crate::util::mem_debug::mem_print; - use crate::util::Result; - use crate::util::slice::Slice; - use crate::util::unsafe_slice::TryIntoUnsafeSlice; - - #[test] - fn test_add() -> Result<()> { - let cmp = Arc::new(BytewiseComparatorImpl::default()); - let arena = Arc::new(Mutex::new(Arena::default())); - let mut list = DefaultSkipList::create(cmp, arena.clone()); - let len = 10; - for i in 0..len { - list.insert(format!("key_{}", i).try_into_unsafe_slice(arena.clone())?).expect("insert ok"); - } - assert_eq!(10, list.len(), "expect 10, but actually is: {}", list.len()); - debug!("{}", list.to_string()); - for i in 0..len { - let key: Slice = format!("key_{}", i).into(); - debug!("contains key: {}", key); - assert!(list.contains(&key), "contains key: {}", key); - } - list.iter().for_each(|slice| { - debug!("slice: {}", slice.as_str()) - }); - Ok(()) - } - - #[test] - fn test_rnd_add() -> Result<()> { - let cmp = Arc::new(BytewiseComparatorImpl::default()); - let arena = Arc::new(Mutex::new(Arena::default())); - let mut list = DefaultSkipList::create(cmp, arena.clone()); - let len = 10; - let mut rnd = rand::thread_rng(); - let mut set = HashSet::new(); - for _i in 0..10 { - let j = rnd.gen_range(0..len); - let key = format!("key_{}", j); - set.insert(key.clone()); - list.insert(key.try_into_unsafe_slice(arena.clone())?)?; - debug!("skiplist: {}", list.to_string()); - } - assert_eq!(set.len(), list.len(), "list length must eq: {}", list.len()); - set.iter().for_each(|key| { - let c = list.contains(&key); - assert!(c, "must contains key: {}", key) - }); - - Ok(()) - } - - - fn default_skiplist(mut list: SkipList, arena: ArenaRef, record_count: usize) { - for j in 0..record_count { - let value = format!("key_{}", j); - list.insert(value.try_into_unsafe_slice(arena.clone()).unwrap()).unwrap(); - } - println!("bench_default_skiplist: "); - mem_print(); - } - - fn bench_skiplist_v_0_4_0(mut list: OrderedSkipList, record_count: usize) { - for j in 0..record_count { - let value = format!("key_{}", j); - list.insert(value.clone()); - } - println!("bench_skiplist_v_0_4_0: "); - mem_print(); - } - - #[test] - fn bench_default_skiplist() { - let record_count = 100 * 1024; - println!("bench default skiplist"); - let cmp = Arc::new(BytewiseComparatorImpl::default()); - let arena = Arc::new(Mutex::new(Arena::default())); - let list = SkipList::create(cmp, arena.clone()); - default_skiplist(list, arena, record_count); - } - - #[test] - fn bench_crate_skiplist() { - let record_count = 100 * 1024; - println!("bench crate skiplist"); - let list: OrderedSkipList = unsafe { - OrderedSkipList::with_comp(|a: &String, b: &String| { - a.cmp(b) - }) - }; - bench_skiplist_v_0_4_0(list, record_count); - } -} \ No newline at end of file +// mod test { +// use std::collections::HashSet; +// use std::env::args; +// use std::ffi::{c_char, c_void}; +// use std::ptr::{null, null_mut}; +// use std::sync::{Arc, Mutex}; +// +// use rand::Rng; +// use skiplist::OrderedSkipList; +// +// use crate::db::DefaultSkipList; +// use crate::db::skip_list::SkipList; +// use crate::debug; +// use crate::util::Arena; +// use crate::util::arena::ArenaRef; +// use crate::util::comparator::BytewiseComparatorImpl; +// use crate::util::mem_debug::mem_print; +// use crate::util::Result; +// use crate::util::slice::Slice; +// use crate::util::unsafe_slice::TryIntoUnsafeSlice; +// +// #[test] +// fn test_add() -> Result<()> { +// let cmp = Arc::new(BytewiseComparatorImpl::default()); +// let arena = Arc::new(Mutex::new(Arena::default())); +// let mut list = DefaultSkipList::create(cmp, arena.clone()); +// let len = 10; +// for i in 0..len { +// list.insert(format!("key_{}", i).try_into_unsafe_slice(arena.clone())?).expect("insert ok"); +// } +// assert_eq!(10, list.len(), "expect 10, but actually is: {}", list.len()); +// debug!("{}", list.to_string()); +// for i in 0..len { +// let key: Slice = format!("key_{}", i).into(); +// debug!("contains key: {}", key); +// assert!(list.contains(&key), "contains key: {}", key); +// } +// list.iter().for_each(|slice| { +// debug!("slice: {}", slice.as_str()) +// }); +// Ok(()) +// } +// +// #[test] +// fn test_rnd_add() -> Result<()> { +// let cmp = Arc::new(BytewiseComparatorImpl::default()); +// let arena = Arc::new(Mutex::new(Arena::default())); +// let mut list = DefaultSkipList::create(cmp, arena.clone()); +// let len = 10; +// let mut rnd = rand::thread_rng(); +// let mut set = HashSet::new(); +// for _i in 0..10 { +// let j = rnd.gen_range(0..len); +// let key = format!("key_{}", j); +// set.insert(key.clone()); +// list.insert(key.try_into_unsafe_slice(arena.clone())?)?; +// debug!("skiplist: {}", list.to_string()); +// } +// assert_eq!(set.len(), list.len(), "list length must eq: {}", list.len()); +// set.iter().for_each(|key| { +// let c = list.contains(&key); +// assert!(c, "must contains key: {}", key) +// }); +// +// Ok(()) +// } +// +// +// fn default_skiplist(mut list: SkipList, arena: ArenaRef, record_count: usize) { +// for j in 0..record_count { +// let value = format!("key_{}", j); +// list.insert(value.try_into_unsafe_slice(arena.clone()).unwrap()).unwrap(); +// } +// println!("bench_default_skiplist: "); +// mem_print(); +// } +// +// fn bench_skiplist_v_0_4_0(mut list: OrderedSkipList, record_count: usize) { +// for j in 0..record_count { +// let value = format!("key_{}", j); +// list.insert(value.clone()); +// } +// println!("bench_skiplist_v_0_4_0: "); +// mem_print(); +// } +// +// #[test] +// fn bench_default_skiplist() { +// let record_count = 100 * 1024; +// println!("bench default skiplist"); +// let cmp = Arc::new(BytewiseComparatorImpl::default()); +// let arena = Arc::new(Mutex::new(Arena::default())); +// let list = SkipList::create(cmp, arena.clone()); +// default_skiplist(list, arena, record_count); +// } +// +// #[test] +// fn bench_crate_skiplist() { +// let record_count = 100 * 1024; +// println!("bench crate skiplist"); +// let list: OrderedSkipList = unsafe { +// OrderedSkipList::with_comp(|a: &String, b: &String| { +// a.cmp(b) +// }) +// }; +// bench_skiplist_v_0_4_0(list, record_count); +// } +// } \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 3b67f8e..c0dce00 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,3 @@ -#![feature(box_syntax)] - extern crate core; pub mod db; -- Gitee