如何在 Rust 中使用标准进行基准测试,而无需在 Cargo toml 中提供库?

问题描述 投票:0回答:1

我就直接进入正题吧。这是我的文件夹结构

|----Project HEAD
  |-------------------src
         |-------------------copy.rs
         |-------------------main.rs
         |-------------------helper.rs
         |-------------------copy_bench.rs

这是我的货物 toml:

[package]
name = "copy_experiments"
version = "0.1.0"
edition = "2021"

[dependencies]
chrono = "0.4.37"
crossbeam = "0.8.4"
rayon = "1.10.0"
tabled = "0.15.0"

[dev-dependencies]
criterion = {version = "0.5.1"}

[[bench]]
name = "copy_bench"
path = "src/copy_bench.rs"
harness = false

现在我在 copy.rs 中编写了多个函数,我想对它们进行基准测试 我怎样才能做到这一点而不需要重新组织一切? 我尝试将 copy.rs 转换为 lib,但 copy.rs 无法再使用 helper.rs 中的函数 如果可能的话,我宁愿不重组任何东西

例如: 复制.rs:

use crate::helper::somefunc;  // this becomes unresolved if copy.rs is converted to lib

如果不将 copy.rs 转换为 lib,即使它们位于同一文件夹中,我似乎也无法使用副本中的函数 一旦我提到

[[bench]]
下的路径,
use crate::copy;
就变得悬而未决

这个问题有什么解决办法吗?我通常习惯使用 C,在那里我可以包含任何我想要的内容,但这是令人困惑的,并且感谢任何朝着正确方向的指导。

rust
1个回答
0
投票

根据标准成功地在 Rust 中测试多个模块。您将需要一个 lib 文件夹。您可以通过将以下行放入您的

cargo.toml
:

来创建您的库
[lib]
name = "lib"
path = "src/lib/mod.rs"

在 lib 文件夹中,mod.rs 将是所有子模块的条目。如果您有一个 lib 文件夹结构,例如:

|--------lib
     |---------copy.rs
     |---------etc.rs
     |---------etc2.rs
     |---------mod.rs

那么你的 mod.rs 应该是这样的:

pub mod copy;
pub mod etc1;
pub mod etc2;

然后您就可以在 bench.rs 文件中使用

use lib::copy::somefunc;

希望对像我这样的新手有帮助

© www.soinside.com 2019 - 2024. All rights reserved.