Index: tests/sum.cfa
===================================================================
--- tests/sum.cfa	(revision aca144e404ad4f07edeab0cf40cf984228940f55)
+++ tests/sum.cfa	(revision 4d978d5a699d326a183563c99160534b5f5ae9d1)
@@ -35,4 +35,5 @@
 
 int main( void ) {
+#if 0
 	const int low = 5, High = 15, size = High - low;
 
@@ -121,4 +122,92 @@
 		 | sum( size, gs.x ) | ", check" | (int)s;		// add field array in generic type
 	delete( gs.x );
+#else
+	const int low = 5, High = 15, size = High - low;
+
+	signed char s = 0, a[size], v = (char)low;
+	for ( int i = 0; i < size; i += 1, v += 1hh ) {
+		s += v;
+		a[i] = v;
+	} // for
+	printf( "sum from %d to %d is %hhd, check %hhd\n", low, High,
+		 sum( size, (signed char *)a ), (signed char)s );
+
+	unsigned char s = 0, a[size], v = low;
+	for ( int i = 0; i < size; i += 1, v += 1hhu ) {
+		s += (unsigned char)v;
+		a[i] = (unsigned char)v;
+	} // for
+	printf( "sum from %d to %d is %hhu, check %hhu\n", low, High,
+		 sum( size, (unsigned char *)a ), (unsigned char)s );
+
+	short int s = 0, a[size], v = low;
+	for ( int i = 0; i < size; i += 1, v += 1h ) {
+	 	s += (short int)v;
+	 	a[i] = (short int)v;
+	} // for
+	printf( "sum from %d to %d is %hd, check %hd\n", low, High,
+		 sum( size, (short int *)a ), (short int)s );
+
+	int s = 0, a[size], v = low;
+	for ( int i = 0; i < size; i += 1, v += 1 ) {
+		s += (int)v;
+		a[i] = (int)v;
+	} // for
+	printf( "sum from %d to %d is %d, check %d\n", low, High,
+		 sum( size, (int *)a ), (int)s );
+
+	float s = 0.0f, a[size], v = low / 10.0f;
+	for ( int i = 0; i < size; i += 1, v += 0.1f ) {
+		s += (float)v;
+		a[i] = (float)v;
+	} // for
+	printf( "sum from %g to %g is %g, check %g\n", low / 10.0f, High / 10.0f,
+		 sum( size, (float *)a ), (float)s );
+
+	double s = 0.0, a[size], v = low / 10.0;
+	for ( int i = 0; i < size; i += 1, v += 0.1 ) {
+		s += (double)v;
+		a[i] = (double)v;
+	} // for
+	printf( "sum from %g to %g is %g, check %g\n", low / 10.0f, High / 10.0f,
+		 sum( size, (double *)a ), (double)s );
+
+	struct S { int i, j; };
+	void ?{}( S & s ) { s.[i, j] = 0; }
+	void ?{}( S & s, int i ) { s.[i, j] = [i, 0]; }
+	void ?{}( S & s, int i, int j ) { s.[i, j] = [i, j]; }
+	void ?{}( S & s, zero_t ) { s.[i, j] = 0; }
+	void ?{}( S & s, one_t ) { s.[i, j] = 1; }
+	S ?+?( S t1, S t2 ) { return (S){ t1.i + t2.i, t1.j + t2.j }; }
+	S ?+=?( S & t1, S t2 ) { t1 = t1 + t2; return t1; }
+	S ++?( S & t ) { t += (S){1}; return t; }
+	S ?++( S & t ) { S temp = t; t += (S){1}; return temp; }
+	ofstream & ?|?( ofstream & os, S v ) { return os | v.i | v.j; }
+	void ?|?( ofstream & os, S v ) { (ofstream &)(os | v); nl( os ); }
+
+	S s = (S){0}, a[size], v = { low, low };
+	for ( int i = 0; i < size; i += 1, v += (S){1} ) {
+		s += (S)v;
+		a[i] = (S)v;
+	} // for
+	printf( "sum from %d to %d is %d %d, check %d %d\n", low, High,
+		 sum( size, (S *)a ).[i, j], s.[i, j] );
+
+	forall( otype Impl | sumable( Impl ) )
+	struct GS {
+		Impl * x, * y;
+	};
+	GS(int) gs;
+	// FIX ME, resolution problem with anew not picking up the LH type
+	gs.x = (typeof(gs.x))anew( size );					// create array storage for field
+	s = 0; v = low;
+	for ( int i = 0; i < size; i += 1, v += 1 ) {
+		s += (int)v;
+		gs.x[i] = (int)v;								// set field array in generic type
+	} // for
+	printf( "sum from %d to %d is %d, check %d\n", low, High,
+		 sum( size, gs.x ), (int)s );		// add field array in generic type
+	delete( gs.x );
+#endif
 } // main
 
