# Testing The Rust language has a facility for testing built into the language. Tests can be interspersed with other code, and annotated with the `#[test]` attribute. use std; fn twice(x: int) -> int { x + x } #[test] fn test_twice() { let i = -100; while i < 100 { assert twice(i) == 2 * i; i += 1; } } When you compile the program normally, the `test_twice` function will not be used. To actually run the tests, compile with the `--test` flag: > rustc --lib twice.rs > ./twice running 1 tests test test_twice ... ok result: ok. 1 passed; 0 failed; 0 ignored Or, if we change the file to fail, for example by replacing `x + x` with `x + 1`: running 1 tests test test_twice ... FAILED failures: test_twice result: FAILED. 0 passed; 1 failed; 0 ignored You can pass a command-line argument to a program compiled with `--test` to run only the tests whose name matches the given string. If we had, for example, test functions `test_twice`, `test_once_1`, and `test_once_2`, running our program with `./twice test_once` would run the latter two, and running it with `./twice test_once_2` would run only the last. To indicate that a test is supposed to fail instead of pass, you can give it a `#[should_fail]` attribute. use std; fn divide(a: float, b: float) -> float { if b == 0f { fail; } a / b } #[test] #[should_fail] fn divide_by_zero() { divide(1f, 0f); } To disable a test completely, add an `#[ignore]` attribute. Running a test runner (the program compiled with `--test`) with an `--ignored` command-line flag will cause it to also run the tests labelled as ignored. A program compiled as a test runner will have the configuration flag `test` defined, so that you can add code that won't be included in a normal compile with the `#[cfg(test)]` attribute (see [conditional compilation](syntax.md#conditional)).