Testing Rust Projects
Assert Equal
Check a Computed Value
assert_eq! verifies that an actual value equals the expected value. If they differ, the program stops with a clear failure.
Program
Play the program to choose a subtotal, compute a total, and check it with assert_eq!.
assert_equal.rs
Replay: real traced execution (multi-file project)
fn main() {
let subtotal = 10;
let total = add_fee(subtotal);
let expected = subtotal + 2;
assert_eq!(total, expected);
println!("{total}");
}
fn add_fee(value: i32) -> i32 {
value + 2
}
fn main() {
let subtotal = 5;
let total = add_fee(subtotal);
let expected = subtotal + 2;
assert_eq!(total, expected);
println!("{total}");
}
fn add_fee(value: i32) -> i32 {
value + 2
}
fn main() {
let subtotal = 20;
let total = add_fee(subtotal);
let expected = subtotal + 2;
assert_eq!(total, expected);
println!("{total}");
}
fn add_fee(value: i32) -> i32 {
value + 2
}
subtotal ← 10
1fn main() {2 let subtota→ 10l = 10; //@subtotal=10, 5, 203 let total = add_fee(subtota10l);4 let expected = subtotal + 2;fn add_fee(value: i32) -> i32
9fn add_fee(value: i32) -> i32 {10 valu10e + 211}total ← 12, expected ← 12
2 let subtotal = 10; //@subtotal=10, 5, 203 let tota→ 12l = add_fee(subtota10l);4 let expecte→ 12d = subtota10l + 2;5 assert_eq!(total, expected);6 println!("{total}");7}output12
subtotal ← 5
1fn main() {2 let subtota→ 5l = 5;3 let total = add_fee(subtota5l);4 let expected = subtotal + 2;fn add_fee(value: i32) -> i32
9fn add_fee(value: i32) -> i32 {10 valu5e + 211}total ← 7, expected ← 7
2 let subtotal = 5;3 let tota→ 7l = add_fee(subtota5l);4 let expecte→ 7d = subtota5l + 2;5 assert_eq!(total, expected);6 println!("{total}");7}output7
subtotal ← 20
1fn main() {2 let subtota→ 20l = 20;3 let total = add_fee(subtota20l);4 let expected = subtotal + 2;fn add_fee(value: i32) -> i32
9fn add_fee(value: i32) -> i32 {10 valu20e + 211}total ← 22, expected ← 22
2 let subtotal = 20;3 let tota→ 22l = add_fee(subtota20l);4 let expecte→ 22d = subtota20l + 2;5 assert_eq!(total, expected);6 println!("{total}");7}output22
assert_eq!
`assert_eq!(actual, expected)` records the intended relationship in executable code.
expected value
Computing `expected` separately makes the test intent visible.
testable helper
`add_fee` is small and deterministic, so it is easy to check.