Rust Criterion基准测试模块`unresolved import `crate::some_module``

mklgxw1f  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(161)

我有一个二进制项目,有很多内部模块来组织功能。
我正在尝试让Criterion为基准测试工作。
错误:

error[E0432]: unresolved import `crate::some_module`
 --> benches/benchmarks.rs:3:5
  |
3 | use crate::some_module;
  |     ^^^^^^^^^^^^^^^^^^ no `some_module` in the root

error: aborting due to previous error

字符串
最小示例.ziphttps://drive.google.com/file/d/1TASKI9_ODJniamHp3RBRscoflabPT-kP/view?usp=sharing
我当前的最小示例如下所示:

.
├── Cargo.lock
├── Cargo.toml
├── src/
│   ├── main.rs
│   └── some_module/
│       ├── mod.rs
│       └── some_module_file.rs
└── benches/
    └── benchmarks.rs


Cargo.toml

[package]
name = "criterion-bin-test"
version = "0.1.0"
authors = ["Jonathan <jonthanwoollettlight@gmail.com>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

[dev-dependencies]
criterion = "0.3"

[[bench]]
name = "benchmarks"
harness = false


main.rs

mod some_module;

fn main() {
    println!("Hello, world!");

    println!("{}",some_module::some_mod_file::two());
}


mod.rs

pub mod some_mod_file;


some_module_file

pub fn two() -> i32 {
    2
}


benchmarks.rs

use criterion::{black_box, criterion_group, criterion_main, Criterion};

use crate::some_module;

fn fibonacci(n: u64) -> u64 {
    match n {
        0 => 1,
        1 => 1,
        n => fibonacci(n-1) + fibonacci(n-2),
    }
}

fn criterion_benchmark(c: &mut Criterion) {
    c.bench_function("fib 20", |b| b.iter(|| fibonacci(black_box(20))));
}

criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);


错误出现在use crate::some_module上,我不知道如何将Criterion基准应用于内部模块。
我当前项目中的测试被处理为:

.
├── Cargo.lock
├── Cargo.toml
├── src/
|   ├── main.rs
.   ├── tests.rs
    . some_module/
        ├── mod.rs
        ├── tests.rs
        .


它允许use crate::some_module

imzjd6km

imzjd6km1#

为任何人在这个问题上挣扎。
在实现基准测试(或示例)时,如果我们想包含一些模块/函数,我们必须以与包含已经安装的软件包中的模块/函数相同的方式进行。
例如,在上面的问题中,有一个错误指示:

error[E0432]: unresolved import `crate::some_module`
 --> benches/benchmarks.rs:3:5
  |
3 | use crate::some_module;
  |     ^^^^^^^^^^^^^^^^^^ no `some_module` in the root

error: aborting due to previous error

字符串
这是因为它应该读起来像:

use criterion-bin-test::some_module;


其中criterion-bin-test是实际的包名,在实现示例或基准测试时使用它而不是crate::;

相关问题