source: tests/collections/stack.cfa@ b28ce93

Last change on this file since b28ce93 was bada452, checked in by Andrew Beach <ajbeach@…>, 8 months ago

Removed warnings from serveral tests and removed them from the ..._TO_INVESTIGATE list. One test triggered a Cforall warning and a new test to check that has been added. collections/vector-demo has no warnings in its body, but the library it uses does have warnings and will have to move after that is fixed.

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