source: tests/collections/queue.cfa @ bada452

Last change on this file since bada452 was bada452, checked in by Andrew Beach <ajbeach@…>, 3 weeks ago

Removed warnings from serveral tests and removed them from the ..._TO_INVESTIGATE list. One test triggered a Cforall warning and a new test to check that has been added. collections/vector-demo has no warnings in its body, but the library it uses does have warnings and will have to move after that is fixed.

  • Property mode set to 100644
File size: 4.3 KB
Line 
1#include <fstream.hfa>
2#include <stdlib.hfa>                                                                   // new, delete
3#include <bits/queue.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        Queue(Fred) fred;
21        QueueIter(Fred) iter = { fred };
22        Fred & f;
23
24        sout | nlOff;                                                                           // turn off auto newline
25
26        for ( ; iter | f; ) {                                                   // empty list
27                sout | f.i | ' ';
28        }
29        sout | "empty" | nl;
30
31        for ( i; 10 ) {
32                add( fred, *new( 2 * i ) );
33        }
34
35        sout | head( fred ).i | tail( fred ).i | nl;
36
37        for ( QueueIter(Fred) iter = { fred }; iter | f; ) {
38                sout | f.i | ' ';
39        }
40        sout | nl;
41
42        for ( i; 9 ) {
43                delete( &drop( fred ) );
44        }
45
46        for ( over( iter, fred ); iter | f; ) {
47                sout | f.i | ' ';
48        }
49        sout | nl;
50
51        for ( i; 10 ) {
52                add( fred, *new( 2 * i + 1 ) );
53        }
54
55        Fred * head = new( -1 ), tail = { -2 };
56        addHead( fred, *head );
57        addTail( fred, tail );
58
59        sout | head( fred ).i | succ( fred, head )->i | tail( fred ).i | nl;
60
61        for ( over( iter, fred ); iter | f; ) {
62                sout | f.i | ' ';
63        }
64        sout | nl;
65
66        remove( fred, *head );
67        remove( fred, tail );
68        delete( head );
69        delete( &dropTail( fred ) );
70
71        for ( over( iter, fred ); iter | f; ) {
72                sout | f.i | ' ';
73        }
74        sout | nl;
75
76        for ( i; 5 ) {
77                delete( &dropTail( fred ) );
78        }
79        for ( over( iter, fred ); iter | f; ) {
80                sout | f.i | ' ';
81        }
82        sout | nl;
83
84        for ( over( iter, fred ); iter | f; ) {
85                delete( &remove( fred, f ) );
86        }
87        for ( over( iter, fred ); iter | f; ) {
88                sout | f.i | ' ';
89        }
90        sout | "empty" | nl;
91
92        Fred & middle;
93        for ( i; 10 ) {
94                add( fred, *new( i ) );
95                if ( i == 4 ) {
96                        &middle = &tail( fred );
97                }
98        }
99        for ( QueueIter(Fred) iter = { fred }; iter | f; ) {
100                sout | f.i | ' ';
101        }
102        sout | nl;
103
104        Queue(Fred) fred2;
105
106        split( fred2, fred, middle );
107
108        for ( over( iter, fred ); iter | f; ) {
109                sout | f.i | ' ';
110        }
111        sout | nl;
112
113        for ( over( iter, fred2 ); iter | f; ) {
114                sout | f.i | ' ';
115        }
116        sout | nl;
117
118        transfer( fred, fred2 );
119
120        for ( over( iter, fred ); iter | f; ) {
121                sout | f.i | ' ';
122        }
123        sout | nl;
124
125        for ( over( iter, fred ); iter | f; ) {
126                delete( &f );
127        }
128
129        // Mary test
130
131        struct Mary {
132                inline Fred;                                                                    // Plan 9 inheritance
133                int j;
134        };
135        __attribute__((unused))
136        void ?{}( Mary & mary ) { abort(); }
137        void ?{}( Mary & mary, int p ) with( mary ) {
138                ((Fred &)mary){ p };
139                j = p;
140        }
141        Mary *& Next( Mary * n ) {
142                return (Mary *)Next( (Fred *)n );
143        }
144
145        Queue(Mary) mary;
146        QueueIter(Mary) iter = { mary };
147        Mary & m;
148
149        for ( ; iter | m; ) {                                                   // empty list
150                sout | m.i | m.j | ' ';
151        }
152        sout | "empty" | nl;
153
154        for ( i; 10 ) {
155                add( mary, *new( 2 * i ) );
156        }
157
158        sout | head( mary ).i | tail( mary ).i | nl;
159
160        for ( QueueIter(Mary) iter = { mary }; iter | m; ) {
161                sout | m.i | m.j | ' ';
162        }
163        sout | nl;
164
165        for ( i; 9 ) {
166                delete( &drop( mary ) );
167        }
168
169        for ( over( iter, mary ); iter | m; ) {
170                sout | m.i | m.j | ' ';
171        }
172        sout | nl;
173
174        for ( i; 10 ) {
175                add( mary, *new( 2 * i + 1 ) );
176        }
177
178        Mary * head = new( -1 ), tail = { -2 };
179        addHead( mary, *head );
180        addTail( mary, tail );
181
182        sout | head( mary ).i | succ( mary, head )->i | tail( mary ).i | nl;
183
184        for ( over( iter, mary ); iter | m; ) {
185                sout | m.i | m.j | ' ';
186        }
187        sout | nl;
188
189        remove( mary, *head );
190        remove( mary, tail );
191        delete( (Mary *)head );
192        delete( &dropTail( mary ) );
193
194        for ( over( iter, mary ); iter | m; ) {
195                sout | m.i | m.j | ' ';
196        }
197        sout | nl;
198
199        for ( i; 5 ) {
200                delete( &dropTail( mary ) );
201        }
202        for ( over( iter, mary ); iter | m; ) {
203                sout | m.i | m.j | ' ';
204        }
205        sout | nl;
206
207        for ( over( iter, mary ); iter | m; ) {
208                delete( &remove( mary, m ) );
209        }
210        for ( over( iter, mary ); iter | m; ) {
211                sout | m.i | m.j | ' ';
212        }
213        sout | "empty" | nl;
214
215        Mary & middle;
216        for ( i; 10 ) {
217                add( mary, *new( i ) );
218                if ( i == 4 ) {
219                        &middle = &tail( mary );
220                }
221        }
222        for ( QueueIter(Mary) iter = { mary }; iter | m; ) {
223                sout | m.i | m.j | ' ';
224        }
225        sout | nl;
226
227        Queue(Mary) mary2;
228
229        split( mary2, mary, middle );
230
231        for ( over( iter, mary ); iter | m; ) {
232                sout | m.i | m.j | ' ';
233        }
234        sout | nl;
235        for ( over( iter, mary2 ); iter | m; ) {
236                sout | m.i | m.j | ' ';
237        }
238        sout | nl;
239
240        transfer( mary, mary2 );
241
242        for ( over( iter, mary ); iter | m; ) {
243                sout | m.i | m.j | ' ';
244        }
245        sout | nl;
246
247        for ( over( iter, mary ); iter | m; ) {
248                delete( &m );
249        }
250}
Note: See TracBrowser for help on using the repository browser.