]> piware.de Git - learn-rust.git/commitdiff
Replace unsafe test code with global_counter
authorMartin Pitt <martin@piware.de>
Wed, 25 Aug 2021 06:36:47 +0000 (08:36 +0200)
committerMartin Pitt <martin@piware.de>
Wed, 25 Aug 2021 06:38:27 +0000 (08:38 +0200)
https://docs.rs/crate/global_counter

Cargo.toml
tests/test_lib.rs

index a642e49d5b497ee55da0bb597d5b198b15b1bbe4..2ec172e055695218879dfc90375013524142c8e1 100644 (file)
@@ -6,3 +6,4 @@ edition = "2018"
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
 [dependencies]
+global_counter = { version = "0.2.2", default-features = false }
index 186ffd7dcf3756d8262f9aefdd6bfb0ff192525b..af9bbe25b980e3372f1232e43ccea731b0536da2 100644 (file)
@@ -1,3 +1,6 @@
+#[macro_use]
+extern crate global_counter;
+
 use learning::*;
 
 #[test]
@@ -7,45 +10,42 @@ fn test_longest() {
     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; }
+    global_default_counter!(CALLED, u32);
     let mut cacher = Cacher::new(|x| {
-        unsafe { CALLED += 1; }
+        CALLED.inc();
         2 * x
     });
     assert_eq!(cacher.value(1), 2);
-    unsafe { assert_eq!(CALLED, 1); }
+    assert_eq!(CALLED.get_cloned(), 1);
     // second time cached
     assert_eq!(cacher.value(1), 2);
-    unsafe { assert_eq!(CALLED, 1); }
+    assert_eq!(CALLED.get_cloned(), 1);
     // re-evaluated for new value
     assert_eq!(cacher.value(-2), -4);
-    unsafe { assert_eq!(CALLED, 2); }
+    assert_eq!(CALLED.get_cloned(), 2);
     // old arg still cached
     assert_eq!(cacher.value(1), 2);
-    unsafe { assert_eq!(CALLED, 2); }
+    assert_eq!(CALLED.get_cloned(), 2);
 }
 
 #[test]
 fn test_cacher_str_usize() {
-    unsafe { CALLED = 0; }
+    global_default_counter!(CALLED, u32);
     let mut cacher = Cacher::new(|x: &str| {
-        unsafe { CALLED += 1; }
+        CALLED.inc();
         x.len()
     });
     assert_eq!(cacher.value("abc"), 3);
-    unsafe { assert_eq!(CALLED, 1); }
+    assert_eq!(CALLED.get_cloned(), 1);
     // second time cached
     assert_eq!(cacher.value("abc"), 3);
-    unsafe { assert_eq!(CALLED, 1); }
+    assert_eq!(CALLED.get_cloned(), 1);
     // re-evaluated for new value
     assert_eq!(cacher.value("defg"), 4);
-    unsafe { assert_eq!(CALLED, 2); }
+    assert_eq!(CALLED.get_cloned(), 2);
     // old arg still cached
     assert_eq!(cacher.value("abc"), 3);
-    unsafe { assert_eq!(CALLED, 2); }
+    assert_eq!(CALLED.get_cloned(), 2);
 }