Атрибут #[bench]
Атрибут #[bench] помечает функцию как бенчмарк,
который измеряет время выполнения участка кода.
Функция-бенчмарк принимает параметром изменяемую ссылку
на объект Bencher и внутри своего тела вызывает
метод iter, принимающий замыкание с тестируемым кодом.
Атрибут доступен только в ночном (nightly) Rust,
так как бенчмарки пока не стабилизированы.
Синтаксис
#[bench]
fn bench_name(b: &mut Bencher)
{
b.iter(|| {
// tested code
});
}
Пример
Давайте напишем простой бенчмарк, который измеряет время сложения двух чисел:
#![feature(test)]
extern crate test;
use test::Bencher;
#[bench]
fn bench_sum(b: &mut Bencher)
{
b.iter(|| {
let res = 2 + 2;
res
});
}
Результат выполнения бенчмарка:
test bench_sum ... bench: 1 ns/iter (+/- 0)
Пример
Давайте напишем бенчмарк, который измеряет время создания вектора из пяти элементов:
#![feature(test)]
extern crate test;
use test::Bencher;
#[bench]
fn bench_vec(b: &mut Bencher)
{
b.iter(|| {
let res = vec![1, 2, 3, 4, 5];
res
});
}
Результат выполнения бенчмарка:
test bench_vec ... bench: 20 ns/iter (+/- 1)
Пример
Давайте напишем бенчмарк, который измеряет время конкатенации двух строк:
#![feature(test)]
extern crate test;
use test::Bencher;
#[bench]
fn bench_concat(b: &mut Bencher)
{
b.iter(|| {
let res = format!("{}{}", "abcde", "12345");
res
});
}
Результат выполнения бенчмарка:
test bench_concat ... bench: 45 ns/iter (+/- 2)
Смотрите также
-
атрибут
test,
который помечает функцию как тест -
атрибут
cfg(test),
который включает модуль только в режиме тестирования -
модуль
mod tests,
который хранит тестовые функции -
команда
cargo test,
которая запускает тесты и бенчмарки