[d175767] | 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:
|
---|
[3f631d6] | 11 | // MR09
|
---|
[570e7ad] | 12 | // MR11
|
---|
| 13 | // MR13
|
---|
[d175767] | 14 | // MR15
|
---|
[570e7ad] | 15 | // MR16
|
---|
[d175767] | 16 |
|
---|
| 17 | // These MR points do not reject in the current revision, so they join the "happy run":
|
---|
[d03a386] | 18 | #define TRY_MR01
|
---|
| 19 | #define TRY_MR02
|
---|
| 20 | #define TRY_MR03
|
---|
| 21 | #define TRY_MR04
|
---|
| 22 | #define TRY_MR05
|
---|
| 23 | #define TRY_MR06
|
---|
| 24 | #define TRY_MR07
|
---|
| 25 | #define TRY_MR08
|
---|
| 26 | #define TRY_MR10
|
---|
[d175767] | 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";
|
---|
[d03a386] | 139 | MR01( {string s = 'a' + 'b'; // ab
|
---|
[d175767] | 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 |
|
---|
[d03a386] | 151 | MR02( {string s = 'a' + 'b' + s0; // abx
|
---|
[d175767] | 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 |
|
---|
[d03a386] | 181 | MR03( {string s = 'a' * 3; // aaa
|
---|
[d175767] | 182 | sout | s;} )
|
---|
| 183 | {string s = "b" * 3; // bbb
|
---|
| 184 | sout | s;}
|
---|
[d03a386] | 185 | {string s = ('a' + 'b') * 3; // ababab
|
---|
[d175767] | 186 | sout | s;}
|
---|
| 187 | {string s = ('c' + "d") * 3; // cdcdcd
|
---|
| 188 | sout | s;}
|
---|
| 189 | sout | nl; //
|
---|
| 190 |
|
---|
[d03a386] | 191 | MR04( {string s = 3 * 'a'; // aaa
|
---|
[d175767] | 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 = "";
|
---|
[d03a386] | 207 | MR05( s = 'a' + 'b'; // ab
|
---|
[d175767] | 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 = "";
|
---|
[d03a386] | 218 | MR06( s = 'a' + 'b' + s; // ab
|
---|
[d175767] | 219 | sout | s; )
|
---|
[d03a386] | 220 | s = 'a' + "b" + s; // abab
|
---|
[d175767] | 221 | sout | s;
|
---|
[d03a386] | 222 | s = "a" + 'b' + s; // ababab
|
---|
[d175767] | 223 | sout | s;
|
---|
[d03a386] | 224 | s = "a" + "b" + s; // abababab
|
---|
[d175767] | 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 = "";
|
---|
[d03a386] | 251 | MR07( s = 'a' * 3; // aaa
|
---|
[d175767] | 252 | sout | s; )
|
---|
| 253 | s = "b" * 3; // bbb
|
---|
| 254 | sout | s;
|
---|
[d03a386] | 255 | s = ('a' + 'b') * 3; // ababab
|
---|
[d175767] | 256 | sout | s;
|
---|
| 257 | s = ('c' + "d") * 3; // cdcdcd
|
---|
| 258 | sout | s;
|
---|
| 259 | sout | nl; //
|
---|
| 260 |
|
---|
| 261 | s = "";
|
---|
[d03a386] | 262 | MR08( s = 3 * 'a'; // aaa
|
---|
[d175767] | 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 |
|
---|
[3f631d6] | 277 | MR09( sout | 'a' + 'b'; ) // (ambiguous)
|
---|
[d175767] | 278 | sout | 'a' + "b"; // ab
|
---|
| 279 | sout | "a" + 'b'; // ab
|
---|
| 280 | sout | "a" + "b"; // ab
|
---|
| 281 | sout | nl; //
|
---|
| 282 |
|
---|
[d03a386] | 283 | MR10( sout | 'a' + 'b' + s; ) // abx
|
---|
[d175767] | 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 |
|
---|
[570e7ad] | 301 | MR11( sout | 'a' * 3; ) // (ambiguous)
|
---|
[d175767] | 302 | sout | "b" * 3; // bbb
|
---|
[d03a386] | 303 | MR12( sout | ('a' + 'b') * 3; ) // ababab (ideally ambiguous, known approximation flaw)
|
---|
[d175767] | 304 | sout | ('c' + "d") * 3; // cdcdcd
|
---|
| 305 | sout | nl; //
|
---|
| 306 |
|
---|
[570e7ad] | 307 | MR13( sout | 3 * 'a'; ) // (ambiguous)
|
---|
[d175767] | 308 | sout | 3 * "b"; // bbb
|
---|
[d03a386] | 309 | MR14( sout | 3 * ('a' + 'b'); ) // ababab (ideally ambiguous, known approximation flaw)
|
---|
[d175767] | 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)
|
---|
[570e7ad] | 318 | MR16( printf( "%d\n", 'a' * 3 ); ) // (ambiguous)
|
---|
[d175767] | 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 | }
|
---|
[c4f8c4bf] | 324 | sout | nl;
|
---|
| 325 |
|
---|
| 326 | s = "";
|
---|
| 327 | s += 'a'; sout | s; // a
|
---|
| 328 | s += "a"; sout | s; // aa
|
---|
| 329 | s += s; sout | s; // aaaa
|
---|
| 330 | sout | nl;
|
---|
| 331 |
|
---|
| 332 | s = "";
|
---|
| 333 | s += 'a' + 'b'; sout | s; // ab
|
---|
| 334 | s += "a" + "b"; sout | s; // abab
|
---|
| 335 | s += s + 'a' + 'b'; sout | s; // ababababab
|
---|
| 336 | sout | nl;
|
---|
| 337 |
|
---|
| 338 | {
|
---|
| 339 | char ch = 42; sout | (unsigned char) ch; // 42
|
---|
| 340 | ch += 'a'; sout | (unsigned char) ch; // 139
|
---|
| 341 | sout | nl;
|
---|
| 342 | }
|
---|
| 343 |
|
---|
| 344 | {
|
---|
| 345 | char retc = 'a';
|
---|
| 346 | string rets = "a";
|
---|
| 347 | char & weird() { return retc; }
|
---|
| 348 | string & weird() { return rets; }
|
---|
| 349 | (return char &) weird();
|
---|
| 350 | (return string &) weird();
|
---|
| 351 | weird() += 'b'; // (ideally ambiguous)
|
---|
| 352 | sout | retc | ' ' | rets; // a ab (known approximation flaw)
|
---|
| 353 | }
|
---|
[d175767] | 354 | }
|
---|