source: tests/stack.cfa@ a00a2c1

ADT arm-eh ast-experimental enum forall-pointer-decay jacob/cs343-translation new-ast-unique-expr pthread-emulation qualifiedEnum
Last change on this file since a00a2c1 was b3c8496, checked in by Colby Alexander Parsons <caparsons@…>, 5 years ago

updated tests to reflect changes to collections

  • Property mode set to 100644
File size: 2.1 KB
Line 
1#include <fstream.hfa>
2#include <stdlib.hfa> // new, delete
3#include <bits/stack.hfa>
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 }
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 }
23
24 Stack(Fred) fred;
25 StackIter(Fred) fredIter = { fred };
26 Fred & f;
27
28 sout | nlOff; // turn off auto newline
29
30 for ( ; fredIter >> 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 for ( i; 9 ) {
45 delete( &pop( fred ) );
46 }
47
48 for ( over( fredIter, fred ); fredIter >> f; ) {
49 sout | f.i | ' ';
50 }
51 sout | nl;
52
53 for ( i; 10 ) {
54 push( fred, *new( 2 * i + 1 ) );
55 }
56 for ( over( fredIter, fred ); fredIter >> f; ) {
57 sout | f.i | ' ';
58 }
59 sout | nl;
60
61 for ( over( fredIter, fred ); fredIter >> f; ) {
62 delete( &f );
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
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
85 Stack(Mary) mary;
86 StackIter(Mary) maryIter = { mary };
87 Mary & m;
88
89 for ( ; maryIter >> m; ) { // empty list
90 sout | m.i | m.j | ' ';
91 }
92 sout | "empty" | nl;
93
94 for ( i; 10 ) {
95 push( mary, *new( 2 * i ) );
96 }
97
98 for ( StackIter(Mary) iter = { mary }; iter >> m; ) {
99 sout | m.i | m.j | ' ';
100 }
101 sout | nl;
102
103 for ( i; 9 ) {
104 delete( &pop( mary ) );
105 }
106
107 for ( over( maryIter, mary ); maryIter >> m; ) {
108 sout | m.i | m.j | ' ';
109 }
110 sout | nl;
111
112 for ( i; 10 ) {
113 push( mary, *new( 2 * i + 1 ) );
114 }
115 for ( over( maryIter, mary ); maryIter >> m; ) {
116 sout | m.i | m.j | ' ';
117 }
118 sout | nl;
119
120 for ( over( maryIter, mary ); maryIter >> m; ) {
121 delete( &m );
122 }
123}
Note: See TracBrowser for help on using the repository browser.