X-Git-Url: https://piware.de/gitweb/?p=learn-rust.git;a=blobdiff_plain;f=tests%2Ftest_lib.rs;h=186ffd7dcf3756d8262f9aefdd6bfb0ff192525b;hp=44d7f87cee54405631e9412ced6542eec01eaed6;hb=b6a408eb8944df04d6c6e876a9a00f6c425f47f1;hpb=cf414916b6551e102ebf120866ef461d47c535bd diff --git a/tests/test_lib.rs b/tests/test_lib.rs index 44d7f87..186ffd7 100644 --- a/tests/test_lib.rs +++ b/tests/test_lib.rs @@ -6,3 +6,46 @@ fn test_longest() { assert_eq!(longest("abc", "def"), "def"); assert_eq!(longest("abc", "defg"), "defg"); } + +// FIXME: How to make this not unsafe? +static mut CALLED: u32 = 0; + +#[test] +fn test_cacher_int_int() { + unsafe { CALLED = 0; } + let mut cacher = Cacher::new(|x| { + unsafe { CALLED += 1; } + 2 * x + }); + assert_eq!(cacher.value(1), 2); + unsafe { assert_eq!(CALLED, 1); } + // second time cached + assert_eq!(cacher.value(1), 2); + unsafe { assert_eq!(CALLED, 1); } + // re-evaluated for new value + assert_eq!(cacher.value(-2), -4); + unsafe { assert_eq!(CALLED, 2); } + // old arg still cached + assert_eq!(cacher.value(1), 2); + unsafe { assert_eq!(CALLED, 2); } +} + +#[test] +fn test_cacher_str_usize() { + unsafe { CALLED = 0; } + let mut cacher = Cacher::new(|x: &str| { + unsafe { CALLED += 1; } + x.len() + }); + assert_eq!(cacher.value("abc"), 3); + unsafe { assert_eq!(CALLED, 1); } + // second time cached + assert_eq!(cacher.value("abc"), 3); + unsafe { assert_eq!(CALLED, 1); } + // re-evaluated for new value + assert_eq!(cacher.value("defg"), 4); + unsafe { assert_eq!(CALLED, 2); } + // old arg still cached + assert_eq!(cacher.value("abc"), 3); + unsafe { assert_eq!(CALLED, 2); } +}