Index: src/tests/.expect/32/math.txt
===================================================================
--- src/tests/.expect/32/math.txt	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/.expect/32/math.txt	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -2,5 +2,5 @@
 remainder:-1 -1 -1
 remquo:7 0.0999999 7 0.1 7 0.0999999999999999999
-div:7 0.0999999 7 0.1 7 0.0999999999999999999
+div:7, 0.2 7, 0.2 7, 0.2
 fma:-2 -2 -2
 fdim:2 2 2
@@ -9,4 +9,7 @@
 exp2:2 2 2
 expm1:1.71828 1.71828182845905 1.71828182845904524
+pow:1 1 1 0.273957+0.583701i 0.273957253830121+0.583700758758615i 0.273957253830121071+0.583700758758614628i
+16 256
+912673 256 64 -64 0.015625 -0.015625 18.3791736799526 0.264715-1.1922i
 log:0 0 0 0.346574+0.785398i 0.346573590279973+0.785398163397448i 0.346573590279972655+0.78539816339744831i
 log2:3 3 3
@@ -18,5 +21,4 @@
 cbrt:3 3 3
 hypot:1.41421 1.4142135623731 1.41421356237309505
-pow:1 1 1 0.273957+0.583701i 0.273957253830121+0.583700758758615i 0.273957253830121071+0.583700758758614628i
 sin:0.841471 0.841470984807897 0.841470984807896507 1.29846+0.634964i 1.29845758141598+0.634963914784736i 1.29845758141597729+0.634963914784736108i
 cos:0.540302 0.54030230586814 0.540302305868139717 0.83373-0.988898i 0.833730025131149-0.988897705762865i 0.833730025131149049-0.988897705762865096i
@@ -53,5 +55,7 @@
 frexp:0.5 3 0.5 3 0.5 3
 ldexp:8 8 8
-modf:2 0.3 2 0.3 2 0.3 nextafter:2 2 2
+modf:2 0.3 2 0.3 2 0.3
+modf:2, 0.3 2, 0.3 2, 0.3
+nextafter:2 2 2
 nexttoward:2 2 2
 scalbn:16 16 16
Index: src/tests/.expect/64/math.txt
===================================================================
--- src/tests/.expect/64/math.txt	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/.expect/64/math.txt	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -2,5 +2,5 @@
 remainder:-1 -1 -1
 remquo:7 0.0999999 7 0.1 7 0.0999999999999999999
-div:7 0.0999999 7 0.1 7 0.0999999999999999999
+div:7, 0.2 7, 0.2 7, 0.2
 fma:-2 -2 -2
 fdim:2 2 2
@@ -9,4 +9,7 @@
 exp2:2 2 2
 expm1:1.71828 1.71828182845905 1.71828182845904524
+pow:1 1 1 0.273957+0.583701i 0.273957253830121+0.583700758758615i 0.273957253830121071+0.583700758758614627i
+16 256
+912673 256 64 -64 0.015625 -0.015625 18.3791736799526 0.264715-1.1922i
 log:0 0 0 0.346574+0.785398i 0.346573590279973+0.785398163397448i 0.346573590279972655+0.78539816339744831i
 log2:3 3 3
@@ -18,5 +21,4 @@
 cbrt:3 3 3
 hypot:1.41421 1.4142135623731 1.41421356237309505
-pow:1 1 1 0.273957+0.583701i 0.273957253830121+0.583700758758615i 0.273957253830121071+0.583700758758614628i
 sin:0.841471 0.841470984807897 0.841470984807896507 1.29846+0.634964i 1.29845758141598+0.634963914784736i 1.29845758141597729+0.634963914784736108i
 cos:0.540302 0.54030230586814 0.540302305868139717 0.83373-0.988898i 0.833730025131149-0.988897705762865i 0.833730025131149049-0.988897705762865096i
@@ -53,5 +55,7 @@
 frexp:0.5 3 0.5 3 0.5 3
 ldexp:8 8 8
-modf:2 0.3 2 0.3 2 0.3 nextafter:2 2 2
+modf:2 0.3 2 0.3 2 0.3
+modf:2, 0.3 2, 0.3 2, 0.3
+nextafter:2 2 2
 nexttoward:2 2 2
 scalbn:16 16 16
Index: src/tests/.expect/concurrent/sched-int-barge.txt
===================================================================
--- src/tests/.expect/concurrent/sched-int-barge.txt	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ 	(revision )
@@ -1,100 +1,0 @@
-1000
-2000
-3000
-4000
-5000
-6000
-7000
-8000
-9000
-10000
-11000
-12000
-13000
-14000
-15000
-16000
-17000
-18000
-19000
-20000
-21000
-22000
-23000
-24000
-25000
-26000
-27000
-28000
-29000
-30000
-31000
-32000
-33000
-34000
-35000
-36000
-37000
-38000
-39000
-40000
-41000
-42000
-43000
-44000
-45000
-46000
-47000
-48000
-49000
-50000
-51000
-52000
-53000
-54000
-55000
-56000
-57000
-58000
-59000
-60000
-61000
-62000
-63000
-64000
-65000
-66000
-67000
-68000
-69000
-70000
-71000
-72000
-73000
-74000
-75000
-76000
-77000
-78000
-79000
-80000
-81000
-82000
-83000
-84000
-85000
-86000
-87000
-88000
-89000
-90000
-91000
-92000
-93000
-94000
-95000
-96000
-97000
-98000
-99000
-100000
Index: src/tests/.expect/div.txt
===================================================================
--- src/tests/.expect/div.txt	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
+++ src/tests/.expect/div.txt	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -0,0 +1,3 @@
+div 2, 3 2, 3 2, 3
+div 2, 3
+div 2, 3
Index: src/tests/alloc.c
===================================================================
--- src/tests/alloc.c	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/alloc.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -10,16 +10,14 @@
 // Created On       : Wed Feb  3 07:56:22 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jun  2 15:13:03 2017
-// Update Count     : 316
-//
-
-#include <assert>
-extern "C" {
-#include <malloc.h>                                     // malloc_usable_size
-#include <stdint.h>                                     // uintptr_t
-#include <stdlib.h>                                     // posix_memalign
-} // extern
+// Last Modified On : Thu Jul 20 16:01:10 2017
+// Update Count     : 318
+//
+
+#include <assert.h>
+#include <malloc.h>										// malloc_usable_size
+#include <stdint.h>										// uintptr_t
+#include <stdlib.h>										// posix_memalign
 #include <fstream>
-#include <stdlib>                                       // access C malloc, realloc
+#include <stdlib>											// access C malloc, realloc
 
 int * foo( int * p, int c ) { return p; }
Index: src/tests/attributes.c
===================================================================
--- src/tests/attributes.c	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/attributes.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -1,3 +1,2 @@
-//                               -*- Mode: C -*- 
 // 
 // Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo
@@ -11,6 +10,6 @@
 // Created On       : Mon Feb  6 16:07:02 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Feb  6 16:08:21 2017
-// Update Count     : 2
+// Last Modified On : Fri Jul 21 23:05:52 2017
+// Update Count     : 3
 // 
 
Index: src/tests/avltree/avl-private.h
===================================================================
--- src/tests/avltree/avl-private.h	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/avltree/avl-private.h	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -1,3 +1,3 @@
-#ifndef AVL_PRIVATE_H
+#pragma once
 #include "avl.h"
 
@@ -14,4 +14,2 @@
 forall(otype K | Comparable(K), otype V)
 int height(tree(K, V) * t);
-
-#endif
Index: src/tests/avltree/avl.h
===================================================================
--- src/tests/avltree/avl.h	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/avltree/avl.h	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -1,4 +1,3 @@
-#ifndef AVL_TREE_H
-#define AVL_TREE_H
+#pragma once
 
 extern "C" {
@@ -104,5 +103,2 @@
 //     printTree(t, 0);
 // }
-
-
-#endif
Index: src/tests/designations.c
===================================================================
--- src/tests/designations.c	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/designations.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -9,7 +9,7 @@
 // Author           : Rob Schluntz
 // Created On       : Thu Jun 29 15:26:36 2017
-// Last Modified By : Rob Schluntz
-// Last Modified On : Thu Jun 29 15:27:05 2017
-// Update Count     : 2
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Jul 27 11:46:35 2017
+// Update Count     : 3
 //
 
@@ -89,4 +89,17 @@
 };
 
+struct Fred {
+    double i[3];
+    int j;
+    struct Mary {
+	struct Jane {
+	    double j;
+	} j;
+	double i;
+    } m;
+};
+struct Fred s1 @= { .m.j : 3 };
+struct Fred s2 @= { .i : { [2] : 2 } };
+
 int main() {
 	// simple designation case - starting from beginning of structure, leaves ptr default-initialized (zero)
@@ -199,5 +212,6 @@
 	};
 #endif
-
+	// array designation
+	int i[2] = { [1] : 3 };
 	// allowed to have 'too many' initialized lists - essentially they are ignored.
 	int i1 = { 3 };
@@ -240,4 +254,7 @@
 	const char * str0 = "hello";
 	char str1[] = "hello";
+	const char c1[] = "abc";
+	const char c2[] = { 'a', 'b', 'c' };
+	const char c3[][2] = { { 'a', 'b' }, { 'c', 'd'}, { 'c', 'd'} };
 }
 
Index: src/tests/div.c
===================================================================
--- src/tests/div.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
+++ src/tests/div.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -0,0 +1,36 @@
+//                               -*- Mode: C -*- 
+// 
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+// 
+// div.c -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Tue Aug  8 16:28:43 2017
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Aug  9 17:09:40 2017
+// Update Count     : 16
+// 
+
+#include <fstream>
+#include <stdlib>										// div
+
+struct T { int i; };
+T ?/?( T t1, T t2 ) { return t1.i / t2.i; }
+T ?%?( T t1, T t2 ) { return t1.i % t2.i; }
+ofstream * ?|?( ofstream * os, T t ) { return os | t.i; }
+
+int main( void ) {
+	sout | "div" | div( 13, 5 ) | div( 13L, 5L ) | div( 13LL, 5LL ) | endl;
+	short s1 = 13, s2 = 5;
+	sout | "div" | div( s1, s2 ) | endl;
+	T t1 = { 13 }, t2 = { 5 };
+	sout | "div" | div( t1, t2 ) | endl;				// polymorphic div
+} // main
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa div.c" //
+// End: //
Index: src/tests/except-0.c
===================================================================
--- src/tests/except-0.c	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/except-0.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -6,4 +6,5 @@
 #include <stdbool.h>
 
+// Local type to mark exits from scopes. (see ERROR)
 struct signal_exit {
 	const char * area;
@@ -19,5 +20,27 @@
 }
 
-void terminate(int except_value) {
+
+// Local Exception Types and manual vtable types.
+//#define TRIVIAL_EXCEPTION(name) //TRIVAL_EXCEPTION(yin)
+struct yin;
+struct yin_vtable {
+	struct exception_t_vtable const * parent;
+	size_t size;
+    void (*copy)(yin *this, yin * other);
+    void (*free)(yin *this);
+    const char (*msg)(yin *this);
+};
+struct yin {
+	struct yin_vtable const * parent;
+};
+void yin_msg(yin) {
+	return "in";
+}
+yin_vtable _yin_vtable_instance = {
+	&_exception_t_vtable_instance, sizeof(yin), ?{}, ^?{}, yin_msg
+}
+
+
+void terminate(exception * except_value) {
 	signal_exit a = {"terminate function"};
 	throw except_value;
@@ -25,5 +48,5 @@
 }
 
-void resume(int except_value) {
+void resume(exception * except_value) {
 	signal_exit a = {"resume function"};
 	throwResume except_value;
Index: src/tests/except-1.c
===================================================================
--- src/tests/except-1.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
+++ src/tests/except-1.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -0,0 +1,68 @@
+// Draft memory management test. (remember -fexceptions)
+
+#include <stdio.h>
+
+int main()
+{
+	try {
+		throw 3;
+	}
+	catch( 3 ) {
+		printf("First Caught\n");
+		try {
+			throw 4;
+		}
+		catch( 4 ) {
+			printf("Both Caught\n");
+		}
+	}
+	printf("Part A Complete\n");
+
+	try {
+		try {
+			throw 2;
+		}
+		catch( 2 ) {
+			printf("First Catch and rethrow\n");
+			throw;
+		}
+	}
+	catch( 2 ) {
+		printf("Second Catch\n");
+	}
+	printf("Part B Complete\n");
+
+	try {
+		try {
+			throw 5;
+		}
+		catch( 5 ) {
+			printf("Throw before cleanup\n");
+			throw 6;
+		}
+	}
+	catch( 6 ) {
+		printf("Catch after cleanup\n");
+	}
+	printf("Part C Complete\n");
+
+	try {
+		try {
+			throw 7;
+		}
+		catch( 7 ) {
+			printf("Caught initial throw.\n");
+			try {
+				throw 8;
+			}
+			catch( 8 ) {
+				printf("Caught intermediate throw.\n");
+			}
+			throw;
+		}
+	}
+	catch( 7 ) {
+		printf("Caught final throw.\n");
+	}
+	printf("Part D Complete\n");
+}
Index: src/tests/except-2.c
===================================================================
--- src/tests/except-2.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
+++ src/tests/except-2.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -0,0 +1,120 @@
+// New draft of exception tests.
+
+
+#include <string.h>
+
+// Local Exception Types and manual vtable types.
+#define BASE_EXCEPT __cfaehm__base_exception_t
+#define TABLE(name) name##_vtable
+#define INSTANCE(name) _##name##_vtable_instance
+#define TRIVIAL_EXCEPTION(name) \
+struct name; \
+struct TABLE(name) { \
+	struct __cfaehm__base_exception_t_vtable const * parent; \
+	size_t size; \
+	void (*copy)(name *this, name * other); \
+	void (*free)(name *this); \
+	const char * (*msg)(name *this); \
+}; \
+extern TABLE(name) INSTANCE(name); \
+struct name { \
+	struct TABLE(name) const * virtual_table; \
+}; \
+const char * name##_msg(name * this) { \
+	return #name; \
+} \
+void name##_copy(name * this, name * other) { \
+	this->virtual_table = other->virtual_table; \
+} \
+TABLE(name) INSTANCE(name) @= { \
+	.parent : &INSTANCE(__cfaehm__base_exception_t), \
+	.size : sizeof(name), .copy : name##_copy, \
+	.free : ^?{}, .msg : name##_msg \
+}; \
+void ?{}(name * this) { \
+	this->virtual_table = &INSTANCE(name); \
+}
+TRIVIAL_EXCEPTION(yin)
+TRIVIAL_EXCEPTION(yang)
+
+struct num_error;
+struct num_error_vtable {
+	struct exception_t_vtable const * parent;
+	size_t size;
+	void (*copy)(num_error *this, num_error * other);
+	void (*free)(num_error *this);
+	const char * (*msg)(num_error *this);
+	int (*code)(num_error *this);
+};
+extern num_error_vtable INSTANCE(num_error);
+struct num_error {
+	struct num_error_vtable const * virtual_table;
+	char * msg;
+	int num;
+};
+void num_error_msg(num_error * this) {
+	if ( ! this->msg ) {
+		const char * base = "Num Error with code: X";
+		this->msg = strdup( base );
+	}
+	this->msg[21] = '0' + this->num;
+	return this->msg;
+}
+void ?{}(num_error * this, int num) {
+	this->virtual_table = &_num_error_vtable_instance;
+	this->msg = 0;
+	this->num = num;
+}
+void ?{}(num_error * this, num_error * other) {
+	this->virtual_table = other->virtual_table;
+	this->msg = 0;
+	this->num = other->num;
+}
+void ^?{}(num_error * this) {
+	if( this->msg ) free( this->msg );
+}
+int num_error_code( num_error * this ) {
+	return this->num;
+}
+num_error_vtable _num_error_vtable_instance @= {
+	&___cfaehm__base_exception_t_vtable_instance,
+	sizeof(num_error), ?{}, ^?{},
+	num_error_msg, num_error_code
+};
+
+
+// Test simple throwing, matching and catching.
+void throw_catch() {
+	try {
+		yin black;
+		throw (BASE_EXCEPT *)&black;
+	} catch( yin * error ) {
+		printf("throw yin caught.\n");
+	}
+
+	try {
+		yang white;
+		throwResume (BASE_EXCEPT *)&white;
+		printf("> throwResume returned.\n");
+	} catchResume( yang * error ) {
+		printf("throwResume yang caught <");
+	}
+
+	/* Conditional catches are still a work in progress.
+	try {
+		num_error x = { 2 };
+		throw (struct exception_t *)&x;
+	}
+	catch (num_error * error0 ; 3 == error0->virtual_table->code( error0 ) ) {
+		printf("exception at %p\n", error0 );
+		printf("Should not be printed.\n");
+	}
+	catch (num_error * error1 ; 2 == error1->virtual_table->code( error1 ) ) {
+		printf("Should be printed.\n");
+	}*/
+}
+
+int main (int argc, char * argv[]) {
+	throw_catch();
+	return 0;
+}
Index: src/tests/gmp.c
===================================================================
--- src/tests/gmp.c	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/gmp.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -10,6 +10,6 @@
 // Created On       : Tue Apr 19 08:55:51 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 24 22:05:38 2017
-// Update Count     : 540
+// Last Modified On : Thu Jul 13 16:35:01 2017
+// Update Count     : 541
 // 
 
@@ -95,4 +95,4 @@
 // Local Variables: //
 // tab-width: 4 //
-// compile-command: "cfa gmp.c -l gmp" //
+// compile-command: "cfa gmp.c -lgmp" //
 // End: //
Index: src/tests/math.c
===================================================================
--- src/tests/math.c	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/math.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -10,6 +10,6 @@
 // Created On       : Fri Apr 22 14:59:21 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 24 13:04:33 2017
-// Update Count     : 71
+// Last Modified On : Wed Aug  9 07:20:49 2017
+// Update Count     : 77
 // 
 
@@ -31,10 +31,5 @@
 	l = remquo( 3.6L, 0.5L, &quot );
 	sout | quot | l | endl;
-	f = div( 3.6F, 0.5F, &quot );
-	sout | "div:" | quot | f;
-	d = div( 3.6D, 0.5F, &quot );
-	sout | quot | d;
-	l = div( 3.6L, 0.5L, &quot );
-	sout | quot | l | endl;
+	sout | "div:" | div( 3.6F, 0.5F ) | div( 3.6D, 0.5D ) | div( 3.6L, 0.5L ) | endl;
 	sout | "fma:" | fma( 3.0F, -1.0F, 1.0F ) | fma( 3.0D, -1.0D, 1.0D ) | fma( 3.0L, -1.0L, , 1.0L ) | endl;
 	sout | "fdim:" | fdim( 1.0F, -1.0F ) | fdim( 1.0D, -1.0D ) | fdim( 1.0L, -1.0L ) | endl;
@@ -46,4 +41,14 @@
 	sout | "exp2:" | exp2( 1.0F ) | exp2( 1.0D ) | exp2( 1.0L ) | endl;
 	sout | "expm1:" | expm1( 1.0F ) | expm1( 1.0D ) | expm1( 1.0L ) | endl;
+	sout | "pow:" | pow( 1.0F, 1.0F ) | pow( 1.0D, 1.0D ) | pow( 1.0L, 1.0L ) | pow( 1.0F+1.0FI, 1.0F+1.0FI ) | pow( 1.0D+1.0DI, 1.0D+1.0DI ) | pow( 1.0DL+1.0LI, 1.0DL+1.0LI ) | endl;
+
+	int b = 4;
+	unsigned int e = 2;
+    b \= e;
+    sout | b | b \ e | endl;
+    sout | 'a' \ 3u | 2 \ 8u | 4 \ 3u | -4 \ 3u | 4 \ -3 | -4 \ -3 | 4.0 \ 2.1 | (1.0f+2.0fi) \ (3.0f+2.0fi) | endl;
+
+	//---------------------- Logarithm ----------------------
+
 	sout | "log:" | log( 1.0F ) | log( 1.0D ) | log( 1.0L ) | log( 1.0F+1.0FI ) | log( 1.0D+1.0DI ) | log( 1.0DL+1.0LI ) | endl;
 	sout | "log2:" | log2( 8.0F ) | log2( 8.0D ) | log2( 8.0L ) | endl;
@@ -53,10 +58,7 @@
 	sout | "logb:" | logb( 8.0F ) | logb( 8.0D ) | logb( 8.0L ) | endl;
 
-	//---------------------- Power ----------------------
-
 	sout | "sqrt:" | sqrt( 1.0F ) | sqrt( 1.0D ) | sqrt( 1.0L ) | sqrt( 1.0F+1.0FI ) | sqrt( 1.0D+1.0DI ) | sqrt( 1.0DL+1.0LI ) | endl;
 	sout | "cbrt:" | cbrt( 27.0F ) | cbrt( 27.0D ) | cbrt( 27.0L ) | endl;
 	sout | "hypot:" | hypot( 1.0F, -1.0F ) | hypot( 1.0D, -1.0D ) | hypot( 1.0L, -1.0L ) | endl;
-	sout | "pow:" | pow( 1.0F, 1.0F ) | pow( 1.0D, 1.0D ) | pow( 1.0L, 1.0L ) | pow( 1.0F+1.0FI, 1.0F+1.0FI ) | pow( 1.0D+1.0DI, 1.0D+1.0DI ) | pow( 1.0DL+1.0LI, 1.0DL+1.0LI ) | endl;
 
 	//---------------------- Trigonometric ----------------------
@@ -130,5 +132,6 @@
 	sout | di | d;
 	l = modf( 2.3L, &ldi );
-	sout | ldi | l;
+	sout | ldi | l | endl;
+	sout | "modf:" | modf( 2.3F ) | modf( 2.3D ) | modf( 2.3L ) | endl;
 	sout | "nextafter:" | nextafter( 2.0F, 3.0F ) | nextafter( 2.0D, 3.0D ) | nextafter( 2.0L, 3.0L ) | endl;
 	sout | "nexttoward:" | nexttoward( 2.0F, 3.0F ) | nexttoward( 2.0D, 3.0D ) | nexttoward( 2.0L, 3.0L ) | endl;
Index: src/tests/maybe.c
===================================================================
--- src/tests/maybe.c	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/maybe.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -9,10 +9,10 @@
 // Author           : Andrew Beach
 // Created On       : Thr May 25 16:02:00 2017
-// Last Modified By : Andrew Beach
-// Last Modified On : Fri May 16 15:43:00 2017
-// Update Count     : 0
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Jul 20 15:24:07 2017
+// Update Count     : 1
 //
 
-#include <assert>
+#include <assert.h>
 #include <containers/maybe>
 
Index: src/tests/preempt_longrun/Makefile.am
===================================================================
--- src/tests/preempt_longrun/Makefile.am	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/preempt_longrun/Makefile.am	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -25,9 +25,12 @@
 CC = @CFA_BINDIR@/@CFA_NAME@
 
-TESTS = barge block create disjoint enter enter3 processor stack wait yield
+TESTS = block create disjoint enter enter3 processor stack wait yield
 
 .INTERMEDIATE: ${TESTS}
 
 all-local: ${TESTS:=.run}
+
+clean-local:
+	rm -f ${TESTS}
 
 % : %.c ${CC}
Index: src/tests/preempt_longrun/Makefile.in
===================================================================
--- src/tests/preempt_longrun/Makefile.in	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/preempt_longrun/Makefile.in	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -453,5 +453,5 @@
 REPEAT = ${abs_top_srcdir}/tools/repeat -s
 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -debug -O2 -DPREEMPTION_RATE=${preempt}
-TESTS = barge block create disjoint enter enter3 processor stack wait yield
+TESTS = block create disjoint enter enter3 processor stack wait yield
 all: all-am
 
@@ -635,11 +635,4 @@
 	        TEST_LOGS="$$log_list"; \
 	exit $$?
-barge.log: barge
-	@p='barge'; \
-	b='barge'; \
-	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
-	--log-file $$b.log --trs-file $$b.trs \
-	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
-	"$$tst" $(AM_TESTS_FD_REDIRECT)
 block.log: block
 	@p='block'; \
@@ -790,5 +783,5 @@
 clean: clean-am
 
-clean-am: clean-generic mostlyclean-am
+clean-am: clean-generic clean-local mostlyclean-am
 
 distclean: distclean-am
@@ -857,5 +850,5 @@
 
 .PHONY: all all-am all-local check check-TESTS check-am clean \
-	clean-generic cscopelist-am ctags-am distclean \
+	clean-generic clean-local cscopelist-am ctags-am distclean \
 	distclean-generic distdir dvi dvi-am html html-am info info-am \
 	install install-am install-data install-data-am install-dvi \
@@ -875,4 +868,7 @@
 all-local: ${TESTS:=.run}
 
+clean-local:
+	rm -f ${TESTS}
+
 % : %.c ${CC}
 	${AM_V_GEN}${CC} ${CFLAGS} ${<} -o ${@}
Index: src/tests/preempt_longrun/barge.c
===================================================================
--- src/tests/preempt_longrun/barge.c	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../sched-int-barge.c
Index: src/tests/preempt_longrun/create.c
===================================================================
--- src/tests/preempt_longrun/create.c	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/preempt_longrun/create.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -1,4 +1,6 @@
 #include <kernel>
 #include <thread>
+
+static const unsigned long N = 2_000ul;
 
 #ifndef PREEMPTION_RATE
@@ -16,5 +18,5 @@
 int main(int argc, char* argv[]) {
 	processor p;
-	for(int i = 0; i < 10_000ul; i++) {
+	for(int i = 0; i < N; i++) {
 		worker_t w[7];
 	}
Index: src/tests/preempt_longrun/enter.c
===================================================================
--- src/tests/preempt_longrun/enter.c	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/preempt_longrun/enter.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -3,5 +3,4 @@
 #include <thread>
 
-#undef N
 static const unsigned long N  = 70_000ul;
 
Index: src/tests/preempt_longrun/enter3.c
===================================================================
--- src/tests/preempt_longrun/enter3.c	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/preempt_longrun/enter3.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -3,5 +3,4 @@
 #include <thread>
 
-#undef N
 static const unsigned long N  = 50_000ul;
 
Index: src/tests/preempt_longrun/processor.c
===================================================================
--- src/tests/preempt_longrun/processor.c	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/preempt_longrun/processor.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -1,4 +1,6 @@
 #include <kernel>
 #include <thread>
+
+static const unsigned long N = 5_000ul;
 
 #ifndef PREEMPTION_RATE
@@ -15,5 +17,5 @@
 
 int main(int argc, char* argv[]) {
-	for(int i = 0; i < 10_000ul; i++) {
+	for(int i = 0; i < N; i++) {
 		processor p;
 	}
Index: src/tests/preempt_longrun/yield.c
===================================================================
--- src/tests/preempt_longrun/yield.c	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/preempt_longrun/yield.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -1,4 +1,6 @@
 #include <kernel>
 #include <thread>
+
+static const unsigned long N = 325_000ul;
 
 #ifndef PREEMPTION_RATE
@@ -13,5 +15,5 @@
 
 void main(worker_t * this) {
-	for(int i = 0; i < 325_000ul; i++) {
+	for(int i = 0; i < N; i++) {
 		yield();
 	}
Index: src/tests/result.c
===================================================================
--- src/tests/result.c	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/result.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -9,10 +9,10 @@
 // Author           : Andrew Beach
 // Created On       : Thr May 25 16:50:00 2017
-// Last Modified By : Andrew Beach
-// Last Modified On : Fri Jun 16 15:42:00 2017
-// Update Count     : 0
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Jul 20 15:24:12 2017
+// Update Count     : 1
 //
 
-#include <assert>
+#include <assert.h>
 #include <containers/result>
 
Index: src/tests/sched-int-barge.c
===================================================================
--- src/tests/sched-int-barge.c	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/sched-int-barge.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -5,4 +5,13 @@
 #include <thread>
 
+static const unsigned long N = 50_000ul;
+
+#ifndef PREEMPTION_RATE
+#define PREEMPTION_RATE 10_000ul
+#endif
+
+unsigned int default_preemption() {
+	return 0;
+}
 enum state_t { WAIT, SIGNAL, BARGE };
 
@@ -10,5 +19,5 @@
 
 monitor global_data_t {
-	bool done;
+	volatile bool done;
 	int counter;
 	state_t state;
@@ -51,5 +60,5 @@
 		c.do_wait2 = ((unsigned)rand48()) % (c.do_signal);
 
-		// if(c.do_wait1 == c.do_wait2) sout | "Same" | endl;
+		if(c.do_wait1 == c.do_wait2) sout | "Same" | endl;
 	}
 
@@ -73,5 +82,5 @@
 	}
 
-	if( c.counter >= 100_000 ) c.done = true;
+	if( c.counter >= N ) c.done = true;
 	return !c.done;
 }
@@ -89,4 +98,6 @@
 }
 
+static thread_desc * volatile the_threads;
+
 int main(int argc, char* argv[]) {
 	rand48seed(0);
@@ -94,4 +105,5 @@
 	{
 		Threads t[17];
+		the_threads = (thread_desc*)t;
 	}
 }
Index: src/tests/sched-int-block.c
===================================================================
--- src/tests/sched-int-block.c	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/sched-int-block.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -5,7 +5,15 @@
 #include <thread>
 
-#ifndef N
-#define N 10_000
+#include <time.h>
+
+static const unsigned long N = 5_000ul;
+
+#ifndef PREEMPTION_RATE
+#define PREEMPTION_RATE 10_000ul
 #endif
+
+unsigned int default_preemption() {
+	return PREEMPTION_RATE;
+}
 
 enum state_t { WAITED, SIGNAL, BARGE };
@@ -102,5 +110,5 @@
 
 int main(int argc, char* argv[]) {
-	rand48seed(0);
+	rand48seed( time( NULL ) );
 	done = false;
 	processor p;
Index: src/tests/sched-int-disjoint.c
===================================================================
--- src/tests/sched-int-disjoint.c	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/sched-int-disjoint.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -4,7 +4,13 @@
 #include <thread>
 
-#ifndef N
-#define N 10_000
+static const unsigned long N = 10_000ul;
+
+#ifndef PREEMPTION_RATE
+#define PREEMPTION_RATE 10_000ul
 #endif
+
+unsigned int default_preemption() {
+	return PREEMPTION_RATE;
+}
 
 enum state_t { WAIT, SIGNAL, BARGE };
Index: src/tests/sched-int-wait.c
===================================================================
--- src/tests/sched-int-wait.c	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/sched-int-wait.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -5,7 +5,13 @@
 #include <thread>
 
-#ifndef N
-#define N 10_000
+static const unsigned long N = 10_000ul;
+
+#ifndef PREEMPTION_RATE
+#define PREEMPTION_RATE 10_000ul
 #endif
+
+unsigned int default_preemption() {
+	return PREEMPTION_RATE;
+}
 
 monitor global_t {};
@@ -114,5 +120,5 @@
 int main(int argc, char* argv[]) {
 	waiter_left = 4;
-	processor p;
+	processor p[2];
 	sout | "Starting" | endl;
 	{
Index: src/tests/test.py
===================================================================
--- src/tests/test.py	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/test.py	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -221,9 +221,9 @@
 		if   retcode == TestResult.SUCCESS: 	result_txt = "Done"
 		elif retcode == TestResult.TIMEOUT: 	result_txt = "TIMEOUT"
-		else :						result_txt = "ERROR"
+		else :						result_txt = "ERROR code %d" % retcode
 	else :
 		if   retcode == TestResult.SUCCESS: 	result_txt = "PASSED"
 		elif retcode == TestResult.TIMEOUT: 	result_txt = "TIMEOUT"
-		else :						result_txt = "FAILED"
+		else :						result_txt = "FAILED with code %d" % retcode
 
 	#print result with error if needed
Index: src/tests/vector/array.h
===================================================================
--- src/tests/vector/array.h	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/vector/array.h	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -9,11 +9,10 @@
 // Author           : Richard C. Bilson
 // Created On       : Wed May 27 17:56:53 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Wed Apr 27 17:26:04 2016
-// Update Count     : 5
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sat Jul 22 10:04:20 2017
+// Update Count     : 6
 //
 
-#ifndef ARRAY_H
-#define ARRAY_H
+#pragma once
 
 //#include <iterator>
@@ -45,6 +44,4 @@
 elt_type * end( array_type * array );
 
-#endif // ARRAY_H
-
 // Local Variables: //
 // tab-width: 4 //
Index: src/tests/vector/vector_int.h
===================================================================
--- src/tests/vector/vector_int.h	(revision 83a071f98d287fe0dd150376b0c6ea5ff812b18b)
+++ src/tests/vector/vector_int.h	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -9,11 +9,10 @@
 // Author           : Richard C. Bilson
 // Created On       : Wed May 27 17:56:53 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Wed Apr 27 17:26:59 2016
-// Update Count     : 2
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sat Jul 22 10:04:02 2017
+// Update Count     : 4
 //
 
-#ifndef VECTOR_INT_H
-#define VECTOR_INT_H
+#pragma once
 
 // A flexible array, similar to a C++ vector, that holds integers and can be resized dynamically
@@ -27,6 +26,6 @@
 void ?{}( vector_int & );								// allocate vector with default capacity
 void ?{}( vector_int &, int reserve );					// allocate vector with specified capacity
-void ?{}( vector_int & vec, vector_int other );			// copy constructor
-void ^?{}( vector_int & );								// deallocate vector's storage
+void ?{}( vector_int & vec, vector_int other );     // copy constructor
+void ^?{}( vector_int & );                // deallocate vector's storage
 
 void reserve( vector_int *vec, int reserve );			// reserve more capacity
@@ -36,7 +35,5 @@
 
 int & ?[?]( vector_int * vec, int index );				// access to arbitrary element (does not resize)
-int last( vector_int * vec );							// return last element
-
-#endif // VECTOR_INT_H
+int last( vector_int * vec );             // return last element
 
 // Local Variables: //
Index: src/tests/virtualCast.c
===================================================================
--- src/tests/virtualCast.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
+++ src/tests/virtualCast.c	(revision 36a5a77ac8984b7504f7dad9906fa0e218809bfe)
@@ -0,0 +1,76 @@
+// Testing the virtual cast, as part of strict inheritance.
+
+/* IMPORTANT: This test does not repersent the final feature set.
+ * We are missing a number of important aspects such as:
+ * + vtable type generation.
+ * + vtable instance generation, that might use different resolution rules.
+ * + Virtual syntax to force said generation on structures and traits.
+ * + Trait references/pointers that do the virtual_table lookup.
+ */
+
+#include <stdlib>
+#include <assert.h>
+
+struct alpha_vtable {
+	alpha_vtable const * const parent;
+	char (*code)(void);
+};
+
+struct alpha {
+	alpha_vtable const * virtual_table;
+};
+
+char ret_a(void) {
+	return 'a';
+}
+
+
+
+struct beta_vtable {
+	alpha_vtable const * const parent;
+	char (*code)(void);
+};
+
+struct beta {
+	beta_vtable const * virtual_table;
+};
+
+char ret_b(void) {
+	return 'b';
+}
+
+
+
+struct gamma_vtable {
+	beta_vtable const * const parent;
+	char (*code)(void);
+};
+
+struct gamma {
+	gamma_vtable const * virtual_table;
+};
+
+char ret_g(void) {
+	return 'g';
+}
+
+
+extern "C" {
+	alpha_vtable _alpha_vtable_instance = { 0, ret_a };
+	beta_vtable _beta_vtable_instance = { &_alpha_vtable_instance, ret_b };
+	gamma_vtable _gamma_vtable_instance = { &_beta_vtable_instance, ret_g };
+}
+
+int main (int argc, char * argv[]) {
+
+	gamma * tri = malloc(); tri->virtual_table = &_gamma_vtable_instance;
+	beta * mid = (virtual beta *)tri;
+	assert( 'g' == mid->virtual_table->code() );
+
+	alpha * top = malloc(); top->virtual_table = &_alpha_vtable_instance;
+	mid = (virtual beta *)top;
+	assert( ! mid );
+
+	free(tri);
+	free(top);
+}
