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); }
+}