Skip to main content

restaurant/
lib.rs

1//! # Restaurant
2//!
3//! `restaurant` 是一个rust示例合集
4
5mod cacher;
6pub mod adder;
7mod guess;
8mod front_of_house;
9
10pub use crate::front_of_house::hosting;
11
12pub fn eat_at_restaurant() {
13    hosting::add_to_waitlist();
14    hosting::add_to_waitlist();
15    hosting::add_to_waitlist();
16}
17
18#[derive(Debug)]
19struct Rectangle {
20    width: u32,
21    height: u32,
22}
23
24impl Rectangle {
25    fn can_hold(&self, other: &Rectangle) -> bool {
26        self.width > other.width && self.height > other.height
27    }
28}
29
30pub fn add_two(a: i32) -> i32 {
31    a + 2
32}
33
34pub fn greeting(name: &str) -> String {
35    format!("Hello {}!", name)
36}
37
38fn prints_and_returns_10(a: i32) -> i32 {
39    println!("I got the value {}", a);
40    10
41}
42
43#[cfg(test)]
44mod tests {
45    use super::*;
46
47    #[test]
48    fn larger_can_hold_smaller() {
49        let larger = Rectangle { width: 8, height: 7 };
50        let smaller = Rectangle { width: 5, height: 1 };
51
52        assert!(larger.can_hold(&smaller));
53    }
54
55    #[test]
56    fn smaller_cannot_hold_larger() {
57        let larger = Rectangle { width: 8, height: 7 };
58        let smaller = Rectangle { width: 5, height: 1 };
59
60        assert!(!smaller.can_hold(&larger));
61    }
62
63    #[test]
64    fn it_adds_two() {
65        assert_eq!(4, add_two(2));
66    }
67
68    #[test]
69    fn greeting_contains_name() {
70        let result = greeting("Carol");
71        assert!(result.contains("Carol"));
72    }
73
74    #[test]
75    fn greeting_contains_name_with_msg() {
76        let result = greeting("Carol");
77        // 增加一个自定义失败信息参数:带占位符的格式字符串,以及 greeting 函数的值
78        assert!(
79            result.contains("Carol"),
80            "Greeting did not contain name, value was `{}`", result
81        );
82    }
83
84    // 将 Result<T, E> 用于测试
85    #[test]
86    fn it_works() -> Result<(), String> {
87        if 2 + 2 == 4 {
88            Ok(())
89        } else {
90            Err(String::from("two plus two does not equal four"))
91        }
92    }
93
94    // 默认情况下,当测试通过时,Rust 的测试库会截获打印到标准输出的所有内容。
95    // 比如在测试中调用了 println! 而测试通过了,我们将不会在终端看到 println! 的输出
96    #[test]
97    fn this_test_will_pass() {
98        let value = prints_and_returns_10(4);
99        assert_eq!(10, value);
100    }
101
102    // 如果测试失败了,则会看到所有标准输出和其他错误信息
103    #[test]
104    fn this_test_will_fail() {
105        let value = prints_and_returns_10(8);
106        assert_eq!(5, value);
107    }
108
109    #[test]
110    #[ignore]
111    fn expensive_test() {
112        // 需要运行一个小时的代码
113    }
114
115}