Как выполнить «грузовой стенд» для каждого файла? - PullRequest
0 голосов
/ 03 мая 2018

Я работаю над Project Euler проблемами, и у меня каждая проблема в отдельном файле. Поскольку я пробую разные подходы к каждой проблеме, я создаю серию тестов для каждой проблемы в соответствующем файле.

Моя структура каталогов выглядит так:

euler/
    Cargo.lock
    Cargo.toml
    README.md
    src/
        main.rs
        p001.rs
        p002.rs
        ...etc.

Содержимое main.rs:

#![feature(test)]

extern crate primes;
extern crate test;

mod p001;
mod p002;
// ... etc

fn main() {}

Когда я запускаю cargo bench, он запускает тесты для каждого отдельного файла в моем проекте:

$ cargo bench
    Finished release [optimized] target(s) in 0.02 secs
     Running target/release/deps/euler_rust-5be87dff38a04da2

running 11 tests
test p001::bench_fold_sum                     ... bench:      12,955 ns/iter (+/- 13,501)
test p001::bench_for_sum                      ... bench:      11,385 ns/iter (+/- 7,383)
test p002::bench_for_sum                      ... bench:         270 ns/iter (+/- 90)
test p002::bench_takewhile_filter_mutable_sum ... bench:         322 ns/iter (+/- 333)
test p002::bench_takewhile_filter_sum         ... bench:         512 ns/iter (+/- 379)
test p002::bench_takewhile_sum                ... bench:         273 ns/iter (+/- 117)
test p002::bench_while_sum                    ... bench:         286 ns/iter (+/- 240)

Меня интересует только запуск тестов, содержащихся в одном файле, но указание имени файла после cargo bench дает следующее:

$ cargo bench src/p002.rs
    Finished release [optimized] target(s) in 0.02 secs
     Running target/release/deps/euler_rust-5be87dff38a04da2

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 11 filtered out

Как вы запускаете тесты в одном файле?

1 Ответ

0 голосов
/ 03 мая 2018

Нет прямой опции «запускать тесты, содержащиеся в этом файле на диске». Справка для cargo bench говорит:

$ cargo bench --help
Execute all benchmarks of a local package

Usage:
    cargo bench [options] [BENCHNAME] [--] [<args>...]

Options:
    BENCHNAME                    If specified, only run benches containing this string in their names

Кроме того, файлы соответствуют модулям Rust, а модули являются частью имени теста.

Вы можете объединить эти две вещи вместе и использовать cargo bench my_file_slash_module_name для ограничения запускаемых тестов. В вашем конкретном случае:

cargo bench p002

Если у вас есть другие тесты или модули, содержащие эту же подстроку, иногда вы можете уйти, добавив двоеточия:

cargo bench p002::
...