source: tests/stack.cfa@ 720b1a9

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 720b1a9 was 19de7864, checked in by Colby Alexander Parsons <caparsons@…>, 5 years ago

removed listed requirement for collections since it was redundant

  • 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
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 Stack(Fred) fred;
21 StackIter(Fred) fredIter = { fred };
22 Fred & f;
23
24 sout | nlOff; // turn off auto newline
25
26 for ( ; fredIter >> f; ) { // empty list
27 sout | f.i | ' ';
28 }
29 sout | "empty" | nl;
30
31 for ( i; 10 ) {
32 push( fred, *new( 2 * i ) );
33 }
34
35 for ( StackIter(Fred) iter = { fred }; iter >> f; ) {
36 sout | f.i | ' ';
37 }
38 sout | nl;
39
40 for ( i; 9 ) {
41 delete( &pop( fred ) );
42 }
43
44 for ( over( fredIter, fred ); fredIter >> f; ) {
45 sout | f.i | ' ';
46 }
47 sout | nl;
48
49 for ( i; 10 ) {
50 push( fred, *new( 2 * i + 1 ) );
51 }
52 for ( over( fredIter, fred ); fredIter >> f; ) {
53 sout | f.i | ' ';
54 }
55 sout | nl;
56
57 for ( over( fredIter, fred ); fredIter >> f; ) {
58 delete( &f );
59 }
60
61 // Mary test
62
63 struct Mary {
64 inline Fred; // Plan 9 inheritance
65 int j;
66 };
67 void ?{}( Mary & mary ) { abort(); }
68 void ?{}( Mary & mary, int p ) with( mary ) {
69 ((Fred &)mary){ p };
70 j = i = p;
71 }
72
73 Mary *& Next( Mary * n ) {
74 return (Mary *)Next( (Fred *)n );
75 }
76
77 Stack(Mary) mary;
78 StackIter(Mary) maryIter = { mary };
79 Mary & m;
80
81 for ( ; maryIter >> m; ) { // empty list
82 sout | m.i | m.j | ' ';
83 }
84 sout | "empty" | nl;
85
86 for ( i; 10 ) {
87 push( mary, *new( 2 * i ) );
88 }
89
90 for ( StackIter(Mary) iter = { mary }; iter >> m; ) {
91 sout | m.i | m.j | ' ';
92 }
93 sout | nl;
94
95 for ( i; 9 ) {
96 delete( &pop( mary ) );
97 }
98
99 for ( over( maryIter, mary ); maryIter >> m; ) {
100 sout | m.i | m.j | ' ';
101 }
102 sout | nl;
103
104 for ( i; 10 ) {
105 push( mary, *new( 2 * i + 1 ) );
106 }
107 for ( over( maryIter, mary ); maryIter >> m; ) {
108 sout | m.i | m.j | ' ';
109 }
110 sout | nl;
111
112 for ( over( maryIter, mary ); maryIter >> m; ) {
113 delete( &m );
114 }
115}
Note: See TracBrowser for help on using the repository browser.