source: tests/stack.cfa @ 852ae0ea

ADTarm-ehast-experimentalenumforall-pointer-decayjacob/cs343-translationnew-ast-unique-exprpthread-emulationqualifiedEnum
Last change on this file since 852ae0ea 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.1 KB
RevLine 
[5e82d56]1#include <fstream.hfa>
2#include <stdlib.hfa>                                                                   // new, delete
[edf3ff1]3#include <bits/stack.hfa>
[5e82d56]4
5int main() {
6        // Fred test
7
8        struct Fred {
9                inline Colable;                                                                 // Plan 9 inheritance
10                int i;
11        };
12        void ?{}( Fred & fred ) { abort(); }
13        void ?{}( Fred & fred, int p ) with( fred ) {
14                i = p;
15        }
[b3c8496]16        Fred *& Next( Fred * n ) {
17                return (Fred *)Next( (Colable *)n );
18        }
19
20        bool listed( Fred * n ) {
21                return Next( (Colable *)n ) != 0p;
22        }
[5e82d56]23
24        Stack(Fred) fred;
25        StackIter(Fred) fredIter = { fred };
[3d0560d]26        Fred & f;
[5e82d56]27
28        sout | nlOff;                                                                           // turn off auto newline
29
30        for ( ; fredIter >> f; ) {                                                      // empty list
[3d0560d]31                sout | f.i | ' ';
[5e82d56]32        }
33        sout | "empty" | nl;
34       
[3d0560d]35        for ( i; 10 ) {
[636d3715]36                push( fred, *new( 2 * i ) );
[5e82d56]37        }
38
[3d0560d]39        for ( StackIter(Fred) iter = { fred }; iter >> f; ) {
40                sout | f.i | ' ';
[5e82d56]41        }
42        sout | nl;
43       
[3d0560d]44        for ( i; 9 ) {
[636d3715]45                delete( &pop( fred ) );
[5e82d56]46        }
47
48        for ( over( fredIter, fred ); fredIter >> f; ) {
[3d0560d]49                sout | f.i | ' ';
[5e82d56]50        }
51        sout | nl;
52       
[3d0560d]53        for ( i; 10 ) {
[636d3715]54                push( fred, *new( 2 * i + 1 ) );
[5e82d56]55        }
56        for ( over( fredIter, fred ); fredIter >> f; ) {
[3d0560d]57                sout | f.i | ' ';
[5e82d56]58        }
59        sout | nl;
60
61        for ( over( fredIter, fred ); fredIter >> f; ) {
[3d0560d]62                delete( &f );
[5e82d56]63        }
64
65        // Mary test
66
67        struct Mary {
68                inline Fred;                                                                    // Plan 9 inheritance
69                int j;
70        };
71        void ?{}( Mary & mary ) { abort(); }
72        void ?{}( Mary & mary, int p ) with( mary ) {
73                ((Fred &)mary){ p };
74                j = i = p;
75        }
76
[b3c8496]77        Mary *& Next( Mary * n ) {
78                return (Mary *)Next( (Colable *)n );
79        }
80
81        bool listed( Mary * n ) {
82                return Next( (Colable *)n ) != 0p;
83        }
84
[5e82d56]85        Stack(Mary) mary;
86        StackIter(Mary) maryIter = { mary };
[3d0560d]87        Mary & m;
[5e82d56]88
89        for ( ; maryIter >> m; ) {                                                      // empty list
[3d0560d]90                sout | m.i | m.j | ' ';
[5e82d56]91        }
92        sout | "empty" | nl;
93       
[3d0560d]94        for ( i; 10 ) {
[636d3715]95                push( mary, *new( 2 * i ) );
[5e82d56]96        }
97
[3d0560d]98        for ( StackIter(Mary) iter = { mary }; iter >> m; ) {
99                sout | m.i | m.j | ' ';
[5e82d56]100        }
101        sout | nl;
102       
[3d0560d]103        for ( i; 9 ) {
[636d3715]104                delete( &pop( mary ) );
[5e82d56]105        }
106
107        for ( over( maryIter, mary ); maryIter >> m; ) {
[3d0560d]108                sout | m.i | m.j | ' ';
[5e82d56]109        }
110        sout | nl;
111       
[3d0560d]112        for ( i; 10 ) {
[636d3715]113                push( mary, *new( 2 * i + 1 ) );
[5e82d56]114        }
115        for ( over( maryIter, mary ); maryIter >> m; ) {
[3d0560d]116                sout | m.i | m.j | ' ';
[5e82d56]117        }
118        sout | nl;
119
120        for ( over( maryIter, mary ); maryIter >> m; ) {
[3d0560d]121                delete( &m );
[5e82d56]122        }
123}
Note: See TracBrowser for help on using the repository browser.