Index: tests/concurrent/examples/.expect/gortn.txt
===================================================================
--- tests/concurrent/examples/.expect/gortn.txt	(revision 97e8d1eda352de8d1a859f1478372a75c8891abb)
+++ tests/concurrent/examples/.expect/gortn.txt	(revision 97e8d1eda352de8d1a859f1478372a75c8891abb)
@@ -0,0 +1,3 @@
+0
+2.5
+1 2
Index: tests/concurrent/examples/gortn.cfa
===================================================================
--- tests/concurrent/examples/gortn.cfa	(revision 97e8d1eda352de8d1a859f1478372a75c8891abb)
+++ tests/concurrent/examples/gortn.cfa	(revision 97e8d1eda352de8d1a859f1478372a75c8891abb)
@@ -0,0 +1,43 @@
+//
+// 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.
+// 
+// gortn.cfa -- compare waitfor and go channels
+// 
+// Author           : Peter A. Buhr
+// Created On       : Wed Feb 20 08:02:37 2019
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Feb 20 08:35:55 2019
+// Update Count     : 3
+// 
+
+#include <fstream.hfa>
+#include <thread.hfa>
+
+struct Msg { int i, j; };
+thread Gortn { int i;  float f;  Msg m; };
+void ^?{}( Gortn & mutex ) {}
+void mem1( Gortn & mutex gortn, int i ) { gortn.i = i; }
+void mem2( Gortn & mutex gortn, float f ) { gortn.f = f; }
+void mem3( Gortn & mutex gortn, Msg m ) { gortn.m = m; }
+
+void main( Gortn & gortn ) with( gortn ) {
+	for ( ;; ) {
+		waitfor( mem1, gortn ) sout | i;
+		or waitfor( mem2, gortn ) sout | f;
+		or waitfor( mem3, gortn ) sout | m.i | m.j;
+		or waitfor( ^?{}, gortn ) break;
+	}
+}
+int main() {
+	Gortn gortn;										// start thread
+	mem1( gortn, 0 );
+	mem2( gortn, 2.5 );
+	mem3( gortn, (Msg){ 1, 2} );
+} // wait for completion
+
+// Local Variables: //
+// tab-width: 4 //
+// End: //
