无需重构Rust项目,如何用Criterion基准测试copy.rs函数?
解决方案
方案一:转为库+二进制混合结构(推荐)
这种方式让main.rs、基准测试共享同一套核心代码,无需调整现有文件位置:
- 在
src目录下新建lib.rs文件,内容如下:
pub mod copy; pub mod helper;
这一步将copy.rs和helper.rs声明为库的公共模块,允许外部代码访问。
保留
copy.rs中的引用路径:
原来的use crate::helper::somefunc;可以直接使用,此时crate指向我们的库,helper是库中已声明的模块。调整
main.rs的引用方式:
如果main.rs需要调用copy或helper的内容,改为:
use copy_experiments::copy; use copy_experiments::helper;
copy_experiments是你在Cargo.toml中定义的name字段值,也就是当前库的名称。
- 基准测试中引用
copy模块:
在copy_bench.rs中直接通过库名引用:
use copy_experiments::copy;
之后就能调用copy.rs中的函数完成基准测试。
方案二:在基准测试中直接声明依赖模块
如果不想新增lib.rs,可以在基准测试文件内直接声明所需模块:
- 修改
copy_bench.rs顶部代码:
// 先声明helper模块,因为copy依赖它 mod helper; // 声明copy模块 mod copy;
- 调整
copy.rs的引用路径:
把use crate::helper::somefunc;改为:
use super::helper::somefunc;
此时copy是copy_bench的子模块,super指向copy_bench,helper是同级子模块。
- 在基准测试中调用函数:
直接通过copy::your_function()的方式调用copy.rs中的函数即可。
Rust模块系统和C的区别说明
和C的#include文件包含逻辑不同,Rust采用树形模块结构:
- 单个
.rs文件不会自动成为模块,必须在父模块(如lib.rs、main.rs)中用mod声明。 crate关键字指向当前项目的根模块:库项目的根是lib.rs,二进制项目的根是main.rs。
内容的提问来源于stack exchange,提问作者Pragmatic
相关产品推荐
相关产品推荐

