source: src/tests/forall.c @ 3205495

new-envwith_gc
Last change on this file since 3205495 was e757af2, checked in by Thierry Delisle <tdelisle@…>, 8 years ago

renamed all tests to lower-case leading character

  • Property mode set to 100644
File size: 1.6 KB
Line 
1int ?=?( int*, int );
2float ?=?( float*, float );
3int * ?=?( int **, int * );
4float * ?=?( float **, float * );
5char ?=?( char*, char );
6void (* ?=?( void (**)(void), void (*)(void) ))(void);
7
8void g1() {
9        forall( otype T ) T f( T );
10        void f( int );
11        void h( void (*p)(void) );
12
13        int x;
14        void (*y)(void);
15        char z;
16        float w;
17
18        f( x );
19        f( y );
20        f( z );
21        f( w );
22        h( f( y ) );
23}
24
25void g2() {
26        forall( otype T ) void f( T, T );
27        forall( otype T, otype U ) void f( T, U );
28
29        int x;
30        float y;
31        int *z;
32        float *w;
33
34        f( x, y );
35        f( z, w );
36        f( x, z );
37}
38
39typedef forall ( otype T ) int (*f)( int );
40
41forall( otype T )
42void swap( T left, T right ) {
43        T temp = left;
44        left = right;
45        right = temp;
46}
47
48trait sumable( otype T ) {
49        const T 0;
50        T ?+?(T, T);
51        T ?++(T);
52        [T] ?+=?(T,T);
53};
54
55otype T1 | { const T1 0; T1 ?+?(T1, T1); T1 ?++(T1); [T1] ?+=?(T1,T1); },
56        T2(otype P1, otype P2 ),
57        T3 | sumable(T3);
58
59otype T2(otype P1, otype P2) | sumable(T2(P1,P2)) = struct { P1 i; P2 j; };
60
61T2(int, int) w1;
62typedef T2(int, int) w2;
63w2 g2;
64otype w3 = T2(int, int);
65w3 g3;
66
67forall( otype T | sumable( T ) )
68T sum( int n, T a[] ) {
69        T total = 0;
70        int i;
71        for ( i = 0; i < n; i += 1 )
72                total = total + a[i];
73        return total;
74}
75
76forall( otype T | { const T 0; T ?+?(T, T); T ?++(T); [T] ?+=?(T,T); } )
77T twice( T t ) {
78        return t + t;
79}
80
81forall( otype T | { const T 0; int ?!=?(T, T); int ?<?(T, T); } )
82T min( T t1, T t2 ) {
83        return t1 < t2 ? t1 : t2;
84}
85
86int main() {
87        int x = 1, y = 2, a[10];
88        float f;
89
90        swap( x, y );
91        twice( x );
92        f = min( 4.0, 3.0 );
93        sum( 10, a );
94}
95
96// Local Variables: //
97// tab-width: 4 //
98// End: //
Note: See TracBrowser for help on using the repository browser.