scc

A fork of https://git.simple-cc.org/scc/ for Qute

git clone https://git.8pit.net/scc.git

 1/* taken from ISO/IEC 9899:1999 Section 6.10.3.5 p6 */
 2
 3#define str(s)      # s
 4#define xstr(s)     str(s)
 5#define debug(s, t) test1("x" # s "= %d, x" # t "= %d", \
 6		  x ## s, x ## t)
 7#define INCFILE(n) vers ## n
 8#define vers2      0200-cpp
 9#define glue(a, b) a ## b
10#define xglue(a, b) glue(a, b)
11#define HIGHLOW     "hello"
12#define LOW         LOW ", world"
13
14int
15test1(char *s, int x, int y)
16{
17	int i;
18
19	for (i = 0; s[i]; i++) {
20		if (s[i] != "x1= %d, x2= %d"[i])
21			return 0;
22	}
23	if (x + y != 3)
24		return 0;
25	return 1;
26}
27
28int
29test2(char *s1, char *s2)
30{
31	int i;
32
33	for (i = 0; s1[i]; i++) {
34		if (s1[i] != s2[i])
35			return 0;
36	}
37	return s1[i] == '\0' && s2[i] == '\0';
38}
39
40int
41test4(char *s)
42{
43	int i;
44
45	for (i = 0; s[i]; i++) {
46		if (s[i] != "hello"[i])
47			return 0;
48	}
49
50	return 1;
51}
52
53int
54test5(char *s)
55{
56	int i;
57
58	for (i = 0; s[i]; i++) {
59		if (s[i] != "hello, world"[i])
60			return 0;
61	}
62
63	return 1;
64}
65
66int
67main()
68{
69	int x1 = 1, x2 = 2;
70	char *s = "strncmp(\"abc\\0d\", \"abc\", '\\4') == 0: @\n";
71
72	if (!debug(1, 2))
73		return 1;
74
75	if (!test2(str(strncmp("abc\0d", "abc", '\4') // this goes away
76== 0) str(: @\n), s))
77		return 2;
78
79#include xstr(INCFILE(2).h)
80
81	if (x != 2)
82		return 3;
83
84	if (!test4(glue(HIGH, LOW)))
85		return 4;
86
87	if (!test5(xglue(HIGH, LOW)))
88		return 5;
89
90	return 0;
91}