X-Git-Url: https://piware.de/gitweb/?p=learn-rust.git;a=blobdiff_plain;f=tests%2Ftest_lib.rs;h=af9bbe25b980e3372f1232e43ccea731b0536da2;hp=44d7f87cee54405631e9412ced6542eec01eaed6;hb=b756cb948f64416c2f5fd280a971bc7daa3bddea;hpb=cf414916b6551e102ebf120866ef461d47c535bd diff --git a/tests/test_lib.rs b/tests/test_lib.rs index 44d7f87..af9bbe2 100644 --- a/tests/test_lib.rs +++ b/tests/test_lib.rs @@ -1,3 +1,6 @@ +#[macro_use] +extern crate global_counter; + use learning::*; #[test] @@ -6,3 +9,43 @@ fn test_longest() { assert_eq!(longest("abc", "def"), "def"); assert_eq!(longest("abc", "defg"), "defg"); } + +#[test] +fn test_cacher_int_int() { + global_default_counter!(CALLED, u32); + let mut cacher = Cacher::new(|x| { + CALLED.inc(); + 2 * x + }); + assert_eq!(cacher.value(1), 2); + assert_eq!(CALLED.get_cloned(), 1); + // second time cached + assert_eq!(cacher.value(1), 2); + assert_eq!(CALLED.get_cloned(), 1); + // re-evaluated for new value + assert_eq!(cacher.value(-2), -4); + assert_eq!(CALLED.get_cloned(), 2); + // old arg still cached + assert_eq!(cacher.value(1), 2); + assert_eq!(CALLED.get_cloned(), 2); +} + +#[test] +fn test_cacher_str_usize() { + global_default_counter!(CALLED, u32); + let mut cacher = Cacher::new(|x: &str| { + CALLED.inc(); + x.len() + }); + assert_eq!(cacher.value("abc"), 3); + assert_eq!(CALLED.get_cloned(), 1); + // second time cached + assert_eq!(cacher.value("abc"), 3); + assert_eq!(CALLED.get_cloned(), 1); + // re-evaluated for new value + assert_eq!(cacher.value("defg"), 4); + assert_eq!(CALLED.get_cloned(), 2); + // old arg still cached + assert_eq!(cacher.value("abc"), 3); + assert_eq!(CALLED.get_cloned(), 2); +}