Index: tests/unified_locking/fast.cfa
===================================================================
--- tests/unified_locking/fast.cfa	(revision f7f07f6686cd624c02ff4a6810ca823591ac8122)
+++ tests/unified_locking/fast.cfa	(revision 4ae968e1d1e92379c1086e51bbb58529ff40da6c)
@@ -1,66 +1,8 @@
-#include <fstream.hfa>
 #include <locks.hfa>
-#include <thread.hfa>
 
-const unsigned int num_times = 50;
-
-struct MutexObj {
-	fast_lock l;
-	$thread * id;
-	uint32_t sum;
-};
-
-MutexObj mo;
-
-void trash() {
-	unsigned t[100];
-	for(i; 100) {
-		t[i] = 0xDEADBEEF;
-	}
-}
-
-uint32_t cs() {
-	$thread * me = active_thread();
-	uint32_t value;
-	lock(mo.l);
-	{
-		uint32_t tsum = mo.sum;
-		mo.id = me;
-		yield(random(5));
-		value = ((uint32_t)random()) ^ ((uint32_t)me);
-		if(mo.id != me) sout | "Intruder!";
-		mo.sum = tsum + value;
-	}
-	unlock(mo.l);
-	return value;
-}
-
-thread LockCheck {
-	uint32_t sum;
-};
-
-void main(LockCheck & this) {
-	this.sum = 0;
-	for(num_times) {
-		trash();
-		this.sum += cs();
-		trash();
-		yield(random(10));
-	}
-}
+#define LOCK fast_lock
+#include "mutex_test.hfa"
 
 int main() {
-	uint32_t sum = -32;
-	mo.sum = -32;
-	processor p[2];
-	sout | "Starting";
-	{
-		LockCheck checkers[13];
-		for(i;13) {
-			sum += join(checkers[i]).sum;
-		}
-	}
-	sout | "Done!";
-	if(sum == mo.sum) sout | "Match!";
-	else sout | "No Match!" | sum | "vs" | mo.sum;
+    test();
 }
Index: tests/unified_locking/lin_backoff.cfa
===================================================================
--- tests/unified_locking/lin_backoff.cfa	(revision 4ae968e1d1e92379c1086e51bbb58529ff40da6c)
+++ tests/unified_locking/lin_backoff.cfa	(revision 4ae968e1d1e92379c1086e51bbb58529ff40da6c)
@@ -0,0 +1,8 @@
+#include <locks.hfa>
+
+#define LOCK linear_backoff_then_block_lock
+#include "mutex_test.hfa"
+
+int main() {
+    test();
+}
Index: tests/unified_locking/mutex_test.hfa
===================================================================
--- tests/unified_locking/mutex_test.hfa	(revision 4ae968e1d1e92379c1086e51bbb58529ff40da6c)
+++ tests/unified_locking/mutex_test.hfa	(revision 4ae968e1d1e92379c1086e51bbb58529ff40da6c)
@@ -0,0 +1,67 @@
+
+#include <fstream.hfa>
+#include <locks.hfa>
+#include <thread.hfa>
+
+const unsigned int num_times = 50;
+
+struct MutexObj {
+	LOCK l;
+	$thread * id;
+	uint32_t sum;
+};
+
+MutexObj mo;
+
+void trash() {
+	unsigned t[100];
+	for(i; 100) {
+		t[i] = 0xDEADBEEF;
+	}
+}
+
+uint32_t cs() {
+	$thread * me = active_thread();
+	uint32_t value;
+	lock(mo.l);
+	{
+		uint32_t tsum = mo.sum;
+		mo.id = me;
+		yield(random(5));
+		value = ((uint32_t)random()) ^ ((uint32_t)me);
+		if(mo.id != me) sout | "Intruder!";
+		mo.sum = tsum + value;
+	}
+	unlock(mo.l);
+	return value;
+}
+
+thread LockCheck {
+	uint32_t sum;
+};
+
+void main(LockCheck & this) {
+	this.sum = 0;
+	for(num_times) {
+		trash();
+		this.sum += cs();
+		trash();
+		yield(random(10));
+	}
+}
+
+int test() {
+	uint32_t sum = -32;
+	mo.sum = -32;
+	processor p[2];
+	sout | "Starting";
+	{
+		LockCheck checkers[13];
+		for(i;13) {
+			sum += join(checkers[i]).sum;
+		}
+	}
+	sout | "Done!";
+	if(sum == mo.sum) sout | "Match!";
+	else sout | "No Match!" | sum | "vs" | mo.sum;
+}
