Index: tests/concurrent/coroutineThen.cfa
===================================================================
--- tests/concurrent/coroutineThen.cfa	(revision 5b11c25668bf48e43c6bf9f0e7c460acb2ca76f5)
+++ tests/concurrent/coroutineThen.cfa	(revision 5b11c25668bf48e43c6bf9f0e7c460acb2ca76f5)
@@ -0,0 +1,94 @@
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <stdlib.hfa>
+#include <thread.hfa>
+#include <monitor.hfa>
+#include <time.hfa>
+
+#define __kick_rate 150000ul
+#include "long_tests.hfa"
+
+#ifndef PREEMPTION_RATE
+#define PREEMPTION_RATE 10`ms
+#endif
+
+Duration default_preemption() {
+	return PREEMPTION_RATE;
+}
+
+#ifdef TEST_LONG
+static const unsigned long N = 600_000ul;
+#else
+static const unsigned long N = 1_000ul;
+#endif
+
+monitor Printer {};
+#if !defined(TEST_FOREVER)
+	static inline void print(Printer & mutex this, const char * const text ) {
+		sout | text;
+	}
+#else
+	static inline void print(Printer & this, const char * const text ) {}
+#endif
+Printer printer;
+
+coroutine Coroutine {};
+
+volatile bool done = false;
+Coroutine * volatile the_cor = 0p;
+
+void store(Coroutine * volatile * target, Coroutine * value) {
+	long long int val = value;
+	volatile long long int * ptr = target;
+	__atomic_store(ptr, &val, __ATOMIC_SEQ_CST);
+}
+
+Coroutine * exchange(Coroutine * volatile * target) {
+	long long int ret;
+	volatile long long int * ptr = target;
+	long long int val = 0;
+	ret = __atomic_exchange_n(ptr, &val, __ATOMIC_SEQ_CST);
+	assert(ret == 0 || *ptr == 0);
+	return (Coroutine *)ret;
+}
+
+void main(Coroutine& this) {
+	for(int i = 0; TEST(i < N); i++) {
+
+		print(printer, "Coroutine 1");
+		void publish() {
+			assert(!the_cor);
+			store( &the_cor, &this );
+		}
+		suspend_then(publish);
+		print(printer, "Coroutine 2");
+		KICK_WATCHDOG;
+		yield();
+	}
+	done = true;
+}
+
+thread Thread {};
+void main(Thread & this) {
+	Coroutine * mine = 0p;
+	while(!done) {
+		yield();
+
+		mine = exchange( &the_cor );
+		if(!mine) continue;
+
+		print(printer, "Thread 1");
+		resume(*mine);
+		print(printer, "Thread 2");
+	}
+}
+
+
+int main(int argc, char* argv[]) {
+	processor p[2];
+	Coroutine c;
+	the_cor = &c;
+	{
+		Thread t[2];
+	}
+}
Index: tests/coroutine/.expect/suspend_then.txt
===================================================================
--- tests/coroutine/.expect/suspend_then.txt	(revision 5b11c25668bf48e43c6bf9f0e7c460acb2ca76f5)
+++ tests/coroutine/.expect/suspend_then.txt	(revision 5b11c25668bf48e43c6bf9f0e7c460acb2ca76f5)
@@ -0,0 +1,30 @@
+Then!
+Then!
+0 0
+Then!
+Then!
+1 1
+Then!
+Then!
+1 1
+Then!
+Then!
+2 2
+Then!
+Then!
+3 3
+Then!
+Then!
+5 5
+Then!
+Then!
+8 8
+Then!
+Then!
+13 13
+Then!
+Then!
+21 21
+Then!
+Then!
+34 34
Index: tests/coroutine/suspend_then.cfa
===================================================================
--- tests/coroutine/suspend_then.cfa	(revision 5b11c25668bf48e43c6bf9f0e7c460acb2ca76f5)
+++ tests/coroutine/suspend_then.cfa	(revision 5b11c25668bf48e43c6bf9f0e7c460acb2ca76f5)
@@ -0,0 +1,52 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2019 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// suspend_then.cfa --
+//
+// Author           : Peter A. Buhr
+// Created On       : Mon Apr 29 12:01:35 2019
+// Last Modified By :
+// Last Modified On :
+// Update Count     :
+//
+
+#include <fstream.hfa>
+#include <coroutine.hfa>
+
+void then() {
+	sout | "Then!";
+}
+
+coroutine Fibonacci { int fn; };						// used for communication
+
+void main( Fibonacci & fib ) with( fib ) {				// called on first resume
+	int fn1, fn2;								// retained between resumes
+	fn = 0;  fn1 = fn;							// 1st case
+	suspend_then(then);							// restart last resume
+	fn = 1;  fn2 = fn1;  fn1 = fn;					// 2nd case
+	suspend_then(then);							// restart last resume
+	for () {
+		fn = fn1 + fn2;  fn2 = fn1;  fn1 = fn;			// general case
+		suspend_then(then);						// restart last resume
+	} // for
+}
+
+int next( Fibonacci & fib ) with( fib ) {
+	resume( fib );								// restart last suspend
+	return fn;
+}
+
+int main() {
+	Fibonacci f1, f2;
+	for ( 10 ) {								// print N Fibonacci values
+		sout | next( f1 ) | next( f2 );
+	} // for
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa runningTotal.cfa" //
+// End: //
