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
RevLine 
[5e82d56]1#include <fstream.hfa>
2#include <stdlib.hfa> // new, delete
[edf3ff1]3#include <bits/sequence.hfa>
[5e82d56]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
[b3c8496]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
[5e82d56]29 Sequence(Fred) fred;
30 SeqIter(Fred) fredIter = { fred };
[3d0560d]31 Fred & f;
[5e82d56]32
33 sout | nlOff; // turn off auto newline
34
35 for ( ; fredIter >> f; ) { // empty list
[3d0560d]36 sout | f.i | ' ';
[5e82d56]37 }
38 sout | "empty" | nl;
39
[3d0560d]40 for ( i; 10 ) {
[b37515b]41 add( fred, *new( 2 * i ) );
[5e82d56]42 }
43
[3d0560d]44 for ( SeqIter(Fred) iter = { fred }; iter >> f; ) {
45 sout | f.i | ' ';
[5e82d56]46 }
47 sout | nl;
48
[3d0560d]49 for ( i; 9 ) {
[b37515b]50 delete( &dropHead( fred ) );
[5e82d56]51 }
52
53 for ( over( fredIter, fred ); fredIter >> f; ) {
[3d0560d]54 sout | f.i | ' ';
[5e82d56]55 }
56 sout | nl;
57
[3d0560d]58 for ( i; 10 ) {
[b37515b]59 addTail( fred, *new( 2 * i + 1 ) );
[5e82d56]60 }
61 for ( over( fredIter, fred ); fredIter >> f; ) {
[3d0560d]62 sout | f.i | ' ';
[5e82d56]63 }
64 sout | nl;
65
[3d0560d]66 for ( i; 9 ) {
67 delete( &dropTail( fred ) );
[5e82d56]68 }
69 for ( over( fredIter, fred ); fredIter >> f; ) {
[3d0560d]70 sout | f.i | ' ';
[5e82d56]71 }
72 sout | nl;
73
74 for ( over( fredIter, fred ); fredIter >> f; ) {
[3d0560d]75 delete( &f );
[5e82d56]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
[b3c8496]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
[5e82d56]102 Sequence(Mary) mary;
103 Sequence(Mary) baz;
104 SeqIter(Mary) maryIter = { mary };
[3d0560d]105 Mary & m;
[5e82d56]106
107 for ( ; maryIter >> m; ) { // empty list
[3d0560d]108 sout | m.i | m.j | ' ';
[5e82d56]109 }
110 sout | "empty" | nl;
111
[3d0560d]112 for ( i; 10 ) {
[b37515b]113 add( mary, *new( 2 * i ) );
114 add( baz, *new( 2 * i ) );
[5e82d56]115 }
116
[3d0560d]117 for ( SeqIter(Mary) iter = { mary }; iter >> m; ) {
118 sout | m.i | m.j | ' ';
[5e82d56]119 }
120 sout | nl;
121
[3d0560d]122 for ( i; 9 ) {
[b37515b]123 delete( &dropHead( mary ) );
[5e82d56]124 }
125
126 for ( over( maryIter, mary ); maryIter >> m; ) {
[3d0560d]127 sout | m.i | m.j | ' ';
[5e82d56]128 }
129 sout | nl;
130
[3d0560d]131 for ( i; 10 ) {
[b37515b]132 addTail( mary, *new( 2 * i + 1 ) );
[5e82d56]133 }
134 for ( over( maryIter, mary ); maryIter >> m; ) {
[3d0560d]135 sout | m.i | m.j | ' ';
[5e82d56]136 }
137 sout | nl;
138
[3d0560d]139 for ( i; 9 ) {
140 delete( &dropTail( mary ) );
[5e82d56]141 }
142 for ( over( maryIter, mary ); maryIter >> m; ) {
[3d0560d]143 sout | m.i | m.j | ' ';
[5e82d56]144 }
145 sout | nl;
146
147 transfer( mary, baz );
148
149 for ( over( maryIter, baz ); maryIter >> m; ) {
[3d0560d]150 sout | m.i | m.j | ' ';
[5e82d56]151 }
152 sout | "empty" | nl;
153
154 for ( over( maryIter, mary ); maryIter >> m; ) {
[3d0560d]155 sout | m.i | m.j | ' ';
[5e82d56]156 }
157 sout | nl;
158
159 for ( over( maryIter, mary ); maryIter >> m; ) {
[3d0560d]160 delete( &m );
[5e82d56]161 }
162}
Note: See TracBrowser for help on using the repository browser.