# Unit testing

Unit tests should live in a `tests` submodule at the bottom of the module they test. Mark the `tests` submodule with `#[cfg(test)]` so it is only compiled when testing.

The `tests` module should contain:

- Imports needed only for testing.
- Functions marked with `#[test]` striving for full coverage of the parent module's definitions.
- Auxiliary functions needed for writing the tests.

For example:

fn main() { // Excerpt from std::str #[cfg(test)] mod tests { #[test] fn test_eq() { assert!((eq(&"".to_owned(), &"".to_owned()))); assert!((eq(&"foo".to_owned(), &"foo".to_owned()))); assert!((!eq(&"foo".to_owned(), &"bar".to_owned()))); } } }

    // Excerpt from std::str

    #[cfg(test)]
    mod tests {
        #[test]
        fn test_eq() {
            assert!((eq(&"".to_owned(), &"".to_owned())));
            assert!((eq(&"foo".to_owned(), &"foo".to_owned())));
            assert!((!eq(&"foo".to_owned(), &"bar".to_owned())));
        }
    }

> [FIXME] add details about useful macros for testing, e.g. `assert!`