-extern long fib(long);
+extern int fib(int);
RET(fib(-1)==-1 && fib(0)==0 && fib(1)==1 && fib(2)==1 && fib(3)==2 && fib(7)+fib(8)==fib(9));
-extern long fib(long,long);
+extern int fib(int,int);
RET(fib(0,-1)==-1 && fib(0,0)==0 && fib(0,1)==1 && fib(0,2)==1 && fib(0,3)==2 && fib(0,7)+fib(0,8)==fib(0,9));
struct a b c end;
method m(x)
- return (this-8).c;
+ return (this-4).c;
end;
extern long m(long,long);
-RET(m(7,4)==6 && m(18,22)==-8);
+int r1 = m(7,4);
+int r2 = m(18,22);
+printf("r1: %d\nr2: %d\n", r1, r2);
+RET(r1==6 && r2==-8);
method vadd(v n)
while 0<n do
n:=n-1;
- (this-(-8*n)).elem := (this-(n*-8)).elem - (0-(v-(n*-8)).elem);
+ (this-(-4*n)).elem := (this-(n*-4)).elem - (0-(v-(n*-4)).elem);
end;
return this;
end;
extern long *vadd(long *, long *, long);
long a[]={7,11,13};
long b[]={23,42,5};
-RET(a==vadd(a,b,2) &&
+int i;
+for(i=0; i<3; i++) {
+ printf("a[%i]: %d, b[%i]: %d\n", i, a[i], i, b[i]);
+}
+int ret = vadd(a,b,2)==a;
+for(i=0; i<3; i++) {
+ printf("a[%i]: %d, b[%i]: %d\n", i, a[i], i, b[i]);
+}
+RET(ret &&
a[0]==30 && a[1]==53 && a[2]==13 &&
b[0]==23 && b[1]==42 && b[2]==5);
method a(x)
return this * x;
-end;
\ No newline at end of file
+end;
-extern long long m(long long);
-
-RET(m(10) == 40);
\ No newline at end of file
+extern int m(int);
+int ret = m(10);
+RET(ret == 40);
-extern long long m(long long);
+extern int m(int);
-long t = m(-6);
+int t = m(-6);
-//printf("%ld\n", t);
+//printf("%d\n", t);
-RET(m(-6) == 80);
\ No newline at end of file
+RET(m(-6) == 80);
-extern long long m(long long);
+extern int m(int);
-long t = m(-50);
+int t = m(-50);
-//printf("%ld\n", t);
+//printf("%d\n", t);
-RET(t == 67550);
\ No newline at end of file
+RET(t == 67550);
-extern long long m(long long* ar1, long long *ar2);
+extern int m(int* ar1, int *ar2);
-long long z1[] = { 0, 2, 4, 6, 8, 10, 12 };
-long long z2[] = { 10, 20, 40, 60, 80, 100, 120 };
+int z1[] = { 0, 2, 4, 6, 8, 10, 12 };
+int z2[] = { 10, 20, 40, 60, 80, 100, 120 };
int i;
for(i=0; i < sizeof z1/sizeof z1[0]; i++) {
- printf("z1[%i]: %ld, z2[%i]: %ld\n", i, z1[i], i, z2[i]);
+ printf("z1[%i]: %d, z2[%i]: %d\n", i, z1[i], i, z2[i]);
}
-long long ret = m(&z1[1], &z2[1]);
-printf("ret: %ld\n", ret);
+int ret = m(&z1[1], &z2[1]);
+printf("ret: %d\n", ret);
for(i=0; i < sizeof z1/sizeof z1[0]; i++) {
- printf("z1[%i]: %ld, z2[%i]: %ld\n", i, z1[i], i, z2[i]);
+ printf("z1[%i]: %d, z2[%i]: %d\n", i, z1[i], i, z2[i]);
}
printf("anmerkung: dieser testfall ist von seiteneffekten gepraegt\n"
"es *koennte* passieren, dass der testfall richtig ist obwohl er\n"
method f()
+ /* 14 */ /* 16 */ /* 15 */
return (this-1).g()-(this-2).g()-g();
end;
/* inspired by s'evil skinn0rEE ! */
struct a end;
method f()
- return ((this--8).g()).h(j());
+ return ((this--4).g()).h(j());
end;
method g()
this.a := this.a*10;
- return this--8;
+ return this--4;
end;
method h()
this.a := this.a*20;
- return this--8;
+ return this--4;
end;
method j()
this.a := this.a*30;
- return this--8;
+ return this--4;
end;
-unsigned long long f(unsigned long long[]);
+unsigned int f(unsigned int[]);
/* hint: pointer arithmetic in C */
#define ERG (ar + 3)
-unsigned long long ar[] = {5, 6, 7};
-unsigned long long ar_copy[] = {5, 6, 7};
+unsigned int ar[] = {5, 6, 7};
+unsigned int ar_copy[] = {5, 6, 7};
int j;
-unsigned long long ret;
+unsigned int ret;
-printf("adr of ar: 0x%016lx\n", ar);
+printf("adr of ar: 0x%08lx\n", ar);
for(j=0; j < sizeof ar / sizeof ar[0]; j++) {
printf("ar[%i]: %d\n", j, ar[j]);
}
ret = f(ar);
-printf("ret ist 0x%016lx (sollte 0x%016lx sein)\n", ret, ERG);
+printf("ret ist 0x%08lx (sollte 0x%08lx sein)\n", ret, ERG);
for(j=0; j < sizeof ar / sizeof ar[0]; j++) {
printf("ar[%i]: %d\n", j, ar[j]);
}
-RET(ret == (unsigned long long) ERG && ar[0] == ar_copy[0] * 30 && ar[1] == ar_copy[1] * 10 && ar[2] == ar_copy[2] * 20);
+RET(ret == (unsigned int) ERG && ar[0] == ar_copy[0] * 30 && ar[1] == ar_copy[1] * 10 && ar[2] == ar_copy[2] * 20);
--- /dev/null
+method m(x)
+ return x-this;
+end;
--- /dev/null
+extern long m(long,long);
+RET(m(2,5)==3 && m(7,2)==-5);
--- /dev/null
+method m()
+ return this;
+end;
--- /dev/null
+extern long m(long);
+RET(m(5)==5 && m(9)==9);
--- /dev/null
+method m(x y z)
+ return z;
+end;
--- /dev/null
+extern long m(long,long,long,long);
+RET(m(1,2,3,5)==5 && m(3,2,1,9)==9);
--- /dev/null
+method m(x)
+ return not this;
+end;
--- /dev/null
+extern long m(long,long);
+RET(m(0,12)==1 && m(9,13)==0);
--- /dev/null
+method m(x)
+ return -5;
+end;
--- /dev/null
+extern long m(long,long);
+RET(m(0,12)==-5 && m(9,13)==-5);
--- /dev/null
+method m(x)
+ return x--3;
+end;
--- /dev/null
+extern long m(long,long);
+RET(m(0,12)==15 && m(9,13)==16);
--- /dev/null
+method m(x)
+ return x*this*x*this;
+end;
--- /dev/null
+extern long m(long,long);
+RET(m(2,3)==36 && m(5,-7)==35*35);
--- /dev/null
+method m(x)
+ return this or x;
+end;
--- /dev/null
+extern long m(long,long);
+RET(m(3,9)==11 && m(6,13)==15);
--- /dev/null
+method m(x)
+ return x<this;
+end;
--- /dev/null
+extern long m(long,long);
+RET(m(3,3)==0 && m(3,2)==1 && m(2,3)==0);
--- /dev/null
+method m(x)
+ return -4<x;
+end;
--- /dev/null
+extern long m(long,long);
+RET(m(0,-4)==0 && m(9,-3)==1);
--- /dev/null
+method m(x)
+ return this<-9;
+end;
--- /dev/null
+extern long m(long,long);
+RET(m(-9,12)==0 && m(-10,13)==1);
--- /dev/null
+method m(x)
+ return 3=x;
+end;
--- /dev/null
+extern long m(long,long);
+RET(m(0,3)==1 && m(9,13)==0);
--- /dev/null
+struct a b c end;
+struct d e f end;
+
+method m(x)
+ return e;
+end;
--- /dev/null
+long s[]={12,23,34,45,53,61};
+extern long m(long *,long);
+RET(m(s,12)==23 && m(s+3,13)==53);
--- /dev/null
+struct a b c end;
+struct d e f end;
+
+method m(x)
+ return x.c.d;
+end;
--- /dev/null
+long s[]={12,23,34,45,53,61};
+long *t[]={s,s+2,s+1,s+3};
+extern long m(long,long **);
+RET(m(1,t)==23 && m(9,t+1)==45);
--- /dev/null
+method m(x)
+ return not((not this) or (not x));
+end;
--- /dev/null
+extern long m(long,long);
+RET(m(10,6)==1 && m(0,13)==0 && m(-3,0)==0);
--- /dev/null
+method m(x)
+ return x-(0-this);
+end;
--- /dev/null
+extern long m(long,long);
+RET(m(3,4)==7 && m(-3,5)==2);
--- /dev/null
+method m(x)
+ return 5 or x or 9;
+end;
--- /dev/null
+extern long m(long,long);
+RET(m(3,6)==15 && m(-3,5)==13);
--- /dev/null
+struct a b c end;
+
+method m(x)
+ return (this-4).c;
+end;
--- /dev/null
+long s[]={12,23,34,45,53,61};
+extern long m(long *,long);
+RET(m(s,12)==23 && m(s+2,13)==45);
--- /dev/null
+method m(x y)
+ return y;
+end;
+
+method n(y x)
+ return y;
+end;
--- /dev/null
+extern long m(long,long,long);
+extern long n(long,long,long);
+RET(m(1,2,3)==3 && n(4,5,6)==5);
--- /dev/null
+struct x end;
+
+method m(x)
+ return x;
+end;
--- /dev/null
+long s[]={12,23,34,45,53,61};
+extern long m(long *,long);
+RET(m(s,78)==78 && m(s+2,13)==13);
--- /dev/null
+/* unvollendet
--- /dev/null
+method foo(x,y)
+end;
--- /dev/null
+method x()
+ this:=x;
+end;
--- /dev/null
+method x()
+ x:=x-x*x;
+end;
--- /dev/null
+method x()
+ if x<x or x=x then
+ end;
+end;
--- /dev/null
+method x()
+ x := x < x < x;
+end;
--- /dev/null
+method x()
+ x:=x(,x);
+end;
--- /dev/null
+method x()
+ var x.x:=x;
+end;
--- /dev/null
+method x()
+ ;
+end;
--- /dev/null
+method x()
+ x(x,,);
+end;
--- /dev/null
+method x()
+ x.this = x;
+end;
--- /dev/null
+method m()
+ return x;
+end;
--- /dev/null
+method m(x x)
+end;
--- /dev/null
+method m(x)
+ if x then
+ var x:=0;
+ end;
+end;
--- /dev/null
+method m()
+ while this do
+ var x:=this;
+ if this then
+ else
+ var x:=this;
+ end;
+ end;
+end;
+
--- /dev/null
+struct
+ a
+ a
+end;
--- /dev/null
+struct
+ a
+end;
+
+struct
+ a
+end;
--- /dev/null
+method m()
+ if this then
+ var x:=this;
+ else
+ return x;
+ end;
+end;
--- /dev/null
+method m()
+ x:=this;
+ var x:=0;
+end;
--- /dev/null
+method m()
+ a:=this;
+end;
+
+struct
+ a
+end;
--- /dev/null
+method m()
+ var x:=x;
+end;
--- /dev/null
+method m(x)
+ return this.x;
+end;
--- /dev/null
+method m(x)
+ x := this-x;
+ return x*2;
+end;
--- /dev/null
+extern long m(long,long);
+int r1 = m(7,4);
+int r2 = m(18,22);
+printf("r1: %d\nr2: %d\n", r1, r2);
+RET(r1==6 && r2==-8);
--- /dev/null
+method m()
+ var that:=3*this;
+ return this or that;
+end;
--- /dev/null
+extern long m(long);
+RET(m(7)==23 && m(13)==47);
--- /dev/null
+method mymax(that)
+ if this<that then
+ return that;
+ else
+ return this;
+ end;
+end;
--- /dev/null
+extern long mymax(long,long);
+RET(mymax(7,4)==7 && mymax(18,22)==22);
--- /dev/null
+method mymax(that)
+ if not (this<that) then
+ that:=this;
+ end;
+ return that;
+end;
--- /dev/null
+extern long mymax(long,long);
+RET(mymax(7,4)==7 && mymax(18,22)==22);
--- /dev/null
+method fib()
+ var n:=0;
+ var a:=0;
+ var b:=1;
+ while n<this do
+ n:=n--1;
+ var t:=a-(0-b);
+ a:=b;
+ b:=t;
+ end;
+ return a;
+end;
--- /dev/null
+extern long fib(long);
+RET(3==fib(4));
--- /dev/null
+method ggt(b)
+ var a:=this;
+ while b do
+ if b<a then
+ a:=a-b;
+ else
+ b:=b-a;
+ end;
+ end;
+ return a;
+end;
--- /dev/null
+extern long ggt(long, long);
+RET (6==ggt(42,108));
--- /dev/null
+struct next end;
+
+method length()
+ var l:=this;
+ var len:=0;
+ while l do
+ l:=l.next;
+ len:=len--1;
+ end;
+ return len;
+end;
--- /dev/null
+typedef struct list {struct list *next; } list;
+
+extern long length(list *);
+list a={NULL};
+list b={&a};
+list c={&b};
+list d={&c};
+list e={&a};
+RET(2==length(&e) && 4==length(&d));
--- /dev/null
+struct next val end;
+
+
+method insert(val list)
+/* usage: list:=node.insert(5,list) */
+ this.val := val;
+ next := list;
+ return this;
+end;
--- /dev/null
+typedef struct list {struct list *next; long val;} list;
+list *insert(list *, long, list *);
+list a={NULL,7};
+list b={NULL,2};
+RET((&a)==insert(&a, 3, &b) &&
+ a.next==&b && a.val==3 && b.next==NULL && b.val==2);
--- /dev/null
+struct a b c end;
+
+method m(flag)
+ a:=b-1;
+ if flag then
+ b:=c-1;
+ var a:=95;
+ c:=a-1;
+ else
+ a:=a-10;
+ var b:=a*2;
+ b:=23;
+ c:=b*2;
+ end;
+ b:=b-17;
+ return this;
+end;
--- /dev/null
+typedef struct foo {long a; long b; long c;} foo;
+extern foo *m(foo *, long);
+foo s1={29,37,41};
+foo s2={6,28,216};
+
+RET((&s1)==m(&s1,25) && (&s2)==m(&s2,0) &&
+ s1.a==36 && s1.b==23 && s1.c==94 &&
+ s2.a==17 && s2.b==11 && s2.c==46);
+
--- /dev/null
+struct elem end;
+
+method vadd(v n)
+ while 0<n do
+ n:=n-1;
+ (this-(-4*n)).elem := (this-(n*-4)).elem - (0-(v-(n*-4)).elem);
+ end;
+ return this;
+end;
+
--- /dev/null
+extern long *vadd(long *, long *, long);
+long a[]={7,11,13};
+long b[]={23,42,5};
+int i;
+for(i=0; i<3; i++) {
+ printf("a[%i]: %d, b[%i]: %d\n", i, a[i], i, b[i]);
+}
+int ret = vadd(a,b,2)==a;
+for(i=0; i<3; i++) {
+ printf("a[%i]: %d, b[%i]: %d\n", i, a[i], i, b[i]);
+}
+RET(ret &&
+ a[0]==30 && a[1]==53 && a[2]==13 &&
+ b[0]==23 && b[1]==42 && b[2]==5);
--- /dev/null
+../codeb/georg_fib_000.call
\ No newline at end of file
--- /dev/null
+../codeb/georg_fib_020.call
\ No newline at end of file
--- /dev/null
+georg_fib_000.call
\ No newline at end of file
--- /dev/null
+/* fibonacci */
+
+/* F_0 = 0 */
+/* F_1 = 1 */
+/* F_n = F_{n-1} + F_{n-2} */
+
+/*
+return e;
+return t-t;
+return t-(e);
+return t-(0-t);
+return c-(0-c);
+return mref()-(0-mref());
+return t.id()-(0-t.id());
+return (e).id()-(0-(e).id());
+return (t-t).id()-(0-(t-t).id());
+return (this-1).fib()-(0-(this-2).fib());
+*/
+
+method fib()
+ if this < 2 then return this; end;
+ return (this-1).fib()-(0-(this-2).fib());
+end;
--- /dev/null
+georg_fib_100.call
\ No newline at end of file
--- /dev/null
+/* fibonacci */
+
+/* F_0 = 0 */
+/* F_1 = 1 */
+/* F_n = F_{n-1} + F_{n-2} */
+
+/*
+return e;
+return t-t;
+return t-(e);
+return t-(0-t);
+return c-(0-c);
+return mref()-(0-mref());
+return t.id()-(0-t.id());
+return (e).id()-(0-(e).id());
+return (t-t).id()-(0-(t-t).id());
+return (this-1).fib()-(0-(this-2).fib());
+*/
+
+method fib()
+ if this < 2 then return this; end;
+ var a := (this-1).fib();
+ var b := (this-2).fib();
+ return a-(0-b);
+end;
--- /dev/null
+georg_fib_100.call
\ No newline at end of file
--- /dev/null
+georg_fib_020.call
\ No newline at end of file
--- /dev/null
+/* fibonacci */
+
+/* F_0 = 0 */
+/* F_1 = 1 */
+/* F_n = F_{n-1} + F_{n-2} */
+
+method fib(x)
+ if x < 2 then return x; end;
+ return fib(x-1)-(0-fib(x-2));
+end;
--- /dev/null
+georg_fib_120.call
\ No newline at end of file
--- /dev/null
+/* fibonacci */
+
+/* F_0 = 0 */
+/* F_1 = 1 */
+/* F_n = F_{n-1} + F_{n-2} */
+
+method fib(x)
+ if x < 2 then return x; end;
+ var a := fib(x-1);
+ var b := fib(x-2);
+ return a-(0-b);
+end;
--- /dev/null
+georg_fib_120.call
\ No newline at end of file
--- /dev/null
+method m()
+ return a(4);
+end;
+
+method a(x)
+ return this * x;
+end;
--- /dev/null
+extern int m(int);
+int ret = m(10);
+RET(ret == 40);
--- /dev/null
+method m()
+ return a(4 - this, (10 * this) - (10 - this));
+end;
+
+method a(x y)
+ return x - y - (this * -1);
+end;
\ No newline at end of file
--- /dev/null
+extern int m(int);
+
+int t = m(-6);
+
+//printf("%d\n", t);
+
+RET(m(-6) == 80);
--- /dev/null
+method m()
+ var x:= (this - 10).a(10, 5);
+ /*return x;*/
+ var z:= x - a(x, this);
+ /*return z;*/
+ return (x * z) - this;
+end;
+
+method a(x y)
+ var u := this - x - y;
+ return u * 2;
+end;
\ No newline at end of file
--- /dev/null
+extern int m(int);
+
+int t = m(-50);
+
+//printf("%d\n", t);
+
+RET(t == 67550);
--- /dev/null
+struct a b c d end;
+
+method m(ar)
+ 20 - ar.inc() - 70;
+ var y := this.b - ar.inc() - (this.inc() * -10) - this.b - ar.b;
+ return ar.inc() - inc() - (y * -1);
+end;
+
+method inc()
+ this.a := this.a - -1;
+ this.b := this.b - -1;
+ this.c := this.c - -1;
+ this.d := this.d - -1;
+ return this.a;
+end;
--- /dev/null
+extern int m(int* ar1, int *ar2);
+
+int z1[] = { 0, 2, 4, 6, 8, 10, 12 };
+int z2[] = { 10, 20, 40, 60, 80, 100, 120 };
+int i;
+
+for(i=0; i < sizeof z1/sizeof z1[0]; i++) {
+ printf("z1[%i]: %d, z2[%i]: %d\n", i, z1[i], i, z2[i]);
+}
+
+int ret = m(&z1[1], &z2[1]);
+printf("ret: %d\n", ret);
+
+for(i=0; i < sizeof z1/sizeof z1[0]; i++) {
+ printf("z1[%i]: %d, z2[%i]: %d\n", i, z1[i], i, z2[i]);
+}
+printf("anmerkung: dieser testfall ist von seiteneffekten gepraegt\n"
+ "es *koennte* passieren, dass der testfall richtig ist obwohl er\n"
+ "fehlschlaegt, da die auswertungsreihenfolge nicht vorgegeben ist\n\n");
+
+RET((ret == -16 || ret == -14) && z1[0] == 0 && z2[0] == 10 && z1[1] == 4 && z1[2] == 6 && z1[3] == 8 && z1[4] == 10 && z1[5] == 10 && z1[6] == 12 && z2[1] == 23 && z2[2] == 43 && z2[3] == 63 && z2[4] == 83 && z2[5] == 100 && z2[6] == 120);
--- /dev/null
+method f()
+ var x := g();
+ return x;
+end;
+
+method g()
+ return 4;
+end;
--- /dev/null
+long f(long);
+RET(f(0xdead) == 4);
--- /dev/null
+method f(a)
+ return (g(a*5) - (0-this));
+end;
+
+method g(b)
+ b := (0-b) - 100;
+ return this-b;
+end;
--- /dev/null
+long f(long,long);
+#define ERG 320
+int ret = f(100,4);
+printf("ret ist %i (sollte %i sein)\n", ret, ERG);
+RET(ret == ERG);
--- /dev/null
+method f(a)
+ var x := a--100;
+ var y := g(x);
+ y := y - 100 - (0-x);
+ return y;
+end;
+
+method g(b)
+ var x := 1;
+ var y := 2;
+ var z := -3;
+ return b-x-y-z;
+end;
--- /dev/null
+long f(long,long);
+#define ERG 200
+int ret = f(0xdead,50);
+printf("ret ist %i (sollte %i sein)\n", ret, ERG);
+RET(ret == ERG);
--- /dev/null
+method f()
+ return (this-50).g();
+end;
+
+method g()
+ return this--50;
+end;
--- /dev/null
+long f(long);
+#define ERG 320
+int ret = f(ERG);
+printf("ret ist %i (sollte %i sein)\n", ret, ERG);
+RET(ret == ERG);
--- /dev/null
+method f()
+ /* 14 */ /* 16 */ /* 15 */
+ return (this-1).g()-(this-2).g()-g();
+end;
+
+method g()
+ return this;
+end;
--- /dev/null
+long f(long);
+#define ERG(a) ((a-1)-(a-2)-a)
+int ret1 = f(-10);
+int ret2 = f(1337);
+int ret3 = f(-358193);
+printf("ret1 ist %6i (sollte %6i sein)\n", ret1, ERG(-10));
+printf("ret2 ist %6i (sollte %6i sein)\n", ret2, ERG(1337));
+printf("ret3 ist %6i (sollte %6i sein)\n", ret3, ERG(-358193));
+RET(ret1 == ERG(-10) && ret2 == ERG(1337) && ret3 == ERG(-358193));
--- /dev/null
+method fa(a b c d)
+ return g(a, b, c, d);
+end;
+method fa_(a b c d)
+ return g(a, b, c, d,);
+end;
+
+method fb(a b c d)
+ return g(b, c, d, a);
+end;
+method fb_(a b c d)
+ return g(b, c, d, a,);
+end;
+
+method fc(a b c d)
+ return g(c, d, a, b);
+end;
+method fc_(a b c d)
+ return g(c, d, a, b,);
+end;
+
+method fd(a b c d)
+ return g(d, a, b, c);
+end;
+method fd_(a b c d)
+ return g(d, a, b, c,);
+end;
+
+method g(a b c d)
+ return a;
+end;
--- /dev/null
+long fa (long, long, long, long, long);
+long fa_(long, long, long, long, long);
+long fb (long, long, long, long, long);
+long fb_(long, long, long, long, long);
+long fc (long, long, long, long, long);
+long fc_(long, long, long, long, long);
+long fd (long, long, long, long, long);
+long fd_(long, long, long, long, long);
+
+long (*fp[])(long, long, long, long, long) = {fa, fa_, fb, fb_, fc, fc_, fd, fd_};
+char st[sizeof fp/sizeof fp[0]][4] = {"fa ", "fa_", "fb ", "fb_", "fc ", "fc_", "fd ", "fd_"};
+
+#define PAR(a) ((a-'a'+1)*10)
+int i, t, r = 1;
+
+for(i=0; i < sizeof fp/sizeof fp[0]; i++) {
+ t = fp[i](0xdead, PAR('a'), PAR('b'), PAR('c'), PAR('d'));
+ printf("returnwert von %s() ist %3i (erwartet: %3i)\n", st[i], t, PAR(st[i][1]));
+ r = r && (t==PAR(st[i][1]));
+}
+RET(r);
--- /dev/null
+method f()
+ return (this-1).g(this-5, this-10);
+end;
+
+method g(a b)
+ return this-a-b;
+end;
--- /dev/null
+long f(long);
+#define ERG(a) ((a-1)-(a-5)-(a-10))
+#define ARG1 -10
+#define ARG2 1333157
+#define ARG3 -35981341
+int ret1 = f(ARG1);
+int ret2 = f(ARG2);
+int ret3 = f(ARG3);
+printf("ret1 ist %8i (sollte %8i sein)\n", ret1, ERG(ARG1));
+printf("ret2 ist %8i (sollte %8i sein)\n", ret2, ERG(ARG2));
+printf("ret3 ist %8i (sollte %8i sein)\n", ret3, ERG(ARG3));
+RET(ret1 == ERG(ARG1) && ret2 == ERG(ARG2) && ret3 == ERG(ARG3));
--- /dev/null
+struct a end;
+method f()
+ return this.a - inc();
+end;
+method inc()
+ this.a := this.a--1;
+ return this.a;
+end;
--- /dev/null
+long f(long[]);
+long ar[] = {100};
+int ret = f(ar);
+#define ERG1 (100 - 101)
+#define ERG2 (101 - 101)
+printf("ret ist %2i (sollte %2i ODER %2i sein)\n", ret, ERG1, ERG2);
+RET(ret == ERG1 || ret == ERG2);
--- /dev/null
+method fo0(a b c d)
+ var x := g();
+ /*return a-b-c-d-x; */
+ return b;
+end;
+method g()
+ h();
+ return -100;
+end;
+method h()
+ var q := 0;
+ var w := 0;
+ var e := 0;
+ var r := 0;
+ var t := 0;
+ return (q*w)-(e*r)-t;
+end;
--- /dev/null
+long fo0(long, long, long, long, long);
+#define ARG1 10
+#define ARG2 -10
+#define ARG3 -20
+#define ARG4 -30
+
+#define ERG (ARG1 - ARG2 - ARG3 - ARG4 + 100)
+
+int ret = fo0(0xdead, ARG1, ARG2, ARG3, ARG4);
+printf("ret ist %8i (sollte %8i sein)\n", ret, ERG);
+RET(ret == ERG);
--- /dev/null
+/* inspired by s'evil skinn0rEE ! */
+struct a end;
+method f()
+ return ((this--4).g()).h(j());
+end;
+
+method g()
+ this.a := this.a*10;
+ return this--4;
+end;
+
+method h()
+ this.a := this.a*20;
+ return this--4;
+end;
+
+method j()
+ this.a := this.a*30;
+ return this--4;
+end;
--- /dev/null
+unsigned int f(unsigned int[]);
+
+/* hint: pointer arithmetic in C */
+#define ERG (ar + 3)
+
+unsigned int ar[] = {5, 6, 7};
+unsigned int ar_copy[] = {5, 6, 7};
+int j;
+unsigned int ret;
+
+printf("adr of ar: 0x%08lx\n", ar);
+for(j=0; j < sizeof ar / sizeof ar[0]; j++) {
+ printf("ar[%i]: %d\n", j, ar[j]);
+}
+ret = f(ar);
+printf("ret ist 0x%08lx (sollte 0x%08lx sein)\n", ret, ERG);
+for(j=0; j < sizeof ar / sizeof ar[0]; j++) {
+ printf("ar[%i]: %d\n", j, ar[j]);
+}
+RET(ret == (unsigned int) ERG && ar[0] == ar_copy[0] * 30 && ar[1] == ar_copy[1] * 10 && ar[2] == ar_copy[2] * 20);
--- /dev/null
+/* gcc -c -fomit-frame-pointer -fno-defer-pop callingconvention.c */
+
+#include <stdlib.h>
+
+extern int call(void);
+
+#define CHECKNUM 0x1234567812345678
+long callchecking()
+{
+ long ret;
+ ret=call();
+ return ret;
+}
errnum=0
prgnum=0
-#LOC=.
-LOC=/usr/ftp/pub/ubvl/test/$beispiel
+LOC=~/test/scripts/
+#LOC=/usr/ftp/pub/ubvl/test/$beispiel
LOC2=~/test/$beispiel
-/usr/ftp/pub/ublu/test/accounttest || exit 1
+#/usr/ftp/pub/ublu/test/accounttest || exit 1
allow_null_glob_expansion=1
if [ ! -d ~/abgabe/$beispiel ]; then
--- /dev/null
+#! /bin/bash
+
+beispiel=gesamt_ppc
+PROGRAM=./$beispiel
+
+errnum=0
+prgnum=0
+
+LOC=~/test/scripts/
+#LOC=/usr/ftp/pub/ubvl/test/$beispiel
+LOC2=~/test/$beispiel
+
+#/usr/ftp/pub/ublu/test/accounttest || exit 1
+allow_null_glob_expansion=1
+
+if [ ! -d ~/abgabe/$beispiel ]; then
+ echo "Fehler: Verzeichnis ~/abgabe/$beispiel existiert nicht."
+ exit 1
+else
+ cd ~/abgabe/$beispiel
+ echo 'Teste "make clean"'
+ make clean
+ /usr/ftp/pub/ubvl/test/cleantest
+ echo 'Teste "make"'
+ make
+fi
+
+if test ! -x $PROGRAM
+then
+ echo "Fehler: Kein Programm $PROGRAM"
+ exit 1
+fi
+let prgnum=0
+for i in $LOC/*.0 $LOC2/*.0
+do
+ if [ -f $i ]; then
+ let prgnum=prgnum+1
+ let errorfound=0
+ echo "==========> Eingabe von $i:"
+ cat $i
+ echo
+ RESFILE=test${beispiel}out$$
+ $PROGRAM <$i >$RESFILE
+ retval=$?
+ echo -n "Übersetzung: "
+ if test $retval -eq 0
+ then
+ echo "Status korrekt"
+ else
+ echo "[Errot] Status=$retval. Erwartet: 0"
+ let errorfound=1
+ fi
+ echo
+ echo "Ausgabe:"
+ if [ -f ~/test/scripts/clr.py ]; then
+ cat $RESFILE | ~/test/scripts/clr.py
+ else
+ cat $RESFILE
+ fi
+ mv -f $RESFILE $RESFILE.s
+ CALLFILE=${i%.*}.call
+ echo
+ if [ ! -f $CALLFILE ]; then
+ echo "Fehler: Datei $CALLFILE existiert nicht, kann Code nicht ausführen..."
+ exit 1
+ else
+ echo "Übersetze und linke das Testprogramm:"
+ if cc -g -I. -DCALL=\"$CALLFILE\" $LOC/testmain.c $LOC/callingconvention.o $RESFILE.s; then
+ echo
+ echo "Rufe folgendes Codefragment auf:"
+ cat $CALLFILE
+ echo
+ ./a.out
+ retval=$?
+ # test callee saved registers
+ if [ "$retval" -ge 12 ] && [ "$retval" -le 15 ]; then
+ echo "[Error] Callee-saved register %r$retval modified."
+ let errorfound=1
+ elif [ "$retval" -eq 11 ]; then
+ echo "[Error] Callee-saved register %rbx modified."
+ let errorfound=1
+ elif [ "$retval" -eq 16 ]; then
+ echo "[Error] Callee-saved register %rbp modified."
+ let errorfound=1
+ elif [ "$retval" -eq 30 ]; then
+ echo "[Error] Stack pointer %rsp modified."
+ let errorfound=1
+ else
+ # test signals
+ test $retval -gt 127
+ retsig=$?
+ test ${i##*.} = xin
+ expsig=$?
+ if test $retsig -eq $expsig; then
+ if test $retval -eq 1; then
+ echo "[Error] Das Ergebnis des Aufrufs ist falsch."
+ let errorfound=1
+ elif test $retval -eq 0; then
+ echo "Das Ergebnis des Ausdrucks ist korrekt."
+ else
+ echo "[Error] Erzeugter Code verhaelt sich bzgl. Signalerzeugung anders als erwartet."
+ let errorfound=1
+ fi
+ else
+ echo "[Error] Erzeugter Code verhaelt sich bezueglich Signalerzeugung anders als erwartet."
+ let errorfound=1
+ echo "Rueckgabewert = $retval";
+ fi
+ fi
+ echo
+ else
+ echo "[Error] Erzeugter Code konnte nicht assembliert und gelinkt werden."
+ let errorfound=1
+ fi
+ fi
+ let errnum=errnum+errorfound
+ if [ 1 -eq $errorfound ]; then
+ rm *.s
+ rm *.out
+ exit 3;
+ fi
+ rm -f a.out $RESFILE $RESFILE.s
+ fi
+done
+
+for i in $LOC/*.[123] $LOC2/*.[123]
+do
+ if [ -f $i ]; then
+ let prgnum=prgnum+1
+ echo "==========> Eingabe von $i:"
+ cat $i
+ echo
+ echo "Ausgabe:"
+ $PROGRAM <$i
+ retval=$?
+ if test $retval -eq ${i#*.}
+ then
+ echo "Status: korrekt"
+ else
+ echo "[Error] Status: $retval. Erwartet: ${i#*.}"
+ let errnum=errnum+1
+ exit 3;
+ fi
+ echo
+fi
+done
+let corrnum=prgnum-errnum
+echo "Statistics: "
+echo "==========="
+echo " $prgnum Tests total"
+echo " $corrnum Tests passed"
+echo " $errnum Tests failed"
PROGRAM=./$beispiel
#LOC=.
-LOC=/usr/ftp/pub/ubvl/test/$beispiel
+#LOC=/usr/ftp/pub/ubvl/test/$beispiel
+LOC=~/test/scripts
allow_null_glob_expansion=1
--- /dev/null
+#!/bin/bash
+
+i=$1
+beispiel=gesamt_ppc
+PROGRAM=./$beispiel
+
+#LOC=.
+#LOC=/usr/ftp/pub/ubvl/test/$beispiel
+LOC=~/test/scripts
+
+allow_null_glob_expansion=1
+
+if [ ! -d ~/abgabe/$beispiel ]; then
+ echo "Fehler: Verzeichnis ~/abgabe/$beispiel existiert nicht."
+ exit 1
+else
+ cd ~/abgabe/$beispiel
+ echo 'Teste "make"'
+ make
+fi
+
+if test ! -x $PROGRAM
+then
+ echo "Fehler: Kein Programm $PROGRAM"
+ exit 1
+fi
+let prgnum=0
+#for i in $LOC/*.0 $LOC2/*.0
+if [ -f $i ]; then
+ let prgnum=prgnum+1
+ let errorfound=0
+ echo "==========> Eingabe von $i:"
+ cat $i
+ echo
+ RESFILE=test${beispiel}out$$
+ $PROGRAM <$i >$RESFILE
+ retval=$?
+ echo -n "Übersetzung: "
+ if test $retval -eq 0
+ then
+ echo "Status korrekt"
+ else
+ echo "[Errot] Status=$retval. Erwartet: 0"
+ let errorfound=1
+ fi
+ echo
+ echo "Ausgabe:"
+ if [ -f ~/test/scripts/clr.py ]; then
+ cat $RESFILE | ~/test/scripts/clr.py
+ else
+ cat $RESFILE
+ fi
+ mv -f $RESFILE $RESFILE.s
+ CALLFILE=${i%.*}.call
+ echo
+ if [ ! -f $CALLFILE ]; then
+ echo "Fehler: Datei $CALLFILE existiert nicht, kann Code nicht ausführen..."
+ exit 1
+ else
+ echo "Übersetze und linke das Testprogramm:"
+ if cc -g -I. -DCALL=\"$CALLFILE\" $LOC/testmain.c $LOC/callingconvention.o $RESFILE.s; then
+ echo
+ echo "Rufe folgendes Codefragment auf:"
+ cat $CALLFILE
+ echo
+ ./a.out
+ retval=$?
+ # test callee saved registers
+ if [ "$retval" -ge 12 ] && [ "$retval" -le 15 ]; then
+ echo "[Error] Callee-saved register %r$retval modified."
+ let errorfound=1
+ elif [ "$retval" -eq 11 ]; then
+ echo "[Error] Callee-saved register %rbx modified."
+ let errorfound=1
+ elif [ "$retval" -eq 16 ]; then
+ echo "[Error] Callee-saved register %rbp modified."
+ let errorfound=1
+ elif [ "$retval" -eq 30 ]; then
+ echo "[Error] Stack pointer %rsp modified."
+ let errorfound=1
+ else
+ # test signals
+ test $retval -gt 127
+ retsig=$?
+ test ${i##*.} = xin
+ expsig=$?
+ if test $retsig -eq $expsig; then
+ if test $retval -eq 1; then
+ echo "[Error] Das Ergebnis des Aufrufs ist falsch."
+ let errorfound=1
+ elif test $retval -eq 0; then
+ echo "Das Ergebnis des Ausdrucks ist korrekt."
+ else
+ echo "[Error] Erzeugter Code verhaelt sich bzgl. Signalerzeugung anders als erwartet."
+ let errorfound=1
+ fi
+ else
+ echo "[Error] Erzeugter Code verhaelt sich bezueglich Signalerzeugung anders als erwartet."
+ let errorfound=1
+ echo "Rueckgabewert = $retval";
+ fi
+ fi
+ echo
+ else
+ echo "[Error] Erzeugter Code konnte nicht assembliert und gelinkt werden."
+ let errorfound=1
+ fi
+ fi
+ let errnum=errnum+errorfound
+ if [ 1 -eq $errorfound ]; then
+ rm *.s
+ rm *.out
+ exit 3;
+ fi
+ rm -f a.out $RESFILE $RESFILE.s
+fi