/bench-rs

A benchmark library.

Primary LanguageRustMIT LicenseMIT

bench-rs

Rust docs.rs GitHub code size in bytes Downloads GitHub Crates.io

A benchmark library.

  • Stable rust (no black_box)
  • Beautiful output
  • Async support
  • Custom async runtime
  • Memory usage
  • Custom formatting
  • Intuitive numerical units
  • Support custom memory allocator

Examples

$ cargo test --release --color=always -q --package bench-rs --test bench --no-fail-fast -- --test-threads=1 --nocapture

Look ./tests/bench.rs

image.png

black_box

I don't know how to implement the black box.

Please use core::hint::black_box. (unstable)

If you have a better idea, welcome to submit a pull request or open an issue

global_allocator

In order to detect Memory usage, bench-rs modified global_allocator. This will make it impossible to use other allocators. If you need to use other allocator:

Change your allocator: (if your allocator is std::alloc::System)

use std::alloc::System;
use bench_rs::{TrackAllocator, new_allocator};

#[global_allocator]
pub static GLOBAL: TrackAllocator<System> = new_allocator!(System);

Turn off default features:

[dependencies]
bench-rs = { version = "*", default-features = false }

Import the allocator named GLOBAL:

use bench_rs::bench;
use yourlib::GLOBAL;

#[bench]
fn ...

If your allocator name is not GLOBAL, please set its alias to GLOBAL:

use yourlib::OtherAllocator as GLOBAL

Because the bencher-macro will look for GLOBAL.counter() and GLOBAL.peak() at the same level of the bench function.


I am a rust beginner, please correct me if the code is bad. Thank you

Contributions welcome