Index: src/tests/.expect/identity.txt
===================================================================
--- src/tests/.expect/identity.txt	(revision 82ff5845369a0f55575cc8ec50be83e3b1c986c2)
+++ src/tests/.expect/identity.txt	(revision 82ff5845369a0f55575cc8ec50be83e3b1c986c2)
@@ -0,0 +1,13 @@
+char			z
+signed int		4
+unsigned int		4
+signed long int		4
+unsigned long int	4
+signed long long int	4
+unsigned long long int	4
+float			4.1
+double			4.1
+long double		4.1
+float _Complex		-4.1-2i
+double _Complex		-4.1-2i
+long double _Complex	-4.1-2i
Index: src/tests/.expect/io.txt
===================================================================
--- src/tests/.expect/io.txt	(revision 8f8af30621e5ab84b747ccebd5eb0485d0310dad)
+++ src/tests/.expect/io.txt	(revision 82ff5845369a0f55575cc8ec50be83e3b1c986c2)
@@ -4,4 +4,16 @@
 123
 
+x (1 x [2 x {3 x =4 x $5 x £6 x ¥7 x ¡8 x ¿9 x «10
+1, x 2. x 3; x 4! x 5? x 6% x 7¢ x 8» x 9) x 10] x 11} x
+x`1`x'2'x"3"x:4:x 5 x	6	x
+7
+x
+8
+x
+9
+x
+10
+x
+x ( 1 ) x 2 , x 3 :x: 4
 A 
 1 2 3 4 5 6 7 8
@@ -18,14 +30,18 @@
 abc, $xyz
 
-v(27 v[27 v{27 $27 =27 £27 ¥27 ¡27 ¿27 «27
-25, 25. 25: 25; 25! 25? 25% 25¢ 25» 25) 25] 25}
-25'27 25`27 25"27 25 27 25
-27 25
-27 25
-27 25	27 25
-27
+1, 2, 3, 4
+1, $2, $3 ", $"
+1 2 3 " "
+ 1 2 3
+12 3
+123
+1 23
+1 2 3
+1 2 3 4 " "
+1, 2, 3, 4 ", "
+1, 2, 3, 4
 3, 4, a, 7.2
 3, 4, a, 7.2
 3 4 a 7.2
- 3 4 a 7.234a7.2 3 4 a 7.2
+ 3 4 a 7.234a7.23 4 a 7.2
 3-4-a-7.2^3^4-3-4-a-7.2
Index: src/tests/identity.c
===================================================================
--- src/tests/identity.c	(revision 82ff5845369a0f55575cc8ec50be83e3b1c986c2)
+++ src/tests/identity.c	(revision 82ff5845369a0f55575cc8ec50be83e3b1c986c2)
@@ -0,0 +1,42 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// identity.c -- 
+//
+// Author           : Peter A. Buhr
+// Created On       : Wed May 27 17:56:53 2015
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Jun  8 08:21:32 2017
+// Update Count     : 18
+//
+
+#include <fstream>
+
+forall( otype T )
+T identity( T t ) {
+	return t;
+}
+
+int main() {
+	sout | "char\t\t\t"					| identity( 'z' ) | endl;
+	sout | "signed int\t\t"				| identity( 4 ) | endl;
+	sout | "unsigned int\t\t"			| identity( 4u ) | endl;
+	sout | "signed long int\t\t" 		| identity( 4l ) | endl;
+	sout | "unsigned long int\t" 		| identity( 4ul ) | endl;
+	sout | "signed long long int\t"		| identity( 4ll ) | endl;
+	sout | "unsigned long long int\t"	| identity( 4ull ) | endl;
+	sout | "float\t\t\t" 				| identity( 4.1f ) | endl;
+	sout | "double\t\t\t"				| identity( 4.1 ) | endl;
+	sout | "long double\t\t"			| identity( 4.1l ) | endl;
+	sout | "float _Complex\t\t"			| identity( -4.1F-2.0iF ) | endl;
+	sout | "double _Complex\t\t"		| identity( -4.1D-2.0iD ) | endl;
+	sout | "long double _Complex\t"		| identity( -4.1L-2.0iL ) | endl;
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa identity.c" //
+// End: //
Index: src/tests/io.c
===================================================================
--- src/tests/io.c	(revision 8f8af30621e5ab84b747ccebd5eb0485d0310dad)
+++ src/tests/io.c	(revision 82ff5845369a0f55575cc8ec50be83e3b1c986c2)
@@ -10,6 +10,6 @@
 // Created On       : Wed Mar  2 16:56:02 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Mar 21 22:36:06 2017
-// Update Count     : 48
+// Last Modified On : Thu Jun  8 09:52:10 2017
+// Update Count     : 51
 // 
 
@@ -17,5 +17,5 @@
 
 int main() {
-	char c;														// basic types
+	char c;												// basic types
 	short int si;
 	unsigned short int usi;
@@ -32,5 +32,6 @@
 	double _Complex dc;
 	long double _Complex ldc;
-	char s1[10], s2[10];
+	enum { size = 10 };
+	char s1[size], s2[size];
 
 	int x = 3, y = 5, z = 7;
@@ -41,79 +42,100 @@
 	sout | endl;
 
-	ifstream in;												// create / open file
+	sout
+		// opening delimiters
+		| "x (" | 1
+		| "x [" | 2
+		| "x {" | 3
+		| "x =" | 4
+		| "x $" | 5
+		| "x £" | 6
+		| "x ¥" | 7
+		| "x ¡" | 8
+		| "x ¿" | 9
+		| "x «" | 10
+		| endl;
+	sout
+		// closing delimiters
+		| 1 | ", x"
+		| 2 | ". x"
+		| 3 | "; x"
+		| 4 | "! x"
+		| 5 | "? x"
+		| 6 | "% x"
+		| 7 | "¢ x"
+		| 8 | "» x"
+		| 9 | ") x"
+		| 10 | "] x"
+		| 11 | "} x"
+		| endl;
+	sout
+		// opening-closing delimiters
+		| "x`" | 1 | "`x'" | 2
+		| "'x\"" | 3 | "\"x:" | 4
+		| ":x " | 5 | " x\t" | 6
+		| "\tx\f" | 7 | "\fx\v" | 8
+		| "\vx\n" | 9 | "\nx\r" | 10
+		| "\rx" |
+		endl;
+	sout | "x ( " | 1 | " ) x" | 2 | " , x" | 3 | " :x: " | 4 | endl;
+
+	ifstream in;										// create / open file
 	open( &in, "io.data", "r" );
 
-	&in | &c													// character
-		| &si | &usi | &i | &ui | &li | &uli | &lli | &ulli		// integral
-		| &f | &d | &ld											// floating point
-		| &fc | &dc | &ldc										// floating-point complex
-		| cstr( s1 ) | cstr( s2, 10 );							// C string, length unchecked and checked
+	&in | &c											// character
+		| &si | &usi | &i | &ui | &li | &uli | &lli | &ulli	// integral
+		| &f | &d | &ld									// floating point
+		| &fc | &dc | &ldc								// floating-point complex
+		| cstr( s1 ) | cstr( s2, size );				// C string, length unchecked and checked
 
-	sout | c | ' ' | endl										// character
-		 | si | usi | i | ui | li | uli | lli | ulli | endl		// integral
-		 | f | d | ld | endl									// floating point
-		 | fc | dc | ldc | endl;								// complex
+	sout | c | ' ' | endl								// character
+		| si | usi | i | ui | li | uli | lli | ulli | endl // integral
+		| f | d | ld | endl								// floating point
+		| fc | dc | ldc | endl;							// complex
 	sout | endl;
-	sout | f | "" | d | "" | ld | endl							// floating point without separator
-		 | sepDisable | fc | dc | ldc | sepEnable | endl		// complex without separator
-		 | sepOn | s1 | sepOff | s2 | endl						// local separator removal
-		 | s1 | "" | s2 | endl;									// C string without separator
+	sout | f | "" | d | "" | ld | endl					// floating point without separator
+		| sepDisable | fc | dc | ldc | sepEnable | endl	// complex without separator
+		| sepOn | s1 | sepOff | s2 | endl				// local separator removal
+		| s1 | "" | s2 | endl;							// C string without separator
 	sout | endl;
 
-	sepSet( sout, ", $" );										// change separator, maximum of 15 characters
+	sepSet( sout, ", $" );								// change separator, maximum of 15 characters
 	sout | f | d | ld | endl
-		 | fc | dc | ldc | endl
-		 | s1 | s2 | endl;
+		| fc | dc | ldc | endl
+		| s1 | s2 | endl;
 	sout | endl;
+
+	[int, int] t1 = [1, 2], t2 = [3, 4];
+	sout | t1 | t2 | endl;								// print tuple
+
 	sepSet( sout, " " );
+	sepSet( sout, ", $" );								// set separator from " " to ", $"
+	sout | 1 | 2 | 3 | " \"" | sepGet( sout ) | "\"" | endl;
+	sepSet( sout, " " );								// reset separator to " "
+	sout | 1 | 2 | 3 | " \"" | sepGet( sout ) | "\"" | endl;
 
-	sout
-		// opening delimiters
-		| "v(" | 27
-		| "v[" | 27
-		| "v{" | 27
-		| "$" | 27
-		| "=" | 27
-		| "£" | 27
-		| "¥" | 27
-		| "¡" | 27
-		| "¿" | 27
-		| "«" | 27
-		| endl
-		// closing delimiters
-		| 25 | ","
-		| 25 | "."
-		| 25 | ":"
-		| 25 | ";"
-		| 25 | "!"
-		| 25 | "?"
-		| 25 | "%"
-		| 25 | "¢"
-		| 25 | "»"
-		| 25 | ")"
-		| 25 | "]"
-		| 25 | "}"
-		| endl
-		// opening-closing delimiters
-		| 25 | "'" | 27
-		| 25 | "`" | 27
-		| 25 | "\"" | 27
-		| 25 | " " | 27
-		| 25 | "\f" | 27
-		| 25 | "\n" | 27
-		| 25 | "\r" | 27
-		| 25 | "\t" | 27
-		| 25 | "\v" | 27
-		| endl;
+	sout | sepOn | 1 | 2 | 3 | sepOn | endl;			// separator at start of line
+	sout | 1 | sepOff | 2 | 3 | endl;					// locally turn off implicit separator
 
-	[int, int, const char *, double] t = { 3, 4, "a", 7.2 };
+	sout | sepDisable | 1 | 2 | 3 | endl;				// globally turn off implicit separation
+	sout | 1 | sepOn | 2 | 3 | endl;					// locally turn on implicit separator
+	sout | sepEnable | 1 | 2 | 3 | endl;				// globally turn on implicit separation
+
+	sepSetTuple( sout, " " );							// set tuple separator from ", " to " "
+	sout | t1 | t2 | " \"" | sepGetTuple( sout ) | "\"" | endl;
+	sepSetTuple( sout, ", " );							// reset tuple separator to ", "
+	sout | t1 | t2 | " \"" | sepGetTuple( sout ) | "\"" | endl;
+
+	sout | t1 | t2 | endl;								// print tuple
+
+	[int, int, const char *, double] t3 = { 3, 4, "a", 7.2 };
 	sout | [ 3, 4, "a", 7.2 ] | endl;
-	sout | t | endl;
+	sout | t3 | endl;
 	sepSetTuple( sout, " " );
-	sout | t | endl;
-	sout | sepOn | t | sepDisable | t | sepEnable | t | endl;
+	sout | t3 | endl;
+	sout | sepOn | t3 | sepDisable | t3 | sepEnable | t3 | endl;
 	sepSet( sout, "^" );
 	sepSetTuple( sout, "-" );
-	sout | t | 3 | 4 | t | endl;
+	sout | t3 | 3 | 4 | t3 | endl;
 }
 
