source: tests/sequence.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.7 KB
Line 
1#include <fstream.hfa>
2#include <stdlib.hfa> // new, delete
3#include <bits/sequence.hfa>
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
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
25 Sequence(Fred) fred;
26 SeqIter(Fred) fredIter = { fred };
27 Fred & f;
28
29 sout | nlOff; // turn off auto newline
30
31 for ( ; fredIter >> f; ) { // empty list
32 sout | f.i | ' ';
33 }
34 sout | "empty" | nl;
35
36 for ( i; 10 ) {
37 add( fred, *new( 2 * i ) );
38 }
39
40 for ( SeqIter(Fred) iter = { fred }; iter >> f; ) {
41 sout | f.i | ' ';
42 }
43 sout | nl;
44
45 for ( i; 9 ) {
46 delete( &dropHead( fred ) );
47 }
48
49 for ( over( fredIter, fred ); fredIter >> f; ) {
50 sout | f.i | ' ';
51 }
52 sout | nl;
53
54 for ( i; 10 ) {
55 addTail( fred, *new( 2 * i + 1 ) );
56 }
57 for ( over( fredIter, fred ); fredIter >> f; ) {
58 sout | f.i | ' ';
59 }
60 sout | nl;
61
62 for ( i; 9 ) {
63 delete( &dropTail( fred ) );
64 }
65 for ( over( fredIter, fred ); fredIter >> f; ) {
66 sout | f.i | ' ';
67 }
68 sout | nl;
69
70 for ( over( fredIter, fred ); fredIter >> f; ) {
71 delete( &f );
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
86 Mary *& Back( Mary * n ) {
87 return (Mary *)Back( (Fred *)n );
88 }
89
90 Mary *& Next( Mary * n ) {
91 return (Mary *)Next( (Fred *)n );
92 }
93
94 Sequence(Mary) mary;
95 Sequence(Mary) baz;
96 SeqIter(Mary) maryIter = { mary };
97 Mary & m;
98
99 for ( ; maryIter >> m; ) { // empty list
100 sout | m.i | m.j | ' ';
101 }
102 sout | "empty" | nl;
103
104 for ( i; 10 ) {
105 add( mary, *new( 2 * i ) );
106 add( baz, *new( 2 * i ) );
107 }
108
109 for ( SeqIter(Mary) iter = { mary }; iter >> m; ) {
110 sout | m.i | m.j | ' ';
111 }
112 sout | nl;
113
114 for ( i; 9 ) {
115 delete( &dropHead( mary ) );
116 }
117
118 for ( over( maryIter, mary ); maryIter >> m; ) {
119 sout | m.i | m.j | ' ';
120 }
121 sout | nl;
122
123 for ( i; 10 ) {
124 addTail( mary, *new( 2 * i + 1 ) );
125 }
126 for ( over( maryIter, mary ); maryIter >> m; ) {
127 sout | m.i | m.j | ' ';
128 }
129 sout | nl;
130
131 for ( i; 9 ) {
132 delete( &dropTail( mary ) );
133 }
134 for ( over( maryIter, mary ); maryIter >> m; ) {
135 sout | m.i | m.j | ' ';
136 }
137 sout | nl;
138
139 transfer( mary, baz );
140
141 for ( over( maryIter, baz ); maryIter >> m; ) {
142 sout | m.i | m.j | ' ';
143 }
144 sout | "empty" | nl;
145
146 for ( over( maryIter, mary ); maryIter >> m; ) {
147 sout | m.i | m.j | ' ';
148 }
149 sout | nl;
150
151 for ( over( maryIter, mary ); maryIter >> m; ) {
152 delete( &m );
153 }
154}
Note: See TracBrowser for help on using the repository browser.