source: tests/sequence.cfa @ f4f79dd

ADTarm-ehast-experimentalenumforall-pointer-decayjacob/cs343-translationnew-ast-unique-exprpthread-emulationqualifiedEnum
Last change on this file since f4f79dd was 19de7864, checked in by Colby Alexander Parsons <caparsons@…>, 3 years ago

removed listed requirement for collections since it was redundant

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