1 | #include <fstream.hfa>
|
---|
2 | #include <string.hfa>
|
---|
3 |
|
---|
4 | // "May Reject" (MR) handling
|
---|
5 | // This test traces how several SUT revisions treat a common set of cases.
|
---|
6 | // Sometimes the handling is a compiler rejection.
|
---|
7 | // When it is, that case has to be skipped from the main run, and run individually to show the rejection.
|
---|
8 | // Just because some SUT revision will reject / once rejected, doesn't mean it rejects currently.
|
---|
9 |
|
---|
10 | // These MR points do reject in the current revision, so they have satellite "-ERR" cases:
|
---|
11 | // MR01
|
---|
12 | // MR02
|
---|
13 | // MR03
|
---|
14 | // MR04
|
---|
15 | // MR05
|
---|
16 | // MR06
|
---|
17 | // MR07
|
---|
18 | // MR08
|
---|
19 | // MR09
|
---|
20 | // MR10
|
---|
21 | // MR11
|
---|
22 | // MR13
|
---|
23 | // MR15
|
---|
24 | // MR16
|
---|
25 |
|
---|
26 | // These MR points do not reject in the current revision, so they join the "happy run":
|
---|
27 | #define TRY_MR12
|
---|
28 | #define TRY_MR14
|
---|
29 |
|
---|
30 |
|
---|
31 | #ifdef TRY_MR01
|
---|
32 | #define MR01(...) __VA_ARGS__
|
---|
33 | #else
|
---|
34 | #define MR01(...) sout | "(skip)";
|
---|
35 | #endif
|
---|
36 |
|
---|
37 | #ifdef TRY_MR02
|
---|
38 | #define MR02(...) __VA_ARGS__
|
---|
39 | #else
|
---|
40 | #define MR02(...) sout | "(skip)";
|
---|
41 | #endif
|
---|
42 |
|
---|
43 | #ifdef TRY_MR03
|
---|
44 | #define MR03(...) __VA_ARGS__
|
---|
45 | #else
|
---|
46 | #define MR03(...) sout | "(skip)";
|
---|
47 | #endif
|
---|
48 |
|
---|
49 | #ifdef TRY_MR04
|
---|
50 | #define MR04(...) __VA_ARGS__
|
---|
51 | #else
|
---|
52 | #define MR04(...) sout | "(skip)";
|
---|
53 | #endif
|
---|
54 |
|
---|
55 | #ifdef TRY_MR05
|
---|
56 | #define MR05(...) __VA_ARGS__
|
---|
57 | #else
|
---|
58 | #define MR05(...) sout | "(skip)";
|
---|
59 | #endif
|
---|
60 |
|
---|
61 | #ifdef TRY_MR06
|
---|
62 | #define MR06(...) __VA_ARGS__
|
---|
63 | #else
|
---|
64 | #define MR06(...) sout | "(skip)";
|
---|
65 | #endif
|
---|
66 |
|
---|
67 | #ifdef TRY_MR07
|
---|
68 | #define MR07(...) __VA_ARGS__
|
---|
69 | #else
|
---|
70 | #define MR07(...) sout | "(skip)";
|
---|
71 | #endif
|
---|
72 |
|
---|
73 | #ifdef TRY_MR08
|
---|
74 | #define MR08(...) __VA_ARGS__
|
---|
75 | #else
|
---|
76 | #define MR08(...) sout | "(skip)";
|
---|
77 | #endif
|
---|
78 |
|
---|
79 | #ifdef TRY_MR09
|
---|
80 | #define MR09(...) __VA_ARGS__
|
---|
81 | #else
|
---|
82 | #define MR09(...) sout | "(skip)";
|
---|
83 | #endif
|
---|
84 |
|
---|
85 | #ifdef TRY_MR10
|
---|
86 | #define MR10(...) __VA_ARGS__
|
---|
87 | #else
|
---|
88 | #define MR10(...) sout | "(skip)";
|
---|
89 | #endif
|
---|
90 |
|
---|
91 | #ifdef TRY_MR11
|
---|
92 | #define MR11(...) __VA_ARGS__
|
---|
93 | #else
|
---|
94 | #define MR11(...) sout | "(skip)";
|
---|
95 | #endif
|
---|
96 |
|
---|
97 | #ifdef TRY_MR12
|
---|
98 | #define MR12(...) __VA_ARGS__
|
---|
99 | #else
|
---|
100 | #define MR12(...) sout | "(skip)";
|
---|
101 | #endif
|
---|
102 |
|
---|
103 | #ifdef TRY_MR13
|
---|
104 | #define MR13(...) __VA_ARGS__
|
---|
105 | #else
|
---|
106 | #define MR13(...) sout | "(skip)";
|
---|
107 | #endif
|
---|
108 |
|
---|
109 | #ifdef TRY_MR14
|
---|
110 | #define MR14(...) __VA_ARGS__
|
---|
111 | #else
|
---|
112 | #define MR14(...) sout | "(skip)";
|
---|
113 | #endif
|
---|
114 |
|
---|
115 | #ifdef TRY_MR15
|
---|
116 | #define MR15(...) __VA_ARGS__
|
---|
117 | #else
|
---|
118 | #define MR15(...) sout | "(skip)";
|
---|
119 | #endif
|
---|
120 |
|
---|
121 | #ifdef TRY_MR16
|
---|
122 | #define MR16(...) __VA_ARGS__
|
---|
123 | #else
|
---|
124 | #define MR16(...) sout | "(skip)";
|
---|
125 | #endif
|
---|
126 |
|
---|
127 |
|
---|
128 | int main() {
|
---|
129 | sout | "------------- Explicit char arithmetic";
|
---|
130 | {
|
---|
131 | char ch;
|
---|
132 | ch = 'a' + 'b';
|
---|
133 | sout | ch; // Ã
|
---|
134 | sout | nl;
|
---|
135 | }
|
---|
136 |
|
---|
137 |
|
---|
138 | sout | "------------- Initialization";
|
---|
139 | MR01( {string s = 'a' + 'b'; // (ambiguous)
|
---|
140 | sout | s;} )
|
---|
141 | {string s = 'a' + "b"; // ab
|
---|
142 | sout | s;}
|
---|
143 | {string s = "a" + 'b'; // ab
|
---|
144 | sout | s;}
|
---|
145 | {string s = "a" + "b"; // ab
|
---|
146 | sout | s;}
|
---|
147 | sout | nl; //
|
---|
148 |
|
---|
149 | string s0 = "x";
|
---|
150 |
|
---|
151 | MR02( {string s = 'a' + 'b' + s0; // (ambiguous)
|
---|
152 | sout | s;} )
|
---|
153 | {string s = 'a' + "b" + s0; // abx
|
---|
154 | sout | s;}
|
---|
155 | {string s = "a" + 'b' + s0; // abx
|
---|
156 | sout | s;}
|
---|
157 | {string s = "a" + "b" + s0; // abx
|
---|
158 | sout | s;}
|
---|
159 | sout | nl; //
|
---|
160 |
|
---|
161 | {string s = s0 + 'a' + 'b'; // xab
|
---|
162 | sout | s;}
|
---|
163 | {string s = s0 + 'a' + "b"; // xab
|
---|
164 | sout | s;}
|
---|
165 | {string s = s0 + "a" + 'b'; // xab
|
---|
166 | sout | s;}
|
---|
167 | {string s = s0 + "a" + "b"; // xab
|
---|
168 | sout | s;}
|
---|
169 | sout | nl; //
|
---|
170 |
|
---|
171 | {string s = 'a' + s0 + 'b'; // axb
|
---|
172 | sout | s;}
|
---|
173 | {string s = 'a' + s0 + "b"; // axb
|
---|
174 | sout | s;}
|
---|
175 | {string s = "a" + s0 + 'b'; // axb
|
---|
176 | sout | s;}
|
---|
177 | {string s = "a" + s0 + "b"; // axb
|
---|
178 | sout | s;}
|
---|
179 | sout | nl; //
|
---|
180 |
|
---|
181 | MR03( {string s = 'a' * 3; // (ambiguous)
|
---|
182 | sout | s;} )
|
---|
183 | {string s = "b" * 3; // bbb
|
---|
184 | sout | s;}
|
---|
185 | {string s = ('a' + 'b') * 3; // ÃÃÃ (expecting ambiguous, likely from #309)
|
---|
186 | sout | s;}
|
---|
187 | {string s = ('c' + "d") * 3; // cdcdcd
|
---|
188 | sout | s;}
|
---|
189 | sout | nl; //
|
---|
190 |
|
---|
191 | MR04( {string s = 3 * 'a'; // (ambiguous)
|
---|
192 | sout | s;} )
|
---|
193 | {string s = 3 * "b"; // bbb
|
---|
194 | sout | s;}
|
---|
195 | {string s = 3 * ('a' + 'b'); // ababab
|
---|
196 | sout | s;}
|
---|
197 | {string s = 3 * ('c' + "d"); // cdcdcd
|
---|
198 | sout | s;}
|
---|
199 | sout | nl; //
|
---|
200 |
|
---|
201 |
|
---|
202 | sout | "------------- Assignment";
|
---|
203 |
|
---|
204 | string s;
|
---|
205 |
|
---|
206 | s = "";
|
---|
207 | MR05( s = 'a' + 'b'; // (ambiguous)
|
---|
208 | sout | s; )
|
---|
209 | s = 'a' + "b"; // ab
|
---|
210 | sout | s;
|
---|
211 | s = "a" + 'b'; // ab
|
---|
212 | sout | s;
|
---|
213 | s = "a" + "b"; // ab
|
---|
214 | sout | s;
|
---|
215 | sout | nl; //
|
---|
216 |
|
---|
217 | s = "";
|
---|
218 | MR06( s = 'a' + 'b' + s; // (ambiguous)
|
---|
219 | sout | s; )
|
---|
220 | s = 'a' + "b" + s; // ab
|
---|
221 | sout | s;
|
---|
222 | s = "a" + 'b' + s; // abab
|
---|
223 | sout | s;
|
---|
224 | s = "a" + "b" + s; // ababab
|
---|
225 | sout | s;
|
---|
226 | sout | nl; //
|
---|
227 |
|
---|
228 | s = "";
|
---|
229 | s = s + 'a' + 'b'; // ab
|
---|
230 | sout | s;
|
---|
231 | s = s + 'a' + "b"; // abab
|
---|
232 | sout | s;
|
---|
233 | s = s + "a" + 'b'; // ababab
|
---|
234 | sout | s;
|
---|
235 | s = s + "a" + "b"; // abababab
|
---|
236 | sout | s;
|
---|
237 | sout | nl; //
|
---|
238 |
|
---|
239 | s = "";
|
---|
240 | s = 'a' + s + 'b'; // ab
|
---|
241 | sout | s;
|
---|
242 | s = 'a' + s + "b"; // aabb
|
---|
243 | sout | s;
|
---|
244 | s = "a" + s + 'b'; // aaabbb
|
---|
245 | sout | s;
|
---|
246 | s = "a" + s + "b"; // aaaabbbb
|
---|
247 | sout | s;
|
---|
248 | sout | nl; //
|
---|
249 |
|
---|
250 | s = "";
|
---|
251 | MR07( s = 'a' * 3; // (ambiguous)
|
---|
252 | sout | s; )
|
---|
253 | s = "b" * 3; // bbb
|
---|
254 | sout | s;
|
---|
255 | s = ('a' + 'b') * 3; // ÃÃÃ (expecting ambiguous, likely from #309)
|
---|
256 | sout | s;
|
---|
257 | s = ('c' + "d") * 3; // cdcdcd
|
---|
258 | sout | s;
|
---|
259 | sout | nl; //
|
---|
260 |
|
---|
261 | s = "";
|
---|
262 | MR08( s = 3 * 'a'; // (ambiguous)
|
---|
263 | sout | s; )
|
---|
264 | s = 3 * "b"; // bbb
|
---|
265 | sout | s;
|
---|
266 | s = 3 * ('a' + 'b'); // ababab
|
---|
267 | sout | s;
|
---|
268 | s = 3 * ('c' + "d"); // cdcdcd
|
---|
269 | sout | s;
|
---|
270 | sout | nl; //
|
---|
271 |
|
---|
272 |
|
---|
273 | sout | "------------- Bare (sout-direct)";
|
---|
274 |
|
---|
275 | s = "x";
|
---|
276 |
|
---|
277 | MR09( sout | 'a' + 'b'; ) // (ambiguous)
|
---|
278 | sout | 'a' + "b"; // ab
|
---|
279 | sout | "a" + 'b'; // ab
|
---|
280 | sout | "a" + "b"; // ab
|
---|
281 | sout | nl; //
|
---|
282 |
|
---|
283 | MR10( sout | 'a' + 'b' + s; ) // (ambiguous)
|
---|
284 | sout | 'a' + "b" + s; // abx
|
---|
285 | sout | "a" + 'b' + s; // abx
|
---|
286 | sout | "a" + "b" + s; // abx
|
---|
287 | sout | nl; //
|
---|
288 |
|
---|
289 | sout | s + 'a' + 'b'; // xab
|
---|
290 | sout | s + 'a' + "b"; // xab
|
---|
291 | sout | s + "a" + 'b'; // xab
|
---|
292 | sout | s + "a" + "b"; // xab
|
---|
293 | sout | nl; //
|
---|
294 |
|
---|
295 | sout | 'a' + s + 'b'; // axb
|
---|
296 | sout | 'a' + s + "b"; // axb
|
---|
297 | sout | "a" + s + 'b'; // axb
|
---|
298 | sout | "a" + s + "b"; // axb
|
---|
299 | sout | nl; //
|
---|
300 |
|
---|
301 | MR11( sout | 'a' * 3; ) // (ambiguous)
|
---|
302 | sout | "b" * 3; // bbb
|
---|
303 | MR12( sout | ('a' + 'b') * 3; ) // 585 (expecting ambiguous, likely from #309)
|
---|
304 | sout | ('c' + "d") * 3; // cdcdcd
|
---|
305 | sout | nl; //
|
---|
306 |
|
---|
307 | MR13( sout | 3 * 'a'; ) // (ambiguous)
|
---|
308 | sout | 3 * "b"; // bbb
|
---|
309 | MR14( sout | 3 * ('a' + 'b'); ) // 585 (expecting ambiguous, likely from #309)
|
---|
310 | sout | 3 * ('c' + "d"); // cdcdcd
|
---|
311 | sout | nl; //
|
---|
312 |
|
---|
313 | sout | "------------- Miscellany";
|
---|
314 |
|
---|
315 | // random examples that have been discussed
|
---|
316 |
|
---|
317 | MR15( printf( "%c\n", 'a' + 'b'); ) // (ambiguous)
|
---|
318 | MR16( printf( "%d\n", 'a' * 3 ); ) // (ambiguous)
|
---|
319 |
|
---|
320 | { // (picks arithmetic; there is no interpretation of `_ + 3` that's string)
|
---|
321 | char ch = 42;
|
---|
322 | printf( "0x%x 0x%x\n", ch, ch + 3 ); // 0x3 0x6
|
---|
323 | }
|
---|
324 | }
|
---|