source: tests/sequence.cfa @ b3c8496

arm-ehjacob/cs343-translationnew-ast-unique-expr
Last change on this file since b3c8496 was b3c8496, checked in by Colby Alexander Parsons <caparsons@…>, 11 months 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.