]> piware.de Git - learn-rust.git/blobdiff - concepts/tests/test_lib.rs
Move top-level files into concepts/
[learn-rust.git] / concepts / tests / test_lib.rs
diff --git a/concepts/tests/test_lib.rs b/concepts/tests/test_lib.rs
new file mode 100644 (file)
index 0000000..af9bbe2
--- /dev/null
@@ -0,0 +1,51 @@
+#[macro_use]
+extern crate global_counter;
+
+use learning::*;
+
+#[test]
+fn test_longest() {
+    assert_eq!(longest("abc", "de"), "abc");
+    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);
+}