source: tests/sequence.cfa@ a00a2c1

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 a00a2c1 was b3c8496, checked in by Colby Alexander Parsons <caparsons@…>, 5 years ago

updated tests to reflect changes to collections

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