ORCA-C/Tests/Conformance/C24.0.3.CC
Stephen Heumann 91d33b586d Fix various C99+ conformance issues and bugs in test cases.
The main changes made to most tests are:

*Declarations always include explicit types, not relying on implicit int. The declaration of main in most test programs is changed to be "int main (void) {...}", adding an explicit return type and a prototype. (There are still some non-prototyped functions, though.)

*Functions are always declared before use, either by including a header or by providing a declaration for the specific function. The latter approach is usually used for printf, to avoid requiring ORCA/C to process stdio.h when compiling every test case (which might make test runs noticeably slower).

*Make all return statements in non-void functions (e.g. main) return a value.

*Avoid some instances of undefined behavior and type errors in printf and scanf calls.

Several miscellaneous bugs are also fixed.

There are still a couple test cases that intentionally rely on the C89 behavior, to ensure it still works.
2022-10-17 20:17:24 -05:00

102 lines
2.6 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* Conformance Test 24.0.3: Test the use of the extended character set */
#pragma lint -1
#include <stdio.h>
#include <string.h>
typedef enum {false, true} boolean;
int main (void)
{
boolean fail;
int a, b, c, i;
char str[128];
int <EFBFBD><EFBFBD>ƒ´ÄµÆ§·ˆ˜¸Ø¹Šš»ËŒœ¼Ì<EFBFBD><EFBFBD>½ÍŽž®¾ÎÞ<EFBFBD>Ÿ¯¿Ïß;
int <EFBFBD><EFBFBD>ƒ´ÄµÆƧ·Ë˜¸Ø¹ÌÍ»Ë<EFBFBD>œ¼Ì<EFBFBD>½Íƒž®®ÎÞ<EFBFBD>¯¯Îß;
/* Make sure alpha-"looking" characters are allowed in identifiers,
and that the lowercase versions are distinct from the uppercase
versions. */
fail = false;
<EFBFBD><EFBFBD>ƒ´ÄµÆ§·ˆ˜¸Ø¹Šš»ËŒœ¼Ì<EFBFBD><EFBFBD>½ÍŽž®¾ÎÞ<EFBFBD>Ÿ¯¿Ïß = 4;
<EFBFBD><EFBFBD>ƒ´ÄµÆƧ·Ë˜¸Ø¹ÌÍ»Ë<EFBFBD>œ¼Ì<EFBFBD>½Íƒž®®ÎÞ<EFBFBD>¯¯Îß = 5;
if (<EFBFBD><EFBFBD>ƒ´ÄµÆ§·ˆ˜¸Ø¹Šš»ËŒœ¼Ì<EFBFBD><EFBFBD>½ÍŽž®¾ÎÞ<EFBFBD>Ÿ¯¿Ïß != 4)
fail = true;
/* Make sure all special characters are allowed in strings */
strcpy(str, "");
for (i = 17; i <= 20; ++i)
if (str[i - 17] != i) {
fail = true;
printf("Character %d was incorrect in str.\n", i);
}
strcpy(str, "<EFBFBD>ƒ„…†‡ˆ‰ŠŒ<EFBFBD>Ž<EFBFBD><EFBFBD>“”•˜™šœ<EFBFBD>žŸ ¡¢£¤¥¦§¨©ª«"
"¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×Ø");
for (i = 128; i <= 216; ++i)
if (str[i - 128] != i) {
fail = true;
printf("Character %d was incorrect in str.\n", i);
}
if ('Þ' != 222) {
fail = true;
printf("Character 222 was incorrect in str.\n");
}
if ('ß' != 223) {
fail = true;
printf("Character 223 was incorrect in str.\n");
}
/* Make sure all special characters are allowed in comments */
/* The special character set is:
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 0 @ P ` p € <20>   ° À Ð
1  ! 1 A Q a q <20> ¡ ± Á Ñ
2  " 2 B R b r ¢ ² Â Ò
3  # 3 C S c s ƒ “ £ ³ Ã Ó
4  $ 4 D T d t „ ” ¤ ´ Ä Ô
5 % 5 E U e u … • ¥ µ Å Õ
6 & 6 F V f v † ¦ ¶ Æ Ö
7 ' 7 G W g w ‡ — § · Ç ×
8 ( 8 H X h x ˆ ˜ ¨ ¸ È Ø
9 ) 9 I Y i y ‰ ™ © ¹ É
A * 0 J Z j z Š š ª º Ê
B + : K [ k { « » Ë
C , ; L \ l | Œ œ ¬ ¼ Ì
D _ < M ] m } <20> <20> ­ ½ Í
E . = N ^ n ~ Ž ž ® ¾ Î Þ
F / ? O _ o <20> Ÿ ¯ ¿ Ï ß
*/
/* Make sure the special operators work */
/* Some lines also test the non-breaking space */
=Ê100;
=Ê3;
=ÊaÖb;
ifÊ(²Êb)
fail = true;
if (! (a ² a))
fail = true;
if (b ³ a)
fail = true;
if (! (b ³ b))
fail = true;
if (c ­ 33)
fail = true;
c = a Ç 2;
if (c ­ 400)
fail = true;
c = a È 2;
if (c ­ 25)
fail = true;
if (!fail)
printf("Passed Conformance Test 24.0.3\n");
else
printf("Failed Conformance Test 24.0.3\n");
}