diff --git a/sim/src/lib.rs b/sim/src/lib.rs
index 03bb2cb..1314c42 100644
--- a/sim/src/lib.rs
+++ b/sim/src/lib.rs
@@ -377,12 +377,12 @@
     }
 
     #[cfg(feature = "overwrite-only")]
-    fn run_basic_revert(&self) -> bool {
+    pub fn run_basic_revert(&self) -> bool {
         false
     }
 
     #[cfg(not(feature = "overwrite-only"))]
-    fn run_basic_revert(&self) -> bool {
+    pub fn run_basic_revert(&self) -> bool {
         let mut fails = 0;
 
         // FIXME: this test would also pass if no swap is ever performed???
@@ -400,7 +400,7 @@
         fails > 0
     }
 
-    fn run_perm_with_fails(&self) -> bool {
+    pub fn run_perm_with_fails(&self) -> bool {
         let mut fails = 0;
         let total_flash_ops = self.total_count.unwrap();
 
@@ -442,6 +442,10 @@
         fails > 0
     }
 
+    pub fn run_perm_with_random_fails_5(&self) -> bool {
+        self.run_perm_with_random_fails(5)
+    }
+
     fn run_perm_with_random_fails(&self, total_fails: usize) -> bool {
         let mut fails = 0;
         let total_flash_ops = self.total_count.unwrap();
@@ -480,13 +484,12 @@
     }
 
     #[cfg(feature = "overwrite-only")]
-    #[allow(unused_variables)]
-    fn run_revert_with_fails(&self) -> bool {
+    pub fn run_revert_with_fails(&self) -> bool {
         false
     }
 
     #[cfg(not(feature = "overwrite-only"))]
-    fn run_revert_with_fails(&self) -> bool {
+    pub fn run_revert_with_fails(&self) -> bool {
         let mut fails = 0;
 
         if Caps::SwapUpgrade.present() {
@@ -503,12 +506,12 @@
     }
 
     #[cfg(feature = "overwrite-only")]
-    fn run_norevert(&self) -> bool {
+    pub fn run_norevert(&self) -> bool {
         false
     }
 
     #[cfg(not(feature = "overwrite-only"))]
-    fn run_norevert(&self) -> bool {
+    pub fn run_norevert(&self) -> bool {
         let mut fl = self.flash.clone();
         let mut fails = 0;
 
diff --git a/sim/tests/core.rs b/sim/tests/core.rs
index 010f240..5487939 100644
--- a/sim/tests/core.rs
+++ b/sim/tests/core.rs
@@ -4,20 +4,26 @@
 
 extern crate bootsim;
 
-use bootsim::{ALL_DEVICES, RunStatus};
-use bootsim::testlog;
+use bootsim::{Run, testlog};
 
-#[test]
-fn core_tests() {
-    testlog::setup();
+macro_rules! sim_test {
+    ($name:ident, $maker:ident, $test:ident) => {
+        #[test]
+        fn $name() {
+            testlog::setup();
 
-    let mut status = RunStatus::new();
-
-    for &dev in ALL_DEVICES {
-        for &align in &[1, 2, 4, 8] {
-            status.run_single(dev, align);
+            Run::each_device(|r| {
+                let image = r.$maker();
+                assert!(!image.$test());
+            });
         }
-    }
-
-    assert!(status.failures() == 0);
+    };
 }
+
+sim_test!(bad_slot1, make_bad_slot1_image, run_signfail_upgrade);
+sim_test!(norevert_newimage, make_no_upgrade_image, run_norevert_newimage);
+sim_test!(basic_revert, make_image, run_basic_revert);
+sim_test!(revert_with_fails, make_image, run_revert_with_fails);
+sim_test!(perm_with_fails, make_image, run_perm_with_fails);
+sim_test!(perm_with_random_fails, make_image, run_perm_with_random_fails_5);
+sim_test!(norevert, make_image, run_norevert);
