#基准测试 #测试

benchmark_suite

快速收集基准测试信息,具备完整的I/O控制

1 个不稳定版本

0.1.0 2023年5月5日

#301 in 性能分析

MIT/Apache

13KB
162

快速且轻松地对代码进行基准测试,具备对I/O生成的完全控制以及内置的多线程。

快速入门

要使用Benchmarker,你的输入数据必须在一个实现了 Bench 的结构体中。这允许完全控制每个测试的输入是如何生成的(例如使用rand)。

use rand::prelude::*;
use benchmark_suite::*;

struct Sorter {
    table:Vec<u32>
}

impl Bench for Sorter {

    fn generate() -> Self {
        let mut rng = rand::thread_rng();

        let mut table:Vec<u32> = (1..100).collect();
        table.shuffle(&mut rng);
        Sorter {table}
    }
    fn test(&mut self) {
        let mut swapped = true;

        while swapped {
            swapped = false;

            for i in 0..self.table.len()-1 {
                let a = self.table[i];
                let b = self.table[i+1];

                if a > b {
                    swapped = true;
                    self.table[i] = b;
                    self.table[i+1] = a;
                }
            }
        
        }
    }

}

现在,你可以使用 quickbench! 宏创建基准测试器,并使用 start() 运行测试。启动另一个测试后将继续添加到时间列表中,使它们更加详细。

//note that the runcount is the amount of times threads are created, the total number of tests ran is threads * runcount

                            //struct, threads, runcount
let mut bencher = quickbench!(Sorter, 8, 100);
bencher.start();
println!(
    "{:?} / {}",
    bencher.average(),
    bencher.max_threads * bencher.max_runcount,
)

依赖关系

~2–9MB
~75K SLoC