Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tests/sum.cfa

    r292642a ref346f7c  
    1111// Created On       : Wed May 27 17:56:53 2015
    1212// Last Modified By : Peter A. Buhr
    13 // Last Modified On : Sun May 19 11:21:02 2019
    14 // Update Count     : 330
     13// Last Modified On : Sun Dec 23 23:00:38 2018
     14// Update Count     : 287
    1515//
    1616
    1717#include <fstream.hfa>
    1818#include <stdlib.hfa>
     19
     20void ?{}( int & c, zero_t ) { c = 0; }                                  // not in prelude
    1921
    2022trait sumable( otype T ) {
     
    2931T sum( size_t size, T a[] ) {
    3032        T total = 0;                                                                            // initialize by 0 constructor
    31         for ( i; size )
     33        for ( size_t i = 0; i < size; i += 1 )
    3234                total += a[i];                                                                  // select appropriate +
    3335        return total;
    3436} // sum
    3537
     38// Not in prelude.
     39unsigned char ?+?( unsigned char t1, unsigned char t2 ) { return (int)t1 + t2; } // cast forces integer addition, otherwise recursion
     40unsigned char ?+=?( unsigned char & t1, unsigned char t2 ) { t1 = t1 + t2; return t1; }
     41unsigned char ++?( unsigned char & t ) { t += 1; return t; }
     42unsigned char ?++( unsigned char & t ) { unsigned char temp = t; t += 1; return temp; }
     43
     44// Not in prelude.
     45void ?{}( unsigned char & c, zero_t ) { c = 0; }
     46void ?{}( float & f, zero_t ) { f = 0.0; }
     47void ?{}( double & d, zero_t ) { d = 0.0; }
     48
    3649int main( void ) {
    3750        const int low = 5, High = 15, size = High - low;
    3851
    39         signed char s = 0, a[size], v = (char)low;
    40         for ( int i = 0; i < size; i += 1, v += 1hh ) {
     52        unsigned char s = 0, a[size], v = (char)low;
     53        for ( int i = 0; i < size; i += 1, v += 1 ) {
    4154                s += v;
    4255                a[i] = v;
    4356        } // for
    4457        sout | "sum from" | low | "to" | High | "is"
    45                  | sum( size, (signed char *)a ) | ", check" | (signed char)s;
    46 
    47         unsigned char s = 0, a[size], v = low;
    48         for ( int i = 0; i < size; i += 1, v += 1hhu ) {
    49                 s += (unsigned char)v;
    50                 a[i] = (unsigned char)v;
    51         } // for
    52         sout | "sum from" | low | "to" | High | "is"
    53                  | sum( size, (unsigned char *)a ) | ", check" | (unsigned char)s;
    54 
    55         short int s = 0, a[size], v = low;
    56         for ( int i = 0; i < size; i += 1, v += 1h ) {
    57                 s += (short int)v;
    58                 a[i] = (short int)v;
    59         } // for
    60         sout | "sum from" | low | "to" | High | "is"
    61                  | sum( size, (short int *)a ) | ", check" | (short int)s;
     58                 | sum( size, (unsigned char *)a ) | ", check" | (int)s;
    6259
    6360        int s = 0, a[size], v = low;
Note: See TracChangeset for help on using the changeset viewer.