Index: tests/fallthrough.cfa
===================================================================
--- tests/fallthrough.cfa	(revision ef346f7cc43b1b67ca3fa5de124271b9c9ac2453)
+++ tests/fallthrough.cfa	(revision f498c51a018fefd922490ffd5a590af5312c0cf3)
@@ -10,6 +10,6 @@
 // Created On       : Wed Mar 14 10:06:25 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Dec 20 22:02:38 2018
-// Update Count     : 20
+// Last Modified On : Mon Dec 24 11:24:35 2018
+// Update Count     : 22
 //
 
@@ -61,5 +61,5 @@
 			sout | "case 1";
 			for ( int i = 0; i < 4; i += 1 ) {
-				printf("%d\n", i);
+				sout | i;
 				if ( i == 2 ) fallthru common;
 			} // for
@@ -77,9 +77,9 @@
 		} // if
 	  common:
-		printf( "common\n" );
+		sout | "common";
 		fallthru;
 		break;
 	  default:
-		printf( "default\n" );
+		sout | "default";
 		fallthru;
 	} // switch
Index: tests/polymorphism.cfa
===================================================================
--- tests/polymorphism.cfa	(revision ef346f7cc43b1b67ca3fa5de124271b9c9ac2453)
+++ tests/polymorphism.cfa	(revision f498c51a018fefd922490ffd5a590af5312c0cf3)
@@ -9,11 +9,12 @@
 // Author           : Rob Schluntz
 // Created On       : Tue Oct 17 12:19:48 2017
-// Last Modified By : Rob Schluntz
-// Last Modified On : Tue Oct 17 12:21:07 2017
-// Update Count     : 1
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Tue Dec 25 14:40:24 2018
+// Update Count     : 3
 //
 
 #include <assert.h>
 #include <inttypes.h>
+#include <fstream.hfa>
 
 forall(otype T)
@@ -61,14 +62,12 @@
 		int y = 456;
 		int z = f(x, y);
-		printf("%d %d %d\n", x, y, z);
+		sout | x | y | z;
 	}
-
 	{
 		// explicitly specialize function
 		int (*f)(int) = ident;
 		((int(*)(int))ident);
-		printf("%d %d\n", f(5), ((int(*)(int))ident)(5));
+		sout | f(5) | ((int(*)(int))ident)(5);
 	}
-
 	{
 		// test aggregates with polymorphic members
@@ -100,9 +99,9 @@
 
 		void print(x_type x) {
-			printf("%"PRIu32"\n", x);
+			sout | x;
 		}
 
 		void print(y_type y) {
-			printf("%"PRIu64"\n", y);
+			sout | y;
 		}
 
Index: tests/references.cfa
===================================================================
--- tests/references.cfa	(revision ef346f7cc43b1b67ca3fa5de124271b9c9ac2453)
+++ tests/references.cfa	(revision f498c51a018fefd922490ffd5a590af5312c0cf3)
@@ -9,27 +9,29 @@
 // Author           : Rob Schluntz
 // Created On       : Wed Aug 23 16:11:50 2017
-// Last Modified By : Rob Schluntz
-// Last Modified On : Wed Aug 23 16:12:03
-// Update Count     : 2
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Tue Dec 25 14:31:48 2018
+// Update Count     : 11
 //
 
+#include <fstream.hfa>
+
 struct Y { int i; };
-void ?{}(Y & y) { printf("Default constructing a Y\n"); }
-void ?{}(Y & y, Y other) { printf("Copy constructing a Y\n"); }
-void ^?{}(Y & y) { printf("Destructing a Y\n"); }
-Y ?=?(Y & y, Y other) { printf("Assigning a Y\n"); return y; }
-void ?{}(Y & y, int i) { printf("Value constructing a Y %d\n", i); y.i = i; }
+void ?{}( Y & y ) { sout | "Default constructing a Y"; }
+void ?{}( Y & y, Y other ) { sout | "Copy constructing a Y"; }
+void ^?{}( Y & y ) { sout | "Destructing a Y"; }
+Y ?=?( Y & y, Y other ) { sout | "Assigning a Y"; return y; }
+void ?{}( Y & y, int i ) { sout | "Value constructing a Y" | i; y.i = i; }
 
 struct X { Y & r; Y y; };
-void ?{}(X & x) {
+void ?{}( X & x ) {
 	// ensure that r is not implicitly constructed
 }
-void ?{}(X & x, X other) {
+void ?{}( X & x, X other ) {
 	// ensure that r is not implicitly constructed
 }
-void ^?{}(X & x) {
+void ^?{}( X & x ) {
 	// ensure that r is not implicitly destructed
 }
-X ?=?(X & x, X other) { return x; }
+X ?=?( X & x, X other ) { return x; }
 
 // ensure that generated functions do not implicitly operate on references
@@ -48,42 +50,42 @@
 	int x = 123456, x2 = 789, *p1 = &x, **p2 = &p1, ***p3 = &p2,
 		&r1 = x,    &&r2 = r1,   &&&r3 = r2;
-	***p3 = 3;                          // change x
-	**p3 = &x;                          // change p1
-	*p3 = &p1;                          // change p2
-	int y = 0, z = 11, & ar[3] = { x, y, z };    // initialize array of references
-	// &ar[1] = &z;                        // change reference array element
-	// typeof( ar[1] ) p = 3;              // is int, i.e., the type of referenced object
-	// typeof( &ar[1] ) q = &x;            // is int *, i.e., the type of pointer
+	***p3 = 3;											// change x
+	**p3 = &x;											// change p1
+	*p3 = &p1;											// change p2
+	int y = 0, z = 11, & ar[3] = { x, y, z };			// initialize array of references
+														// &ar[1] = &z;                        // change reference array element
+														// typeof( ar[1] ) p = 3;              // is int, i.e., the type of referenced object
+														// typeof( &ar[1] ) q = &x;            // is int *, i.e., the type of pointer
 	// _Static_assert( sizeof( ar[1] ) == sizeof( int ), "Array type should be int." );   // is true, i.e., the size of referenced object
 	// _Static_assert( sizeof( &ar[1] ) == sizeof( int *), "Address of array should be int *." ); // is true, i.e., the size of a reference
 
-	((int*&)&r3) = &x;                  // change r1, (&*)**r3
+	((int*&)&r3) = &x;									// change r1, (&*)**r3
 	x = 3;
 	// test that basic reference properties are true - r1 should be an alias for x
-	printf("%d %d %d\n", x, r1, &x == &r1);
+	sout | x | r1 | &x == &r1;
 	r1 = 12;
-	printf("%d %d %d\n", x, r1, &x == &r1);
+	sout | x | r1 | &x == &r1;
 
 	// test that functions using basic references work
-	printf("%d %d %d %d\n", toref(&x), toref(p1), toptr(r1) == toptr(x), toptr(r1) == &x);
+	sout | toref( &x ) | toref( p1 ) | toptr( r1 ) == toptr( x ) | toptr( r1 ) == &x;
 
 	changeRef( x );
 	changeRef( y );
 	changeRef( z );
-	printf("%d %d %d\n", x, y, z);
+	sout | x | y | z;
 	changeRef( r1 );
-	printf("%d %d\n", r1, x);
+	sout | r1 | x;
 
-	r3 = 6;                               // change x, ***r3
-	printf("x = %d ; x2 = %d\n", x, x2);  // check that x was changed
-	&r3 = &x2;                            // change r1 to refer to x2, (&*)**r3
-	r3 = 999;                             // modify x2
-	printf("x = %d ; x2 = %d\n", x, x2);  // check that x2 was changed
-	((int**&)&&r3) = p2;                  // change r2, (&(&*)*)*r3, ensure explicit cast to reference works
-	r3 = 12345;                           // modify x
-	printf("x = %d ; x2 = %d\n", x, x2);  // check that x was changed
-	&&&r3 = p3;                           // change r3 to p3, (&(&(&*)*)*)r3
-	((int&)r3) = 22222;                   // modify x, ensure explicit cast to reference works
-	printf("x = %d ; x2 = %d\n", x, x2);  // check that x was changed
+	r3 = 6;												// change x, ***r3
+	sout | "x = " | x | " ; x2 = " | x2;				// check that x was changed
+	&r3 = &x2;											// change r1 to refer to x2, (&*)**r3
+	r3 = 999;											// modify x2
+	sout | "x = " | x | " ; x2 = " | x2;				// check that x2 was changed
+	((int**&)&&r3) = p2;								// change r2, (&(&*)*)*r3, ensure explicit cast to reference works
+	r3 = 12345;											// modify x
+	sout | "x = " | x | " ; x2 = " | x2;				// check that x was changed
+	&&&r3 = p3;											// change r3 to p3, (&(&(&*)*)*)r3
+	((int&)r3) = 22222;									// modify x, ensure explicit cast to reference works
+	sout | "x = " | x | " ; x2 = " | x2;					// check that x was changed
 
 	// test that reference members are not implicitly constructed/destructed/assigned
@@ -102,15 +104,15 @@
 		struct S { double x, y; };
 		void f( int & i, int & j, S & s, int v[] ) {
-			printf("%d %d { %g, %g }, [%d, %d, %d]\n", i, j, s.[x, y], v[0], v[1], v[2]);
+			sout | i | j | "{ " | s.[x, y] | " }," | "[" | v[0] | "," | v[1] | "," | v[2] | "]";
 		}
-		void g(int & i) { printf("%d\n", i); }
-		void h(int &&& i) { printf("%d\n", i); }
+		void g(int & i) { sout | i; }
+		void h(int &&& i) { sout | i; }
 
-		int &&& r = 3;  // rvalue to reference
+		int &&& r = 3;									// rvalue to reference
 		int i = r;
-		printf("%d %d\n", i, r);  // both 3
+		sout | i | r;									// both 3
 
-		g( 3 );          // rvalue to reference
-		h( (int &&&)3 ); // rvalue to reference
+		g( 3 );											// rvalue to reference
+		h( (int &&&)3 );								// rvalue to reference
 
 		int a = 5, b = 4;
