source: tests/collections/sequence.cfa @ a22e8b4

Last change on this file since a22e8b4 was bada452, checked in by Andrew Beach <ajbeach@…>, 3 months 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.9 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        Fred *& Back( Fred * n ) {
17                return (Fred *)Back( (Seqable *)n );
18        }
19        Fred *& Next( Fred * n ) {
20                return (Fred *)Next( (Colable *)n );
21        }
22
23        Sequence(Fred) fred;
24        SeqIter(Fred) iter = { fred };
25        Fred & f;
26
27        sout | nlOff;                                                                           // turn off auto newline
28
29        for ( ; iter | f; ) {                                                   // empty list
30                sout | f.i | ' ';
31        }
32        sout | "empty" | nl;
33
34        for ( i; 10 ) {
35                add( fred, *new( 2 * i ) );
36        }
37
38        sout | head( fred ).i | tail( fred ).i | nl;
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( iter, fred ); iter | f; ) {
50                sout | f.i | ' ';
51        }
52        sout | nl;
53
54        for ( i; 10 ) {
55                addTail( fred, *new( 2 * i + 1 ) );
56        }
57
58        Fred * head = new( -1 ), tail = { -2 };
59        addHead( fred, *head );
60        addTail( fred, tail );
61
62        sout | head( fred ).i | succ( fred, head )->i | tail( fred ).i | nl;
63
64        for ( over( iter, fred ); iter | f; ) {
65                sout | f.i | ' ';
66        }
67        sout | nl;
68
69        remove( fred, *head );
70        remove( fred, tail );
71        delete( head );
72        delete( &dropTail( fred ) );
73
74        for ( over( iter, fred ); iter | f; ) {
75                sout | f.i | ' ';
76        }
77        sout | nl;
78
79        for ( i; 5 ) {
80                delete( &dropTail( fred ) );
81        }
82        for ( over( iter, fred ); iter | f; ) {
83                sout | f.i | ' ';
84        }
85        sout | nl;
86
87        for ( over( iter, fred ); iter | f; ) {
88                delete( &remove( fred, f ) );
89        }
90        for ( over( iter, fred ); iter | f; ) {
91                sout | f.i | ' ';
92        }
93        sout | "empty" | nl;
94
95        Fred & middle;
96        for ( i; 10 ) {
97                addHead( fred, *new( i ) );                                             // reverse order
98                if ( i == 5 ) {
99                        &middle = &head( fred );
100                }
101        }
102        for ( SeqIterRev(Fred) riter = { fred }; riter | f; ) {
103                sout | f.i | ' ';
104        }
105        sout | nl;
106
107        head = new( -1 );
108        insertBef( fred, *head, head( fred ) );
109        insertAft( fred, *head, tail );
110
111        sout | head( fred ).i | succ( fred, head )->i | tail( fred ).i | nl;
112        for ( over( iter, fred ); iter | f; ) {
113                sout | f.i | ' ';
114        }
115        sout | nl;
116
117        remove( fred, *head );
118        remove( fred, tail );
119        delete( head );
120        delete( &dropTail( fred ) );
121
122        for ( over( iter, fred ); iter | f; ) {
123                sout | f.i | ' ';
124        }
125        sout | nl;
126
127        Sequence(Fred) fred2;
128
129        split( fred2, fred, middle );
130
131        for ( over( iter, fred ); iter | f; ) {
132                sout | f.i | ' ';
133        }
134        sout | nl;
135
136        for ( over( iter, fred2 ); iter | f; ) {
137                sout | f.i | ' ';
138        }
139        sout | nl;
140
141        transfer( fred, fred2 );
142
143        for ( over( iter, fred ); iter | f; ) {
144                sout | f.i | ' ';
145        }
146        sout | nl;
147
148        for ( over( iter, fred ); iter | f; ) {
149                delete( &f );
150        }
151
152        // Mary test
153
154        struct Mary {
155                inline Fred;                                                                    // Plan 9 inheritance
156                int j;
157        };
158        __attribute__((unused))
159        void ?{}( Mary & mary ) { abort(); }
160        void ?{}( Mary & mary, int p ) with( mary ) {
161                ((Fred &)mary){ p };
162                j = p;
163        }
164        Mary *& Back( Mary * n ) {
165                return (Mary *)Back( (Fred *)n );
166        }
167        Mary *& Next( Mary * n ) {
168                return (Mary *)Next( (Fred *)n );
169        }
170
171        Sequence(Mary) mary;
172        SeqIter(Mary) iter = { mary };
173        Mary & m;
174
175        for ( ; iter | m; ) {                                                   // empty list
176                sout | m.i | m.j | ' ';
177        }
178        sout | "empty" | nl;
179
180        for ( i; 10 ) {
181                add( mary, *new( 2 * i ) );
182        }
183
184        sout | head( mary ).i | tail( mary ).i | nl;
185
186        for ( SeqIter(Mary) iter = { mary }; iter | m; ) {
187                sout | m.i | m.j | ' ';
188        }
189        sout | nl;
190
191        for ( i; 9 ) {
192                delete( &dropHead( mary ) );
193        }
194
195        for ( over( iter, mary ); iter | m; ) {
196                sout | m.i | m.j | ' ';
197        }
198        sout | nl;
199
200        for ( i; 10 ) {
201                addTail( mary, *new( 2 * i + 1 ) );
202        }
203
204        Mary * head = new( -1 ), tail = { -2 };
205        addHead( mary, *head );
206        addTail( mary, tail );
207
208        sout | head( mary ).i | succ( mary, head )->i | tail( mary ).i | nl;
209
210        for ( over( iter, mary ); iter | m; ) {
211                sout | m.i | m.j | ' ';
212        }
213        sout | nl;
214
215        remove( mary, *head );
216        remove( mary, tail );
217        delete( (Mary *)head );
218        delete( &dropTail( mary ) );
219
220        for ( over( iter, mary ); iter | m; ) {
221                sout | m.i | m.j | ' ';
222        }
223        sout | nl;
224
225        for ( i; 5 ) {
226                delete( &dropTail( mary ) );
227        }
228        for ( over( iter, mary ); iter | m; ) {
229                sout | m.i | m.j | ' ';
230        }
231        sout | nl;
232
233        for ( over( iter, mary ); iter | m; ) {
234                delete( &remove( mary, m ) );
235        }
236        for ( over( iter, mary ); iter | m; ) {
237                sout | m.i | m.j | ' ';
238        }
239        sout | "empty" | nl;
240
241        Mary & middle;
242        for ( i; 10 ) {
243                add( mary, *new( i ) );
244                if ( i == 4 ) {
245                        &middle = &tail( mary );
246                }
247        }
248        for ( SeqIter(Mary) iter = { mary }; iter | m; ) {
249                sout | m.i | m.j | ' ';
250        }
251        sout | nl;
252
253        Sequence(Mary) mary2;
254
255        split( mary2, mary, middle );
256
257        for ( over( iter, mary ); iter | m; ) {
258                sout | m.i | m.j | ' ';
259        }
260        sout | nl;
261        for ( over( iter, mary2 ); iter | m; ) {
262                sout | m.i | m.j | ' ';
263        }
264        sout | nl;
265
266        transfer( mary, mary2 );
267
268        for ( over( iter, mary ); iter | m; ) {
269                sout | m.i | m.j | ' ';
270        }
271        sout | nl;
272
273        for ( over( iter, mary ); iter | m; ) {
274                delete( &m );
275        }
276}
Note: See TracBrowser for help on using the repository browser.