shithub: scc

Download patch

ref: fa392c44270193bb1f0e3c3570e903a68703c9d0
parent: be49f37bb7908872c0b9b1bee44bfde99ba73f13
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Mon Jun 20 14:11:38 EDT 2016

Add test suite from https://github.com/andrewchambers/qc

diff: cannot open b/tests/include//null: file does not exist: 'b/tests/include//null' diff: cannot open b/tests//null: file does not exist: 'b/tests//null'
--- /dev/null
+++ b/tests/0001-sanity.c
@@ -1,0 +1,6 @@
+
+int
+main()
+{
+	return 0;
+}
--- /dev/null
+++ b/tests/0002-expr.c
@@ -1,0 +1,6 @@
+
+int
+main()
+{
+	return 3-3;
+}
--- /dev/null
+++ b/tests/0003-local.c
@@ -1,0 +1,10 @@
+
+
+int
+main()
+{
+	int x;
+	
+	x = 4;
+	return x - 4;
+}
--- /dev/null
+++ b/tests/0004-pointer.c
@@ -1,0 +1,14 @@
+
+
+int
+main()
+{
+	int x;
+	int *p;
+	
+	x = 4;
+	p = &x;
+	*p = 0;
+
+	return *p;
+}
--- /dev/null
+++ b/tests/0005-ifstmt.c
@@ -1,0 +1,24 @@
+
+int
+main()
+{
+	int x;
+	int *p;
+	int **pp;
+
+	x = 0;
+	p = &x;
+	pp = &p;
+
+	if(*p)
+		return 1;
+	if(**pp)
+		return 1;
+	else
+		**pp = 1;
+
+	if(x)
+		return 0;
+	else
+		return 1;
+}
--- /dev/null
+++ b/tests/0006-whilestmt.c
@@ -1,0 +1,11 @@
+
+int
+main()
+{
+	int x;
+
+	x = 50;
+	while (x)
+		x = x - 1;
+	return x;
+}
--- /dev/null
+++ b/tests/0007-forstmt.c
@@ -1,0 +1,16 @@
+
+int
+main()
+{
+	int x;
+	
+	x = 1;
+	for(x = 10; x; x = x - 1)
+		;
+	if(x)
+		return 1;
+	x = 10;
+	for (;x;)
+		x = x - 1;
+	return x;
+}
--- /dev/null
+++ b/tests/0008-dowhilestmt.c
@@ -1,0 +1,12 @@
+
+int
+main()
+{
+	int x;
+
+	x = 50;
+	do 
+		x = x - 1;
+	while(x);
+	return x;
+}
--- /dev/null
+++ b/tests/0009-expr.c
@@ -1,0 +1,12 @@
+
+int
+main()
+{
+	int x;
+	
+	x = 1;
+	x = x * 10;
+	x = x / 2;
+	x = x % 3;
+	return x - 2;
+}
--- /dev/null
+++ b/tests/0010-goto.c
@@ -1,0 +1,13 @@
+int
+main()
+{
+	start:
+		goto next;
+		return 1;
+	success:
+		return 0;
+	next:
+	foo:
+		goto success;
+		return 1;
+}
--- /dev/null
+++ b/tests/0011-assign.c
@@ -1,0 +1,9 @@
+
+int
+main()
+{
+	int x;
+	int y;
+	x = y = 0;
+	return x;
+}
--- /dev/null
+++ b/tests/0012-expr.c
@@ -1,0 +1,6 @@
+
+int
+main()
+{
+	return (2 + 2) * 2 - 8;
+}
--- /dev/null
+++ b/tests/0013-addridx.c
@@ -1,0 +1,11 @@
+
+int
+main()
+{
+	int x;
+	int *p;
+	
+	x = 0;
+	p = &x;
+	return p[0];
+}
--- /dev/null
+++ b/tests/0014-assignidx.c
@@ -1,0 +1,12 @@
+
+int
+main()
+{
+	int x;
+	int *p;
+	
+	x = 1;
+	p = &x;
+	p[0] = 0;
+	return x;
+}
--- /dev/null
+++ b/tests/0015-localarray.c
@@ -1,0 +1,11 @@
+
+int
+main()
+{
+	int arr[2];
+
+	arr[0] = 1;
+	arr[1] = 2;
+
+	return arr[0] + arr[1] - 3;
+}
--- /dev/null
+++ b/tests/0016-addrarray.c
@@ -1,0 +1,10 @@
+int
+main()
+{
+	int arr[2];
+	int *p;
+	
+	p = &arr[1];
+	*p = 0;
+	return arr[1];
+}
--- /dev/null
+++ b/tests/0017-struct.c
@@ -1,0 +1,11 @@
+
+
+int
+main()
+{
+	struct { int x; int y; } s;
+	
+	s.x = 3;
+	s.y = 5;
+	return s.y - s.x - 2; 
+}
--- /dev/null
+++ b/tests/0018-structptr.c
@@ -1,0 +1,15 @@
+
+
+int
+main()
+{
+
+	struct S { int x; int y; } s;
+	struct S *p;
+
+	p = &s;	
+	s.x = 1;
+	p->y = 2;
+	return p->y + p->x - 3; 
+}
+
--- /dev/null
+++ b/tests/0019-selfrefstruct.c
@@ -1,0 +1,11 @@
+
+int
+main()
+{
+	struct S { struct S *p; int x; } s;
+	
+	s.x = 0;
+	s.p = &s;
+	return s.p->p->p->p->p->x;
+}
+
--- /dev/null
+++ b/tests/0020-ptrptr.c
@@ -1,0 +1,11 @@
+
+int
+main()
+{
+	int x, *p, **pp;
+	
+	x = 0;
+	p = &x;
+	pp = &p;
+	return **pp;
+}
--- /dev/null
+++ b/tests/0021-intfunc.c
@@ -1,0 +1,13 @@
+
+int
+foo(int a, int b)
+{
+	return 2 + a - b;
+}
+
+int
+main()
+{
+	return foo(1, 3);
+}
+
--- /dev/null
+++ b/tests/0022-typedef.c
@@ -1,0 +1,11 @@
+
+typedef int x;
+
+int
+main()
+{
+	x v;
+	v = 0;
+	return v;
+}
+
--- /dev/null
+++ b/tests/0023-global.c
@@ -1,0 +1,10 @@
+
+int x;
+
+int
+main()
+{
+	x = 0;
+	return x;
+}
+
--- /dev/null
+++ b/tests/0024-typedefstruct.c
@@ -1,0 +1,13 @@
+
+typedef struct { int x; int y; } s;
+
+s v;
+
+int
+main()
+{
+	v.x = 1;
+	v.y = 2;
+	return 3 - v.x - v.y;
+}
+
--- /dev/null
+++ b/tests/0025-string.c
@@ -1,0 +1,11 @@
+
+int strlen(char *);
+
+int
+main()
+{
+	char *p;
+	
+	p = "hello";
+	return strlen(p) - 5;
+}
--- /dev/null
+++ b/tests/0026-implicitret.c
@@ -1,0 +1,6 @@
+
+main()
+{
+	return 0;
+}
+
--- /dev/null
+++ b/tests/0027-charval.c
@@ -1,0 +1,9 @@
+
+int
+main()
+{
+	char *p;
+	
+	p = "hello";
+	return p[0] - 104;
+}
--- /dev/null
+++ b/tests/0028-bor.c
@@ -1,0 +1,11 @@
+
+int
+main()
+{
+	int x;
+	
+	x = 1;
+	x = x | 4;
+	return x - 5;
+}
+
--- /dev/null
+++ b/tests/0029-band.c
@@ -1,0 +1,11 @@
+
+int
+main()
+{
+	int x;
+	
+	x = 1;
+	x = x & 3;
+	return x - 1;
+}
+
--- /dev/null
+++ b/tests/0030-bxor.c
@@ -1,0 +1,11 @@
+
+int
+main()
+{
+	int x;
+	
+	x = 1;
+	x = x ^ 3;
+	return x - 2;
+}
+
--- /dev/null
+++ b/tests/0031-relop.c
@@ -1,0 +1,25 @@
+
+int
+f()
+{
+	return 100;
+}
+
+int
+main()
+{
+	if (f() > 1000)
+		return 1;
+	if (f() >= 1000)
+		return 1;
+	if (1000 < f())
+		return 1;
+	if (1000 <= f())
+		return 1;
+	if (1000 == f())
+		return 1;
+	if (100 != f())
+		return 1;
+	return 0;
+}
+
--- /dev/null
+++ b/tests/0032-indec.c
@@ -1,0 +1,49 @@
+
+int
+zero()
+{
+	return 0;
+}
+
+int
+one()
+{
+	return 1;
+}
+
+int
+main()
+{
+	int x;
+	int y;
+	
+	x = zero();
+	y = ++x;
+	if (x != 1)
+		return 1;
+	if (y != 1)
+		return 1;
+	
+	x = one();	
+	y = --x;
+	if (x != 0)
+		return 1;
+	if (y != 0)
+		return 1;
+	
+	x = zero();
+	y = x++;
+	if (x != 1)
+		return 1;
+	if (y != 0)
+		return 1;
+	
+	x = one();
+	y = x--;
+	if (x != 0)
+		return 1;
+	if (y != 1)
+		return 1;
+	
+	return 0;
+}
--- /dev/null
+++ b/tests/0033-ptrindec.c
@@ -1,0 +1,32 @@
+
+
+int
+main()
+{
+	int arr[2];
+	int *p;
+	
+	arr[0] = 2;
+	arr[1] = 3;
+	p = &arr[0];
+	if(*(p++) != 2)
+		return 1;
+	if(*(p++) != 3)
+		return 2;
+	
+	p = &arr[1];
+	if(*(p--) != 3)
+		return 1;
+	if(*(p--) != 2)
+		return 2;
+		
+	p = &arr[0];
+	if(*(++p) != 3)
+		return 1;
+	
+	p = &arr[1];
+	if(*(--p) != 2)
+		return 1;
+
+	return 0;
+}
--- /dev/null
+++ b/tests/0034-logandor.c
@@ -1,0 +1,46 @@
+
+int g;
+
+int
+effect()
+{
+	g = 1;
+	return 1;
+}
+
+int
+main()
+{
+    int x;
+    
+    g = 0;
+    x = 0;
+    if(x && effect())
+    	return 1;
+    if(g)
+    	return 2;
+    x = 1;
+    if(x && effect()) {
+    	if(g != 1)
+    		return 3;
+    } else {
+    	return 4;
+    }
+    g = 0;
+    x = 1;
+    if(x || effect()) {
+    	if(g)
+    		return 5;
+    } else {
+    	return 6;
+    }
+    x = 0;
+    if(x || effect()) {
+    	if(g != 1)
+    		return 7;
+    } else {
+    	return 8;
+    } 
+    return 0;
+}
+
--- /dev/null
+++ b/tests/0035-breakcont.c
@@ -1,0 +1,33 @@
+
+int
+main()
+{
+	int x;
+	
+	x = 0;
+	while(1)
+		break;
+	while(1) {
+		if (x == 5) {
+			break;
+		}
+		x = x + 1;
+		continue;
+	}
+	for (;;) {
+		if (x == 10) {
+			break;
+		}
+		x = x + 1;
+		continue;
+	}
+	do {
+		if (x == 15) {
+			break;
+		}
+		x = x + 1;
+		continue;
+	} while(1);
+	return x - 15;
+}
+
--- /dev/null
+++ b/tests/0036-notneg.c
@@ -1,0 +1,15 @@
+int
+main()
+{
+	int x;
+	
+	x = 4;
+	if(!x != 0)
+		return 1;
+	if(!!x != 1)
+		return 1;
+	if(-x != 0 - 4)
+		return 1;
+	return 0;
+}
+
--- /dev/null
+++ b/tests/0037-assignop.c
@@ -1,0 +1,17 @@
+
+int
+main()
+{
+	int x;
+	
+	x = 0;
+	x += 2;
+	x += 2;
+	if (x != 4)
+		return 1;
+	x -= 3;
+	if (x != 1)
+		return 2;
+		
+	return 0;
+}
--- /dev/null
+++ b/tests/0038-ptradd.c
@@ -1,0 +1,17 @@
+int
+main()
+{
+	int x[2];
+	int *p;
+	
+	x[1] = 7;
+	p = &x[0];
+	p = p + 1;
+	
+	if(*p != 7)
+		return 1;
+	if(&x[1] - &x[0] != 1)
+		return 1;
+	
+	return 0;
+}
--- /dev/null
+++ b/tests/0039-sizeof.c
@@ -1,0 +1,10 @@
+int
+main()
+{
+	int x;
+	if((sizeof (int) - 4))
+		return 1;
+	if((sizeof (&x) - 8))
+		return 1;
+	return 0;
+}
--- /dev/null
+++ b/tests/0040-cast.c
@@ -1,0 +1,14 @@
+
+int
+main()
+{
+	void *p;
+	int x;
+	
+	x = 2;
+	p = &x;
+	
+	if(*((int*)p) != 2)
+		return 1;
+	return 0;
+}
--- /dev/null
+++ b/tests/0041-queen.c
@@ -1,0 +1,55 @@
+
+int *calloc(int, int);
+
+int N;
+int *t;
+
+int
+chk(int x, int y)
+{
+        int i;
+        int r;
+
+        for (r=i=0; i<8; i++) {
+                r = r + t[x + 8*i];
+                r = r + t[i + 8*y];
+                if (x+i < 8 & y+i < 8)
+                        r = r + t[x+i + 8*(y+i)];
+                if (x+i < 8 & y-i >= 0)
+                        r = r + t[x+i + 8*(y-i)];
+                if (x-i >= 0 & y+i < 8)
+                        r = r + t[x-i + 8*(y+i)];
+                if (x-i >= 0 & y-i >= 0)
+                        r = r + t[x-i + 8*(y-i)];
+        }
+        return r;
+}
+
+int
+go(int n, int x, int y)
+{
+        if (n == 8) {
+                N++;
+                return 0;
+        }
+        for (; y<8; y++) {
+                for (; x<8; x++)
+                        if (chk(x, y) == 0) {
+                                t[x + 8*y]++;
+                                go(n+1, x, y);
+                                t[x + 8*y]--;
+                        }
+                x = 0;
+        }
+}
+
+int
+main()
+{
+        t = calloc(64, sizeof(int));
+        go(0, 0, 0);
+        if(N != 92)
+        	return 1;
+        return 0;
+}
+
--- /dev/null
+++ b/tests/0042-prime.c
@@ -1,0 +1,27 @@
+
+int
+main() {
+	int n;
+	int t;
+	int c;
+	int p;
+
+	c = 0;
+	n = 2;
+	while (n < 5000) {
+		t = 2;
+		p = 1;
+		while (t*t <= n) {
+			if (n % t == 0)
+				p = 0;
+			t++;
+		}
+		n++;
+		if (p)
+			c++;
+	}
+	if (c != 669)
+		return 1;
+	return 0;
+}
+
--- /dev/null
+++ b/tests/0043-union.c
@@ -1,0 +1,14 @@
+
+
+
+int
+main()
+{
+	union { int a; int b; } u;
+	u.a = 1;
+	u.b = 3;
+	
+	if (u.a != 3 || u.b != 3)
+		return 1;
+	return 0;
+}
--- /dev/null
+++ b/tests/0044-struct.c
@@ -1,0 +1,19 @@
+struct s {
+    int x;
+    struct {
+        int y;
+        int z;
+    } nest;
+};
+
+int
+main() {
+    struct s v;
+    v.x = 1;
+    v.nest.y = 2;
+    v.nest.z = 3;
+    if (v.x + v.nest.y + v.nest.z != 6)
+        return 1;
+    return 0;
+}
+
--- /dev/null
+++ b/tests/0045-struct.c
@@ -1,0 +1,16 @@
+struct T;
+
+struct T {
+	int x;
+};
+
+int
+main()
+{
+	struct T v;
+	{ struct T { int z; }; }
+	v.x = 2;
+	if(v.x != 2)
+		return 1;
+	return 0;
+}
--- /dev/null
+++ b/tests/0046-inits.c
@@ -1,0 +1,17 @@
+
+int x = 5;
+long y = 6;
+int *p = &x;
+
+int
+main()
+{
+	if (x != 5) 
+		return 1;
+	if (y != 6)
+		return 2;
+	if (*p != 5)
+		return 3;
+	return 0;
+}
+
--- /dev/null
+++ b/tests/0047-anonexport.c
@@ -1,0 +1,35 @@
+
+typedef struct {
+	int a;
+	union {
+		int b1;
+		int b2;
+	};
+	struct { union { struct { int c; }; struct {}; }; };
+	struct {};
+	struct {
+		int d;
+	};
+} s;
+
+int
+main()
+{
+	s v;
+	
+	v.a = 1;
+	v.b1 = 2;
+	v.c = 3;
+	v.d = 4;
+	
+	if (v.a != 1)
+		return 1;
+	if (v.b1 != 2 && v.b2 != 2)
+		return 2;
+	if (v.c != 3)
+		return 3;
+	if (v.d != 4)
+		return 4;
+	
+	return 0;
+}
--- /dev/null
+++ b/tests/0048-inits.c
@@ -1,0 +1,15 @@
+
+struct { int a; int b; int c; } s = {1, 2, 3};
+
+int
+main()
+{
+	if (s.a != 1)
+		return 1;
+	if (s.b != 2)
+		return 2;
+	if (s.c != 3)
+		return 3;
+
+	return 0;
+}
--- /dev/null
+++ b/tests/0049-inits.c
@@ -1,0 +1,14 @@
+
+
+struct S {int a; int b;};
+struct S s = { .b = 2, .a = 1};
+
+int
+main()
+{
+	if(s.a != 1)
+		return 1;
+	if(s.b != 2)
+		return 2;
+	return 0;
+}
--- /dev/null
+++ b/tests/0050-inits.c
@@ -1,0 +1,16 @@
+
+
+int x = 10;
+
+struct S {int a; int *p;};
+struct S s = { .p = &x, .a = 1};
+
+int
+main()
+{
+	if(s.a != 1)
+		return 1;
+	if(*s.p != 10)
+		return 2;
+	return 0;
+}
--- /dev/null
+++ b/tests/0051-inits.c
@@ -1,0 +1,34 @@
+
+struct S1 {
+	int a;
+	int b;
+};
+
+struct S2 {
+	int a;
+	int b;
+	union {
+		int c;
+		int d;
+	};
+	struct S1 s;
+};
+
+struct S2 v = {1, 2, 3, {4, 5}};
+
+int
+main()
+{
+	if(v.a != 1)
+		return 1;
+	if(v.b != 2)
+		return 2;
+	if(v.c != 3 || v.d != 3)
+		return 3;
+	if(v.s.a != 4)
+		return 4;
+	if(v.s.b != 5)
+		return 5;
+	
+	return 0;
+}
--- /dev/null
+++ b/tests/0052-switch.c
@@ -1,0 +1,38 @@
+int x = 0;
+
+int
+main()
+{
+	switch(x)
+		case 0:
+			;
+	switch(x)
+		case 0:
+			switch(x) {
+				case 0:
+					goto next;
+				default:
+					return 1;
+			}
+	return 1;
+	next:
+	switch(x)
+		case 1:
+			return 1;
+	switch(x) {
+		{
+			x = 1 + 1;
+			foo:
+			case 1:
+				return 1;
+		}
+	}
+	switch(x) {
+		case 0:
+			return x;
+		case 1:
+			return 1;
+		default:
+			return 1;
+	}
+}
--- /dev/null
+++ b/tests/0053-struct.c
@@ -1,0 +1,11 @@
+
+int
+main()
+{
+	struct T { int x; };
+	{
+		struct T s;
+		s.x = 0;
+		return s.x;
+	}
+}
--- /dev/null
+++ b/tests/0054-struct.c
@@ -1,0 +1,14 @@
+
+int
+main()
+{
+	struct T { int x; } s1;
+	s1.x = 1;
+	{
+		struct T { int y; } s2;
+		s2.y = 1;
+		if (s1.x - s2.y != 0)
+			return 1;
+	}
+	return 0;
+}
--- /dev/null
+++ b/tests/0055-enum.c
@@ -1,0 +1,23 @@
+
+enum E {
+	x,
+	y,
+	z,
+};
+
+int
+main()
+{
+	enum E e;
+
+	if(x != 0)
+		return 1;
+	if(y != 1)
+		return 2;
+	if(z != 2)
+		return 3;
+	
+	e = x;
+	return e;
+}
+
--- /dev/null
+++ b/tests/0056-enum.c
@@ -1,0 +1,23 @@
+
+enum E {
+	x,
+	y = 2,
+	z,
+};
+
+int
+main()
+{
+	enum E e;
+
+	if(x != 0)
+		return 1;
+	if(y != 2)
+		return 2;
+	if(z != 3)
+		return 3;
+	
+	e = x;
+	return e;
+}
+
--- /dev/null
+++ b/tests/0057-duff.c
@@ -1,0 +1,31 @@
+
+int main()
+{
+	int  count, n;
+	char *from, *to;
+	char a[39], b[39];
+
+	for(n = 0; n < 39; n++) {
+		a[n] = n;
+		b[n] = 0;
+	}
+	from = a;
+	to = b;
+	count = 39;
+	n = (count + 7) / 8;
+	switch (count % 8) {
+	case 0: do { *to++ = *from++;
+	case 7:      *to++ = *from++;
+	case 6:      *to++ = *from++;
+	case 5:      *to++ = *from++;
+	case 4:      *to++ = *from++;
+	case 3:      *to++ = *from++;
+	case 2:      *to++ = *from++;
+	case 1:      *to++ = *from++;
+			} while (--n > 0);
+	}
+	for(n = 0; n < 39; n++)
+		if(a[n] != b[n])
+			return 1;
+	return 0;
+}
--- /dev/null
+++ b/tests/0058-bug.c
@@ -1,0 +1,10 @@
+
+int
+main()
+{
+	char a[16], b[16];
+	
+	if(sizeof(a) != sizeof(b))
+		return 1;
+	return 0;
+}
--- /dev/null
+++ b/tests/0059-multistring.c
@@ -1,0 +1,18 @@
+
+
+
+int main()
+{
+	char * s;
+	
+	s = "abc" "def";
+	if(s[0] != 'a') return 1;
+	if(s[1] != 'b') return 2;
+	if(s[2] != 'c') return 3;
+	if(s[3] != 'd') return 4;
+	if(s[4] != 'e') return 5;
+	if(s[5] != 'f') return 6;
+	if(s[6] != 0) return 7;
+	
+	return 0;
+}
--- /dev/null
+++ b/tests/0060-charlit.c
@@ -1,0 +1,9 @@
+
+int
+main()
+{
+	if ('a' != 97)
+		return 1;
+		
+	return 0;
+}
--- /dev/null
+++ b/tests/0061-comments.c
@@ -1,0 +1,11 @@
+// line comment
+
+int
+main()
+{
+	/*
+		multiline
+		comment
+	*/
+	return 0;
+}
--- /dev/null
+++ b/tests/0062-include.c
@@ -1,0 +1,4 @@
+#include \
+"0062-include.h"
+	return 0;
+}
--- /dev/null
+++ b/tests/0062-include.h
@@ -1,0 +1,3 @@
+int
+main()
+{
--- /dev/null
+++ b/tests/0063-define.c
@@ -1,0 +1,7 @@
+#define FOO 0
+
+int main()
+{
+	return FOO;
+}
+
--- /dev/null
+++ b/tests/0064-sysinclude.c
@@ -1,0 +1,7 @@
+#include <0064-sysinclude.h>
+
+int
+main()
+{
+	return x;
+}
--- /dev/null
+++ b/tests/0065-ifdef.c
@@ -1,0 +1,26 @@
+
+#ifdef FOO
+	XXX
+#ifdef BAR
+	XXX
+#endif
+	XXX
+#endif
+
+#define FOO 1
+
+#ifdef FOO
+
+#ifdef FOO
+int x = 0;
+#endif
+
+int
+main()
+{
+	return x;
+}
+#endif
+
+
+
--- /dev/null
+++ b/tests/0066-cppelse.c
@@ -1,0 +1,20 @@
+#define BAR 0
+#ifdef BAR
+	#ifdef FOO
+		XXX
+		#ifdef FOO
+			XXX
+		#endif
+	#else
+		#define FOO
+		#ifdef FOO
+			int x = BAR;
+		#endif
+	#endif
+#endif
+
+int
+main()
+{
+	return BAR;
+}
--- /dev/null
+++ b/tests/0067-define.c
@@ -1,0 +1,7 @@
+#define X 6 / 2
+
+int
+main()
+{
+	return X - 3;
+}
--- /dev/null
+++ b/tests/0068-funclikemacro.c
@@ -1,0 +1,8 @@
+#define ADD(X, Y) (X + Y)
+
+
+int
+main()
+{
+	return ADD(1, 2) - 3;
+}
--- /dev/null
+++ b/tests/0069-funclikemacro.c
@@ -1,0 +1,11 @@
+#define A 3
+#define FOO(X,Y,Z) X + Y + Z
+#define SEMI ;
+
+int
+main()
+{
+	if(FOO(1, 2, A) != 6)
+		return 1 SEMI
+	return FOO(0,0,0);
+}
--- /dev/null
+++ b/tests/README
@@ -1,0 +1,3 @@
+These tests are taken from https://github.com/andrewchambers/qc.
+All the credits for this test suite are for Andrew Chambers
+https://github.com/andrewchambers/qc.
--- /dev/null
+++ b/tests/chktest.sh
@@ -1,0 +1,20 @@
+#!/bin/sh
+
+tabs 40
+for i in *.c
+do
+	(set -e
+         rm -f a.out core
+	 scc -m qbe $i
+	 ./a.out
+        ) 2>/dev/null
+
+        if test $? -eq 0
+	then
+		st=[OK]
+	else
+		st=[FAIL]
+	fi
+	echo $i "\t" $st
+done
+tabs -8
--- /dev/null
+++ b/tests/include/0064-sysinclude.h
@@ -1,0 +1,2 @@
+int x = 0;
+