source: tests/stack.cfa @ 19de7864

arm-ehjacob/cs343-translationnew-ast-unique-expr
Last change on this file since 19de7864 was 19de7864, checked in by Colby Alexander Parsons <caparsons@…>, 10 months ago

removed listed requirement for collections since it was redundant

  • Property mode set to 100644
File size: 2.0 KB
Line 
1#include <fstream.hfa>
2#include <stdlib.hfa>                                                                   // new, delete
3#include <bits/stack.hfa>
4
5int main() {
6        // Fred test
7
8        struct Fred {
9                inline Colable;                                                                 // Plan 9 inheritance
10                int i;
11        };
12        void ?{}( Fred & fred ) { abort(); }
13        void ?{}( Fred & fred, int p ) with( fred ) {
14                i = p;
15        }
16        Fred *& Next( Fred * n ) {
17                return (Fred *)Next( (Colable *)n );
18        }
19
20        Stack(Fred) fred;
21        StackIter(Fred) fredIter = { fred };
22        Fred & f;
23
24        sout | nlOff;                                                                           // turn off auto newline
25
26        for ( ; fredIter >> f; ) {                                                      // empty list
27                sout | f.i | ' ';
28        }
29        sout | "empty" | nl;
30       
31        for ( i; 10 ) {
32                push( fred, *new( 2 * i ) );
33        }
34
35        for ( StackIter(Fred) iter = { fred }; iter >> f; ) {
36                sout | f.i | ' ';
37        }
38        sout | nl;
39       
40        for ( i; 9 ) {
41                delete( &pop( fred ) );
42        }
43
44        for ( over( fredIter, fred ); fredIter >> f; ) {
45                sout | f.i | ' ';
46        }
47        sout | nl;
48       
49        for ( i; 10 ) {
50                push( fred, *new( 2 * i + 1 ) );
51        }
52        for ( over( fredIter, fred ); fredIter >> f; ) {
53                sout | f.i | ' ';
54        }
55        sout | nl;
56
57        for ( over( fredIter, fred ); fredIter >> f; ) {
58                delete( &f );
59        }
60
61        // Mary test
62
63        struct Mary {
64                inline Fred;                                                                    // Plan 9 inheritance
65                int j;
66        };
67        void ?{}( Mary & mary ) { abort(); }
68        void ?{}( Mary & mary, int p ) with( mary ) {
69                ((Fred &)mary){ p };
70                j = i = p;
71        }
72
73        Mary *& Next( Mary * n ) {
74                return (Mary *)Next( (Fred *)n );
75        }
76
77        Stack(Mary) mary;
78        StackIter(Mary) maryIter = { mary };
79        Mary & m;
80
81        for ( ; maryIter >> m; ) {                                                      // empty list
82                sout | m.i | m.j | ' ';
83        }
84        sout | "empty" | nl;
85       
86        for ( i; 10 ) {
87                push( mary, *new( 2 * i ) );
88        }
89
90        for ( StackIter(Mary) iter = { mary }; iter >> m; ) {
91                sout | m.i | m.j | ' ';
92        }
93        sout | nl;
94       
95        for ( i; 9 ) {
96                delete( &pop( mary ) );
97        }
98
99        for ( over( maryIter, mary ); maryIter >> m; ) {
100                sout | m.i | m.j | ' ';
101        }
102        sout | nl;
103       
104        for ( i; 10 ) {
105                push( mary, *new( 2 * i + 1 ) );
106        }
107        for ( over( maryIter, mary ); maryIter >> m; ) {
108                sout | m.i | m.j | ' ';
109        }
110        sout | nl;
111
112        for ( over( maryIter, mary ); maryIter >> m; ) {
113                delete( &m );
114        }
115}
Note: See TracBrowser for help on using the repository browser.