我对Rust完全是个新手,而Rust书似乎没有涵盖我的单元测试特定用例。
我正在实现我大学学位的The Computer Language Benchmarks Game。为了保持一致性,我决定每种语言和算法实现都应该遵守以下目录结构:
root
|
|__ language_1
| |
| |__ algorithm_1
| | |
| | |__ algorithm_1 <-- The algorithm logic.
| | |
| | |__ algorithm_1_tests <-- Tests.
| | |
| | |__ algorithm_1_run <-- A `main` function to execute the algorithm logic.
| |
| |__ algorithm_2
|
|__ language_2
...
我需要这种一致性,因为我将编写一个bash脚本来遍历此目录树结构,并能轻松地编译(如果需要)和运行必要文件。
我目前正在学习和使用Rust编程语言编写算法。我将算法创建为库文件,并有一个单独的文件调用库文件并执行其中的函数,这工作正常。
我的问题在于测试。我希望有一个单独的文件包含所有测试,导入原始算法逻辑文件,并调用(和断言)函数。
为了使这更清晰,我将提供一个模拟示例,以说明我正在运行的内容:
root
|
|__ rust
| |
| |__ algorithm
| | |
| | |__ algorithm.rs
| | |
| | |__ algorithm_tests.rs
| | |
| | |__ algorithm_run.rs
algorithm.rs
fn is_even(a: u32) -> bool {
return a % 2 == 0;
}
algorithm_run.rs
mod algorithm;
fn main() {
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
for number in numbers {
algorithm::is_even(number);
}
algorithm_tests.rs
mod algorithm;
#[test]
fn test_is_even_returns_true_for_even_numbers() {
let even_numbers = [2, 4, 6, 8, 10]
for number in even_numbers {
assert_eq!(true, algorithm::is_even(number));
}
}
使用以下命令来执行并运行该程序:
$ rustc algorithm_run.rs -o algorithm && ./algorithm
我需要进行哪些命令或修改才能运行测试呢?
rustc
,而是使用cargo
。它可以管理构建产物、构建配置文件、外部依赖、增量编译等等。如果您想让多种语言在脚本方面具有相同的行为,请使用makefile。 - kmdrekocargo new
命令和src/*
结构的强调,但这是我为项目设定的要求,将来会更容易进行多语言测试,因此希望有一种一致的编译/运行方式。老实说,我还没有研究过 Makefile,因为我经验不足,但我会牢记在心! - Mario