Index: tests/concurrent/.expect/sleep.txt
===================================================================
--- tests/concurrent/.expect/sleep.txt	(revision c457dc41e6b4b62b0efdae9921df595bf3a48d66)
+++ tests/concurrent/.expect/sleep.txt	(revision c457dc41e6b4b62b0efdae9921df595bf3a48d66)
@@ -0,0 +1,26 @@
+start
+fast loop 0.047
+fast loop 0.094
+fast loop 0.141
+fast loop 0.188
+fast loop 0.235
+slow loop 0.277
+fast loop 0.282
+fast loop 0.329
+fast loop 0.376
+fast loop 0.423
+fast loop 0.47
+fast loop 0.517
+slow loop 0.554
+fast loop 0.564
+fast loop 0.611
+fast loop 0.658
+fast loop 0.705
+fast loop 0.752
+fast loop 0.799
+slow loop 0.831
+fast loop 0.846
+fast loop 0.893
+fast loop 0.94
+slow loop 1.108
+done
Index: tests/concurrent/sleep.cfa
===================================================================
--- tests/concurrent/sleep.cfa	(revision c457dc41e6b4b62b0efdae9921df595bf3a48d66)
+++ tests/concurrent/sleep.cfa	(revision c457dc41e6b4b62b0efdae9921df595bf3a48d66)
@@ -0,0 +1,38 @@
+#include <fstream.hfa>
+#include <thread.hfa>
+#include <time.hfa>
+
+Duration default_preemption() {
+	return 0;
+}
+
+thread fast_sleeper {};
+void main(fast_sleeper &) {
+	Duration wait = 47`ms;
+	for(i; 20) {
+		sleep(wait);
+		sout | acquire | "fast loop" | ((1 + i) * wait);
+	}
+}
+
+thread slow_sleeper {};
+void main(slow_sleeper &) {
+	Duration wait = 277`ms;
+	for(i; 4) {
+
+		sleep(wait);
+		sout | acquire | "slow loop" | ((1 + i) * wait);
+	}
+}
+
+int main() {
+	sout | acquire | "start";
+	{
+		slow_sleeper slow;
+		yield();
+		fast_sleeper fast;
+		yield();
+	}
+	sout | acquire | "done";
+}
+
