source: tests/sequence.cfa @ 28e88d7

ADTarm-ehast-experimentalenumforall-pointer-decayjacob/cs343-translationnew-ast-unique-exprpthread-emulationqualifiedEnum
Last change on this file since 28e88d7 was b3c8496, checked in by Colby Alexander Parsons <caparsons@…>, 3 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.