diff --git a/Cargo.toml b/Cargo.toml index fe04cd9..49a7ea0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,10 +1,10 @@ [package] name = "tst" -version = "0.11.0" +version = "0.12.0" authors = ["Alexey Pervushin "] -edition = "2021" +edition = "2024" readme = "README.md" license = "MIT" description = "Ternary search trie collection in rust with similar API to std::collections as it possible" @@ -20,3 +20,8 @@ libc = "0.2.*" rand = "0.6.*" jemallocator = "0.1.*" jemalloc-sys = "0.1.*" +criterion = "0.6" + +[[bench]] +name = "bench" +harness = false diff --git a/benches/bench.rs b/benches/bench.rs index d17b0fe..9bc99e9 100644 --- a/benches/bench.rs +++ b/benches/bench.rs @@ -1,10 +1,5 @@ -#![cfg(test)] -#![feature(test)] -extern crate test; - -extern crate tst; -use self::tst::TSTMap; -use self::test::Bencher; +use criterion::{criterion_group, criterion_main, Criterion}; +use tst::TSTMap; use std::str; fn prepare() -> TSTMap { @@ -24,49 +19,76 @@ fn prepare() -> TSTMap { m } -#[bench] -fn insert_same(b: &mut Bencher) { - let mut m = prepare(); - - let mut k = 100; - b.iter(|| { - m.insert("abcabcabca", k); - k += 1; +fn insert_same(c: &mut Criterion) { + c.bench_function("insert_same", |b| { + b.iter_with_setup( + || { + let m = prepare(); + let k = 100; + (m, k) + }, + |(mut m, mut k)| { + m.insert("abcabcabca", k); + k += 1; + std::hint::black_box((m, k)) + } + ); }); } -#[bench] -fn get_same(b: &mut Bencher) { - let m = prepare(); - - b.iter(|| { - m.get("abcabcabca"); +fn get_same(c: &mut Criterion) { + c.bench_function("get_same", |b| { + b.iter_with_setup( + || prepare(), + |m| { + std::hint::black_box(m.get("abcabcabca")); + } + ); }); } -#[bench] -fn remove_same(b: &mut Bencher) { - let mut m = prepare(); - - b.iter(|| { - m.remove("abcabcabca"); +fn remove_same(c: &mut Criterion) { + c.bench_function("remove_same", |b| { + b.iter_with_setup( + || prepare(), + |mut m| { + std::hint::black_box(m.remove("abcabcabca")); + } + ); }); } -#[bench] -fn get_none(b: &mut Bencher) { - let m = prepare(); - b.iter(|| { - m.get("abcabcabcad"); +fn get_none(c: &mut Criterion) { + c.bench_function("get_none", |b| { + b.iter_with_setup( + || prepare(), + |m| { + std::hint::black_box(m.get("abcabcabcad")); + } + ); }); } -#[bench] -fn iterate(b: &mut Bencher) { - let m = prepare(); - b.iter(|| { - for x in m.iter() { - test::black_box(x); - } +fn iterate(c: &mut Criterion) { + c.bench_function("iterate", |b| { + b.iter_with_setup( + || prepare(), + |m| { + for x in m.iter() { + std::hint::black_box(x); + } + } + ); }); } + +criterion_group!( + benches, + insert_same, + get_same, + remove_same, + get_none, + iterate +); + +criterion_main!(benches); diff --git a/examples/dict.rs b/examples/dict.rs index 2731fc0..1328d4e 100644 --- a/examples/dict.rs +++ b/examples/dict.rs @@ -5,7 +5,7 @@ static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc; extern crate libc; //extern {fn __rjem_je_stats_print (write_cb: extern fn (*const libc::c_void, *const libc::c_char), cbopaque: *const libc::c_void, opts: *const libc::c_char);} -extern fn write_cb (_: *mut libc::c_void, message: *const libc::c_char) { +extern "C" fn write_cb (_: *mut libc::c_void, message: *const libc::c_char) { print! ("{}", String::from_utf8_lossy (unsafe {std::ffi::CStr::from_ptr (message as *const i8) .to_bytes()}));} extern crate jemalloc_sys; diff --git a/src/lib.rs b/src/lib.rs index a68d41b..e2f3fc8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -24,8 +24,8 @@ macro_rules! tstmap { $crate::TSTMap::new() }}; // trailing comma case - ($($key:expr => $value:expr,)+) => (tstmap!($($key => $value),+)); - ($( $key: expr => $val: expr ),*) => {{ + ($($key:expr_2021 => $value:expr_2021,)+) => (tstmap!($($key => $value),+)); + ($( $key: expr_2021 => $val: expr_2021 ),*) => {{ let mut m = $crate::TSTMap::new(); $( m.insert($key, $val); @@ -60,8 +60,8 @@ macro_rules! tstset { $crate::TSTSet::new() }}; // trailing comma case - ($($key:expr,)+) => (tstset!($($key),+)); - ($($key: expr),*) => {{ + ($($key:expr_2021,)+) => (tstset!($($key),+)); + ($($key: expr_2021),*) => {{ let mut s = $crate::TSTSet::new(); $( s.insert($key); diff --git a/src/map.rs b/src/map.rs index 0846eba..2a8f154 100644 --- a/src/map.rs +++ b/src/map.rs @@ -516,7 +516,7 @@ impl Drop for TSTMap { fn drop(&mut self) { let root = self.root.take(); let mut iter = DropTraverse::new(root); - for _ in iter.next() { } + while let Some(_) = iter.next() { } } }