source: tests/collections/sequence.cfa@ 2daea42

ADT arm-eh ast-experimental enum forall-pointer-decay jacob/cs343-translation new-ast-unique-expr pthread-emulation qualifiedEnum
Last change on this file since 2daea42 was de2f969, checked in by caparsons <caparson@…>, 5 years ago

added more tests to cover all routines in collections and updated corresponding expect files

  • Property mode set to 100644
File size: 3.6 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 Sequence(Fred) fred0;
75 Fred * middle;
76 for ( i; 10 ) {
77 if( i == 5) {
78 middle = new( i );
79 addHead( fred0, *middle );
80 continue;
81 }
82 addHead( fred0, *new( i ) );
83 }
84
85 for ( SeqIterRev(Fred) iter = { fred0 }; iter >> f; ) {
86 sout | f.i | ' ';
87 }
88 sout | nl;
89
90 Fred * front = new( -1 );
91 insertBef( fred0, *front, tail(fred0));
92 insertAft( fred0, *front, *new( -2 ) );
93 remove( fred0, *front );
94 delete( front );
95
96 sout | head(fred0).i | nl;
97 Fred & end = dropTail( fred );
98 delete( &end );
99
100 for ( over( fredIter, fred0 ); fredIter >> f; ) {
101 sout | f.i | ' ';
102 }
103 sout | nl;
104
105 Sequence(Fred) fred2;
106
107 split( fred2, fred0, *middle);
108
109 for ( over( fredIter, fred0 ); fredIter >> f; ) {
110 sout | f.i | ' ';
111 }
112 sout | nl;
113
114 for ( over( fredIter, fred2 ); fredIter >> f; ) {
115 sout | f.i | ' ';
116 }
117 sout | nl;
118
119 transfer( fred0, fred2);
120
121 for ( over( fredIter, fred0 ); fredIter >> f; ) {
122 sout | f.i | ' ';
123 }
124 sout | nl;
125
126 for ( over( fredIter, fred0 ); fredIter >> f; ) {
127 delete( &f );
128 }
129
130 // Mary test
131
132 struct Mary {
133 inline Fred; // Plan 9 inheritance
134 int j;
135 };
136 void ?{}( Mary & mary ) { abort(); }
137 void ?{}( Mary & mary, int p ) with( mary ) {
138 ((Fred &)mary){ p };
139 j = p;
140 }
141
142 Mary *& Back( Mary * n ) {
143 return (Mary *)Back( (Fred *)n );
144 }
145
146 Mary *& Next( Mary * n ) {
147 return (Mary *)Next( (Fred *)n );
148 }
149
150 Sequence(Mary) mary;
151 Sequence(Mary) baz;
152 SeqIter(Mary) maryIter = { mary };
153 Mary & m;
154
155 for ( ; maryIter >> m; ) { // empty list
156 sout | m.i | m.j | ' ';
157 }
158 sout | "empty" | nl;
159
160 for ( i; 10 ) {
161 add( mary, *new( 2 * i ) );
162 add( baz, *new( 2 * i ) );
163 }
164
165 for ( SeqIter(Mary) iter = { mary }; iter >> m; ) {
166 sout | m.i | m.j | ' ';
167 }
168 sout | nl;
169
170 for ( i; 9 ) {
171 delete( &dropHead( mary ) );
172 }
173
174 for ( over( maryIter, mary ); maryIter >> m; ) {
175 sout | m.i | m.j | ' ';
176 }
177 sout | nl;
178
179 for ( i; 10 ) {
180 addTail( mary, *new( 2 * i + 1 ) );
181 }
182 for ( over( maryIter, mary ); maryIter >> m; ) {
183 sout | m.i | m.j | ' ';
184 }
185 sout | nl;
186
187 for ( i; 9 ) {
188 delete( &dropTail( mary ) );
189 }
190 for ( over( maryIter, mary ); maryIter >> m; ) {
191 sout | m.i | m.j | ' ';
192 }
193 sout | nl;
194
195 transfer( mary, baz );
196
197 for ( over( maryIter, baz ); maryIter >> m; ) {
198 sout | m.i | m.j | ' ';
199 }
200 sout | "empty" | nl;
201
202 for ( over( maryIter, mary ); maryIter >> m; ) {
203 sout | m.i | m.j | ' ';
204 }
205 sout | nl;
206
207 for ( over( maryIter, mary ); maryIter >> m; ) {
208 delete( &m );
209 }
210}
Note: See TracBrowser for help on using the repository browser.