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!.

subtotal
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
}
  1. subtotal ← 10

    1fn main() {2    let subtota→ 10l = 10; //@subtotal=10, 5, 203    let total = add_fee(subtota10l);4    let expected = subtotal + 2;
  2. fn add_fee(value: i32) -> i32

    9fn add_fee(value: i32) -> i32 {10    valu10e + 211}
  3. 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
  1. subtotal ← 5

    1fn main() {2    let subtota→ 5l = 5;3    let total = add_fee(subtota5l);4    let expected = subtotal + 2;
  2. fn add_fee(value: i32) -> i32

    9fn add_fee(value: i32) -> i32 {10    valu5e + 211}
  3. 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
  1. subtotal ← 20

    1fn main() {2    let subtota→ 20l = 20;3    let total = add_fee(subtota20l);4    let expected = subtotal + 2;
  2. fn add_fee(value: i32) -> i32

    9fn add_fee(value: i32) -> i32 {10    valu20e + 211}
  3. 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.