source: tests/sequence.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.7 KB
Line 
1#include <fstream.hfa>
2#include <stdlib.hfa>                                                                   // new, delete
3#include <bits/sequence.hfa>
4
5int main() {
6        // Fred test
7
8        struct Fred {
9                inline Seqable;                                                                 // 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
17        Fred *& Back( Fred * n ) {
18                return (Fred *)Back( (Seqable *)n );
19        }
20
21        Fred *& Next( Fred * n ) {
22                return (Fred *)Next( (Colable *)n );
23        }
24
25        Sequence(Fred) fred;
26        SeqIter(Fred) fredIter = { fred };
27        Fred & f;
28
29        sout | nlOff;                                                                           // turn off auto newline
30
31        for ( ; fredIter >> f; ) {                                                      // empty list
32                sout | f.i | ' ';
33        }
34        sout | "empty" | nl;
35       
36        for ( i; 10 ) {
37                add( fred, *new( 2 * i ) );
38        }
39
40        for ( SeqIter(Fred) iter = { fred }; iter >> f; ) {
41                sout | f.i | ' ';
42        }
43        sout | nl;
44
45        for ( i; 9 ) {
46                delete( &dropHead( fred ) );
47        }
48
49        for ( over( fredIter, fred ); fredIter >> f; ) {
50                sout | f.i | ' ';
51        }
52        sout | nl;
53       
54        for ( i; 10 ) {
55                addTail( fred, *new( 2 * i + 1 ) );
56        }
57        for ( over( fredIter, fred ); fredIter >> f; ) {
58                sout | f.i | ' ';
59        }
60        sout | nl;
61
62        for ( i; 9 ) {
63                delete( &dropTail( fred ) );
64        }
65        for ( over( fredIter, fred ); fredIter >> f; ) {
66                sout | f.i | ' ';
67        }
68        sout | nl;
69
70        for ( over( fredIter, fred ); fredIter >> f; ) {
71                delete( &f );
72        }
73
74        // Mary test
75
76        struct Mary {
77                inline Fred;                                                                    // Plan 9 inheritance
78                int j;
79        };
80        void ?{}( Mary & mary ) { abort(); }
81        void ?{}( Mary & mary, int p ) with( mary ) {
82                ((Fred &)mary){ p };
83                j = p;
84        }
85
86        Mary *& Back( Mary * n ) {
87                return (Mary *)Back( (Fred *)n );
88        }
89
90        Mary *& Next( Mary * n ) {
91                return (Mary *)Next( (Fred *)n );
92        }
93
94        Sequence(Mary) mary;
95        Sequence(Mary) baz;
96        SeqIter(Mary) maryIter = { mary };
97        Mary & m;
98
99        for ( ; maryIter >> m; ) {                                                      // empty list
100                sout | m.i | m.j | ' ';
101        }
102        sout | "empty" | nl;
103       
104        for ( i; 10 ) {
105                add( mary, *new( 2 * i ) );
106                add( baz, *new( 2 * i ) );
107        }
108
109        for ( SeqIter(Mary) iter = { mary }; iter >> m; ) {
110                sout | m.i | m.j | ' ';
111        }
112        sout | nl;
113       
114        for ( i; 9 ) {
115                delete( &dropHead( mary ) );
116        }
117
118        for ( over( maryIter, mary ); maryIter >> m; ) {
119                sout | m.i | m.j | ' ';
120        }
121        sout | nl;
122       
123        for ( i; 10 ) {
124                addTail( mary, *new( 2 * i + 1 ) );
125        }
126        for ( over( maryIter, mary ); maryIter >> m; ) {
127                sout | m.i | m.j | ' ';
128        }
129        sout | nl;
130
131        for ( i; 9 ) {
132                delete( &dropTail( mary ) );
133        }
134        for ( over( maryIter, mary ); maryIter >> m; ) {
135                sout | m.i | m.j | ' ';
136        }
137        sout | nl;
138
139        transfer( mary, baz );
140
141        for ( over( maryIter, baz ); maryIter >> m; ) {
142                sout | m.i | m.j | ' ';
143        }
144        sout | "empty" | nl;
145
146        for ( over( maryIter, mary ); maryIter >> m; ) {
147                sout | m.i | m.j | ' ';
148        }
149        sout | nl;
150
151        for ( over( maryIter, mary ); maryIter >> m; ) {
152                delete( &m );
153        }
154}
Note: See TracBrowser for help on using the repository browser.