186ffd7dcf3756d8262f9aefdd6bfb0ff192525b
[learn-rust.git] / tests / test_lib.rs
1 use learning::*;
2
3 #[test]
4 fn test_longest() {
5     assert_eq!(longest("abc", "de"), "abc");
6     assert_eq!(longest("abc", "def"), "def");
7     assert_eq!(longest("abc", "defg"), "defg");
8 }
9
10 // FIXME: How to make this not unsafe?
11 static mut CALLED: u32 = 0;
12
13 #[test]
14 fn test_cacher_int_int() {
15     unsafe { CALLED = 0; }
16     let mut cacher = Cacher::new(|x| {
17         unsafe { CALLED += 1; }
18         2 * x
19     });
20     assert_eq!(cacher.value(1), 2);
21     unsafe { assert_eq!(CALLED, 1); }
22     // second time cached
23     assert_eq!(cacher.value(1), 2);
24     unsafe { assert_eq!(CALLED, 1); }
25     // re-evaluated for new value
26     assert_eq!(cacher.value(-2), -4);
27     unsafe { assert_eq!(CALLED, 2); }
28     // old arg still cached
29     assert_eq!(cacher.value(1), 2);
30     unsafe { assert_eq!(CALLED, 2); }
31 }
32
33 #[test]
34 fn test_cacher_str_usize() {
35     unsafe { CALLED = 0; }
36     let mut cacher = Cacher::new(|x: &str| {
37         unsafe { CALLED += 1; }
38         x.len()
39     });
40     assert_eq!(cacher.value("abc"), 3);
41     unsafe { assert_eq!(CALLED, 1); }
42     // second time cached
43     assert_eq!(cacher.value("abc"), 3);
44     unsafe { assert_eq!(CALLED, 1); }
45     // re-evaluated for new value
46     assert_eq!(cacher.value("defg"), 4);
47     unsafe { assert_eq!(CALLED, 2); }
48     // old arg still cached
49     assert_eq!(cacher.value("abc"), 3);
50     unsafe { assert_eq!(CALLED, 2); }
51 }