Index: src/tests/io.c
===================================================================
--- src/tests/io.c	(revision cb914379c23218fde6d6aaf354fb109d6e02f15c)
+++ src/tests/io.c	(revision bb1cd95b1669c150547e9c6ca1c0ac29ffadf57a)
@@ -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;
 }
 
