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