source: src/examples/sum.c@ 2bae7307

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors ctor deferred_resn demangler enum forall-pointer-decay gc_noraii jacob/cs343-translation jenkins-sandbox memory new-ast new-ast-unique-expr new-env no_list persistent-indexer pthread-emulation qualifiedEnum resolv-new string with_gc
Last change on this file since 2bae7307 was 843054c2, checked in by Peter A. Buhr <pabuhr@…>, 10 years ago

licencing: seventh groups of files

  • Property mode set to 100644
File size: 1.3 KB
Line 
1extern "C" {
2 int printf( const char *, ... );
3}
4
5context sumable( type T ) {
6 const T 0;
7 T ?+?( T, T );
8 T ?++( T * );
9 T ?+=?( T *, T );
10};
11
12forall( type T | sumable( T ) )
13T sum( int n, T a[] ) {
14 T total; // instantiate T, select 0
15 total = 0;
16 for ( int i = 0; i < n; i += 1 )
17 total = total + a[i]; // select +
18 return total;
19}
20
21// Required to satisfy sumable as char does not have addition.
22const char 0;
23char ?+?( char op1, char op2 ) { return op1 + op2; }
24char ?++( char *op ) { return *op + 1; }
25
26const double 0; // TEMPORARY, incorrect use of int 0
27
28int main() {
29 const int size = 10, low = 0, High = 10;
30 int si = 0, ai[10]; // size
31 int i;
32 for ( i = low; i < High; i += 1 ) {
33 si += i;
34 ai[i] = i;
35 }
36 printf( "sum from %d to %d is %d, check %d\n",
37 low, High, sum( size, ai ), si );
38
39// char ci[10];
40// char c = sum( size, ci );
41// float fi[10];
42// float f = sum( size, fi );
43
44 double sd = 0.0, ad[10]; // size
45 for ( i = low; i < High; i += 1 ) {
46 double d = i / (double)size;
47 sd += d;
48 ad[i] = d;
49 }
50 printf( "sum from %g to %g is %g, check %g\n",
51 low / (double)size, High / (double)size, sum( size, ad ), sd );
52}
53
54// Local Variables: //
55// compile-command: "../../bin/cfa sum.c" //
56// End: //
Note: See TracBrowser for help on using the repository browser.