source: tests/collections/stack.cfa @ a7d696f

ADTast-experimentalpthread-emulation
Last change on this file since a7d696f was a7d696f, checked in by z277zhu <z277zhu@…>, 23 months ago

added pthread symbol interpose

Signed-off-by: z277zhu <z277zhu@…>

  • Property mode set to 100644
File size: 2.0 KB
Line 
1#include <fstream.hfa>
2#include <stdlib.hfa>                                                                   // new, delete
3#include <bits/stack.hfa>
4
5struct Fred {
6                inline Colable;                                                                 // Plan 9 inheritance
7                int i;
8};
9
10Stack(Fred) fred;
11
12int main() {
13        // Fred test
14
15       
16        void ?{}( Fred & fred ) { abort(); }
17        void ?{}( Fred & fred, int p ) with( fred ) {
18                i = p;
19        }
20        Fred *& Next( Fred * n ) {
21                return (Fred *)Next( (Colable *)n );
22        }
23
24       
25        StackIter(Fred) inter = { fred };
26        Fred & f;
27
28        sout | nlOff;                                                                           // turn off auto newline
29
30        for ( ; inter | f; ) {                                                  // empty list
31                sout | f.i | ' ';
32        }
33        sout | "empty" | nl;
34       
35        for ( i; 10 ) {
36                push( fred, *new( 2 * i ) );
37        }
38
39        for ( StackIter(Fred) iter = { fred }; iter | f; ) {
40                sout | f.i | ' ';
41        }
42        sout | nl;
43
44        sout | head( fred ).i | nl;
45       
46        for ( i; 9 ) {
47                delete( &pop( fred ) );
48        }
49
50        for ( over( inter, fred ); inter | f; ) {
51                sout | f.i | ' ';
52        }
53        sout | nl;
54       
55        for ( i; 10 ) {
56                push( fred, *new( 2 * i + 1 ) );
57        }
58        for ( over( inter, fred ); inter | f; ) {
59                sout | f.i | ' ';
60        }
61        sout | nl;
62
63        for ( over( inter, fred ); inter | f; ) {
64                delete( &f );
65        }
66
67        // Mary test
68
69        struct Mary {
70                inline Fred;                                                                    // Plan 9 inheritance
71                int j;
72        };
73        void ?{}( Mary & mary ) { abort(); }
74        void ?{}( Mary & mary, int p ) with( mary ) {
75                ((Fred &)mary){ p };
76                j = p;
77        }
78
79        Mary *& Next( Mary * n ) {
80                return (Mary *)Next( (Fred *)n );
81        }
82
83        Stack(Mary) mary;
84        StackIter(Mary) maryIter = { mary };
85        Mary & m;
86
87        for ( ; maryIter | m; ) {                                                       // empty list
88                sout | m.i | m.j | ' ';
89        }
90        sout | "empty" | nl;
91       
92        for ( i; 10 ) {
93                push( mary, *new( 2 * i ) );
94        }
95
96        for ( StackIter(Mary) iter = { mary }; iter | m; ) {
97                sout | m.i | m.j | ' ';
98        }
99        sout | nl;
100       
101        for ( i; 9 ) {
102                delete( &pop( mary ) );
103        }
104
105        for ( over( maryIter, mary ); maryIter | m; ) {
106                sout | m.i | m.j | ' ';
107        }
108        sout | nl;
109       
110        for ( i; 10 ) {
111                push( mary, *new( 2 * i + 1 ) );
112        }
113        for ( over( maryIter, mary ); maryIter | m; ) {
114                sout | m.i | m.j | ' ';
115        }
116        sout | nl;
117
118        for ( over( maryIter, mary ); maryIter | m; ) {
119                delete( &m );
120        }
121}
Note: See TracBrowser for help on using the repository browser.