Codeb Abgabe Testfaelle
authorMartin Perner <martin@perner.cc>
Wed, 2 Jun 2010 19:32:54 +0000 (21:32 +0200)
committerMartin Perner <martin@perner.cc>
Wed, 2 Jun 2010 19:32:54 +0000 (21:32 +0200)
60 files changed:
codeb/abgabe_ba.0 [new file with mode: 0644]
codeb/abgabe_ba.call [new file with mode: 0644]
codeb/abgabe_ba.instr [new file with mode: 0644]
codeb/abgabe_bb.0 [new file with mode: 0644]
codeb/abgabe_bb.call [new file with mode: 0644]
codeb/abgabe_bb.instr [new file with mode: 0644]
codeb/abgabe_bc.0 [new file with mode: 0644]
codeb/abgabe_bc.call [new file with mode: 0644]
codeb/abgabe_bc.instr [new file with mode: 0644]
codeb/abgabe_bd.0 [new file with mode: 0644]
codeb/abgabe_bd.call [new file with mode: 0644]
codeb/abgabe_bd.instr [new file with mode: 0644]
codeb/abgabe_be.0 [new file with mode: 0644]
codeb/abgabe_be.call [new file with mode: 0644]
codeb/abgabe_be.instr [new file with mode: 0644]
codeb/abgabe_bf.0 [new file with mode: 0644]
codeb/abgabe_bf.call [new file with mode: 0644]
codeb/abgabe_bf.instr [new file with mode: 0644]
codeb/abgabe_bg.0 [new file with mode: 0644]
codeb/abgabe_bg.call [new file with mode: 0644]
codeb/abgabe_bg.instr [new file with mode: 0644]
codeb/abgabe_bh.0 [new file with mode: 0644]
codeb/abgabe_bh.call [new file with mode: 0644]
codeb/abgabe_bh.instr [new file with mode: 0644]
codeb/abgabe_bi.0 [new file with mode: 0644]
codeb/abgabe_bi.call [new file with mode: 0644]
codeb/abgabe_bi.instr [new file with mode: 0644]
codeb/abgabe_bj.0 [new file with mode: 0644]
codeb/abgabe_bj.call [new file with mode: 0644]
codeb/abgabe_bj.instr [new file with mode: 0644]
gesamt/codeb_abgabe_ba.0 [new file with mode: 0644]
gesamt/codeb_abgabe_ba.call [new file with mode: 0644]
gesamt/codeb_abgabe_ba.instr [new file with mode: 0644]
gesamt/codeb_abgabe_bb.0 [new file with mode: 0644]
gesamt/codeb_abgabe_bb.call [new file with mode: 0644]
gesamt/codeb_abgabe_bb.instr [new file with mode: 0644]
gesamt/codeb_abgabe_bc.0 [new file with mode: 0644]
gesamt/codeb_abgabe_bc.call [new file with mode: 0644]
gesamt/codeb_abgabe_bc.instr [new file with mode: 0644]
gesamt/codeb_abgabe_bd.0 [new file with mode: 0644]
gesamt/codeb_abgabe_bd.call [new file with mode: 0644]
gesamt/codeb_abgabe_bd.instr [new file with mode: 0644]
gesamt/codeb_abgabe_be.0 [new file with mode: 0644]
gesamt/codeb_abgabe_be.call [new file with mode: 0644]
gesamt/codeb_abgabe_be.instr [new file with mode: 0644]
gesamt/codeb_abgabe_bf.0 [new file with mode: 0644]
gesamt/codeb_abgabe_bf.call [new file with mode: 0644]
gesamt/codeb_abgabe_bf.instr [new file with mode: 0644]
gesamt/codeb_abgabe_bg.0 [new file with mode: 0644]
gesamt/codeb_abgabe_bg.call [new file with mode: 0644]
gesamt/codeb_abgabe_bg.instr [new file with mode: 0644]
gesamt/codeb_abgabe_bh.0 [new file with mode: 0644]
gesamt/codeb_abgabe_bh.call [new file with mode: 0644]
gesamt/codeb_abgabe_bh.instr [new file with mode: 0644]
gesamt/codeb_abgabe_bi.0 [new file with mode: 0644]
gesamt/codeb_abgabe_bi.call [new file with mode: 0644]
gesamt/codeb_abgabe_bi.instr [new file with mode: 0644]
gesamt/codeb_abgabe_bj.0 [new file with mode: 0644]
gesamt/codeb_abgabe_bj.call [new file with mode: 0644]
gesamt/codeb_abgabe_bj.instr [new file with mode: 0644]

diff --git a/codeb/abgabe_ba.0 b/codeb/abgabe_ba.0
new file mode 100644 (file)
index 0000000..de7d90c
--- /dev/null
@@ -0,0 +1,4 @@
+method m(x)
+  x := this-x;
+  return x*2;
+end;
diff --git a/codeb/abgabe_ba.call b/codeb/abgabe_ba.call
new file mode 100644 (file)
index 0000000..12cbab0
--- /dev/null
@@ -0,0 +1,2 @@
+extern long m(long,long);
+RET(m(7,4)==6 && m(18,22)==-8);
diff --git a/codeb/abgabe_ba.instr b/codeb/abgabe_ba.instr
new file mode 100644 (file)
index 0000000..45a4fb7
--- /dev/null
@@ -0,0 +1 @@
+8
diff --git a/codeb/abgabe_bb.0 b/codeb/abgabe_bb.0
new file mode 100644 (file)
index 0000000..27ee1de
--- /dev/null
@@ -0,0 +1,4 @@
+method m()
+  var that:=3*this;
+  return this or that;
+end;
diff --git a/codeb/abgabe_bb.call b/codeb/abgabe_bb.call
new file mode 100644 (file)
index 0000000..24d9f34
--- /dev/null
@@ -0,0 +1,2 @@
+extern long m(long);
+RET(m(7)==23 && m(13)==47);
diff --git a/codeb/abgabe_bb.instr b/codeb/abgabe_bb.instr
new file mode 100644 (file)
index 0000000..45a4fb7
--- /dev/null
@@ -0,0 +1 @@
+8
diff --git a/codeb/abgabe_bc.0 b/codeb/abgabe_bc.0
new file mode 100644 (file)
index 0000000..6b69b2e
--- /dev/null
@@ -0,0 +1,7 @@
+method mymax(that)
+  if this<that then
+    return that;
+  else
+    return this;
+  end;
+end;
diff --git a/codeb/abgabe_bc.call b/codeb/abgabe_bc.call
new file mode 100644 (file)
index 0000000..f4e86b1
--- /dev/null
@@ -0,0 +1,2 @@
+extern long mymax(long,long);
+RET(mymax(7,4)==7 && mymax(18,22)==22);
diff --git a/codeb/abgabe_bc.instr b/codeb/abgabe_bc.instr
new file mode 100644 (file)
index 0000000..45a4fb7
--- /dev/null
@@ -0,0 +1 @@
+8
diff --git a/codeb/abgabe_bd.0 b/codeb/abgabe_bd.0
new file mode 100644 (file)
index 0000000..3d086a9
--- /dev/null
@@ -0,0 +1,6 @@
+method mymax(that)
+  if not (this<that) then
+    that:=this;
+  end;
+  return that;
+end;
diff --git a/codeb/abgabe_bd.call b/codeb/abgabe_bd.call
new file mode 100644 (file)
index 0000000..f4e86b1
--- /dev/null
@@ -0,0 +1,2 @@
+extern long mymax(long,long);
+RET(mymax(7,4)==7 && mymax(18,22)==22);
diff --git a/codeb/abgabe_bd.instr b/codeb/abgabe_bd.instr
new file mode 100644 (file)
index 0000000..ec63514
--- /dev/null
@@ -0,0 +1 @@
+9
diff --git a/codeb/abgabe_be.0 b/codeb/abgabe_be.0
new file mode 100644 (file)
index 0000000..a2e2e61
--- /dev/null
@@ -0,0 +1,12 @@
+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;
diff --git a/codeb/abgabe_be.call b/codeb/abgabe_be.call
new file mode 100644 (file)
index 0000000..aaf92c7
--- /dev/null
@@ -0,0 +1,2 @@
+extern long fib(long);
+RET(3==fib(4));
diff --git a/codeb/abgabe_be.instr b/codeb/abgabe_be.instr
new file mode 100644 (file)
index 0000000..8f92bfd
--- /dev/null
@@ -0,0 +1 @@
+35
diff --git a/codeb/abgabe_bf.0 b/codeb/abgabe_bf.0
new file mode 100644 (file)
index 0000000..2c56204
--- /dev/null
@@ -0,0 +1,11 @@
+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;
diff --git a/codeb/abgabe_bf.call b/codeb/abgabe_bf.call
new file mode 100644 (file)
index 0000000..72a0cac
--- /dev/null
@@ -0,0 +1,2 @@
+extern long ggt(long, long);
+RET (6==ggt(42,108));
diff --git a/codeb/abgabe_bf.instr b/codeb/abgabe_bf.instr
new file mode 100644 (file)
index 0000000..e373ee6
--- /dev/null
@@ -0,0 +1 @@
+50
diff --git a/codeb/abgabe_bg.0 b/codeb/abgabe_bg.0
new file mode 100644 (file)
index 0000000..21e3b7b
--- /dev/null
@@ -0,0 +1,11 @@
+struct next end;
+
+method length()
+  var l:=this;
+  var len:=0;
+  while l do
+    l:=l.next;
+    len:=len--1;
+  end;
+  return len;
+end;
diff --git a/codeb/abgabe_bg.call b/codeb/abgabe_bg.call
new file mode 100644 (file)
index 0000000..41d2795
--- /dev/null
@@ -0,0 +1,9 @@
+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));
diff --git a/codeb/abgabe_bg.instr b/codeb/abgabe_bg.instr
new file mode 100644 (file)
index 0000000..7facc89
--- /dev/null
@@ -0,0 +1 @@
+36
diff --git a/codeb/abgabe_bh.0 b/codeb/abgabe_bh.0
new file mode 100644 (file)
index 0000000..635e6ad
--- /dev/null
@@ -0,0 +1,9 @@
+struct next val end;
+
+
+method insert(val list)
+/* usage: list:=node.insert(5,list) */
+  this.val := val;
+  next := list;
+  return this;
+end;
diff --git a/codeb/abgabe_bh.call b/codeb/abgabe_bh.call
new file mode 100644 (file)
index 0000000..5b44d8b
--- /dev/null
@@ -0,0 +1,6 @@
+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);
diff --git a/codeb/abgabe_bh.instr b/codeb/abgabe_bh.instr
new file mode 100644 (file)
index 0000000..b8626c4
--- /dev/null
@@ -0,0 +1 @@
+4
diff --git a/codeb/abgabe_bi.0 b/codeb/abgabe_bi.0
new file mode 100644 (file)
index 0000000..d7e17d8
--- /dev/null
@@ -0,0 +1,17 @@
+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;
diff --git a/codeb/abgabe_bi.call b/codeb/abgabe_bi.call
new file mode 100644 (file)
index 0000000..6c129e1
--- /dev/null
@@ -0,0 +1,9 @@
+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);
+
diff --git a/codeb/abgabe_bi.instr b/codeb/abgabe_bi.instr
new file mode 100644 (file)
index 0000000..a787364
--- /dev/null
@@ -0,0 +1 @@
+34
diff --git a/codeb/abgabe_bj.0 b/codeb/abgabe_bj.0
new file mode 100644 (file)
index 0000000..b49c7c8
--- /dev/null
@@ -0,0 +1,10 @@
+struct elem end;
+
+method vadd(v n)
+  while 0<n do
+    n:=n-1;
+    (this-(-8*n)).elem := (this-(n*-8)).elem - (0-(v-(n*-8)).elem);
+  end;
+  return this;
+end;
+
diff --git a/codeb/abgabe_bj.call b/codeb/abgabe_bj.call
new file mode 100644 (file)
index 0000000..7e14f34
--- /dev/null
@@ -0,0 +1,6 @@
+extern long *vadd(long *, long *, long);
+long a[]={7,11,13};
+long b[]={23,42,5};
+RET(a==vadd(a,b,2) &&
+    a[0]==30 && a[1]==53 && a[2]==13 &&
+    b[0]==23 && b[1]==42 && b[2]==5);
diff --git a/codeb/abgabe_bj.instr b/codeb/abgabe_bj.instr
new file mode 100644 (file)
index 0000000..6f4247a
--- /dev/null
@@ -0,0 +1 @@
+26
diff --git a/gesamt/codeb_abgabe_ba.0 b/gesamt/codeb_abgabe_ba.0
new file mode 100644 (file)
index 0000000..de7d90c
--- /dev/null
@@ -0,0 +1,4 @@
+method m(x)
+  x := this-x;
+  return x*2;
+end;
diff --git a/gesamt/codeb_abgabe_ba.call b/gesamt/codeb_abgabe_ba.call
new file mode 100644 (file)
index 0000000..12cbab0
--- /dev/null
@@ -0,0 +1,2 @@
+extern long m(long,long);
+RET(m(7,4)==6 && m(18,22)==-8);
diff --git a/gesamt/codeb_abgabe_ba.instr b/gesamt/codeb_abgabe_ba.instr
new file mode 100644 (file)
index 0000000..45a4fb7
--- /dev/null
@@ -0,0 +1 @@
+8
diff --git a/gesamt/codeb_abgabe_bb.0 b/gesamt/codeb_abgabe_bb.0
new file mode 100644 (file)
index 0000000..27ee1de
--- /dev/null
@@ -0,0 +1,4 @@
+method m()
+  var that:=3*this;
+  return this or that;
+end;
diff --git a/gesamt/codeb_abgabe_bb.call b/gesamt/codeb_abgabe_bb.call
new file mode 100644 (file)
index 0000000..24d9f34
--- /dev/null
@@ -0,0 +1,2 @@
+extern long m(long);
+RET(m(7)==23 && m(13)==47);
diff --git a/gesamt/codeb_abgabe_bb.instr b/gesamt/codeb_abgabe_bb.instr
new file mode 100644 (file)
index 0000000..45a4fb7
--- /dev/null
@@ -0,0 +1 @@
+8
diff --git a/gesamt/codeb_abgabe_bc.0 b/gesamt/codeb_abgabe_bc.0
new file mode 100644 (file)
index 0000000..6b69b2e
--- /dev/null
@@ -0,0 +1,7 @@
+method mymax(that)
+  if this<that then
+    return that;
+  else
+    return this;
+  end;
+end;
diff --git a/gesamt/codeb_abgabe_bc.call b/gesamt/codeb_abgabe_bc.call
new file mode 100644 (file)
index 0000000..f4e86b1
--- /dev/null
@@ -0,0 +1,2 @@
+extern long mymax(long,long);
+RET(mymax(7,4)==7 && mymax(18,22)==22);
diff --git a/gesamt/codeb_abgabe_bc.instr b/gesamt/codeb_abgabe_bc.instr
new file mode 100644 (file)
index 0000000..45a4fb7
--- /dev/null
@@ -0,0 +1 @@
+8
diff --git a/gesamt/codeb_abgabe_bd.0 b/gesamt/codeb_abgabe_bd.0
new file mode 100644 (file)
index 0000000..3d086a9
--- /dev/null
@@ -0,0 +1,6 @@
+method mymax(that)
+  if not (this<that) then
+    that:=this;
+  end;
+  return that;
+end;
diff --git a/gesamt/codeb_abgabe_bd.call b/gesamt/codeb_abgabe_bd.call
new file mode 100644 (file)
index 0000000..f4e86b1
--- /dev/null
@@ -0,0 +1,2 @@
+extern long mymax(long,long);
+RET(mymax(7,4)==7 && mymax(18,22)==22);
diff --git a/gesamt/codeb_abgabe_bd.instr b/gesamt/codeb_abgabe_bd.instr
new file mode 100644 (file)
index 0000000..ec63514
--- /dev/null
@@ -0,0 +1 @@
+9
diff --git a/gesamt/codeb_abgabe_be.0 b/gesamt/codeb_abgabe_be.0
new file mode 100644 (file)
index 0000000..a2e2e61
--- /dev/null
@@ -0,0 +1,12 @@
+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;
diff --git a/gesamt/codeb_abgabe_be.call b/gesamt/codeb_abgabe_be.call
new file mode 100644 (file)
index 0000000..aaf92c7
--- /dev/null
@@ -0,0 +1,2 @@
+extern long fib(long);
+RET(3==fib(4));
diff --git a/gesamt/codeb_abgabe_be.instr b/gesamt/codeb_abgabe_be.instr
new file mode 100644 (file)
index 0000000..8f92bfd
--- /dev/null
@@ -0,0 +1 @@
+35
diff --git a/gesamt/codeb_abgabe_bf.0 b/gesamt/codeb_abgabe_bf.0
new file mode 100644 (file)
index 0000000..2c56204
--- /dev/null
@@ -0,0 +1,11 @@
+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;
diff --git a/gesamt/codeb_abgabe_bf.call b/gesamt/codeb_abgabe_bf.call
new file mode 100644 (file)
index 0000000..72a0cac
--- /dev/null
@@ -0,0 +1,2 @@
+extern long ggt(long, long);
+RET (6==ggt(42,108));
diff --git a/gesamt/codeb_abgabe_bf.instr b/gesamt/codeb_abgabe_bf.instr
new file mode 100644 (file)
index 0000000..e373ee6
--- /dev/null
@@ -0,0 +1 @@
+50
diff --git a/gesamt/codeb_abgabe_bg.0 b/gesamt/codeb_abgabe_bg.0
new file mode 100644 (file)
index 0000000..21e3b7b
--- /dev/null
@@ -0,0 +1,11 @@
+struct next end;
+
+method length()
+  var l:=this;
+  var len:=0;
+  while l do
+    l:=l.next;
+    len:=len--1;
+  end;
+  return len;
+end;
diff --git a/gesamt/codeb_abgabe_bg.call b/gesamt/codeb_abgabe_bg.call
new file mode 100644 (file)
index 0000000..41d2795
--- /dev/null
@@ -0,0 +1,9 @@
+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));
diff --git a/gesamt/codeb_abgabe_bg.instr b/gesamt/codeb_abgabe_bg.instr
new file mode 100644 (file)
index 0000000..7facc89
--- /dev/null
@@ -0,0 +1 @@
+36
diff --git a/gesamt/codeb_abgabe_bh.0 b/gesamt/codeb_abgabe_bh.0
new file mode 100644 (file)
index 0000000..635e6ad
--- /dev/null
@@ -0,0 +1,9 @@
+struct next val end;
+
+
+method insert(val list)
+/* usage: list:=node.insert(5,list) */
+  this.val := val;
+  next := list;
+  return this;
+end;
diff --git a/gesamt/codeb_abgabe_bh.call b/gesamt/codeb_abgabe_bh.call
new file mode 100644 (file)
index 0000000..5b44d8b
--- /dev/null
@@ -0,0 +1,6 @@
+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);
diff --git a/gesamt/codeb_abgabe_bh.instr b/gesamt/codeb_abgabe_bh.instr
new file mode 100644 (file)
index 0000000..b8626c4
--- /dev/null
@@ -0,0 +1 @@
+4
diff --git a/gesamt/codeb_abgabe_bi.0 b/gesamt/codeb_abgabe_bi.0
new file mode 100644 (file)
index 0000000..d7e17d8
--- /dev/null
@@ -0,0 +1,17 @@
+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;
diff --git a/gesamt/codeb_abgabe_bi.call b/gesamt/codeb_abgabe_bi.call
new file mode 100644 (file)
index 0000000..6c129e1
--- /dev/null
@@ -0,0 +1,9 @@
+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);
+
diff --git a/gesamt/codeb_abgabe_bi.instr b/gesamt/codeb_abgabe_bi.instr
new file mode 100644 (file)
index 0000000..a787364
--- /dev/null
@@ -0,0 +1 @@
+34
diff --git a/gesamt/codeb_abgabe_bj.0 b/gesamt/codeb_abgabe_bj.0
new file mode 100644 (file)
index 0000000..b49c7c8
--- /dev/null
@@ -0,0 +1,10 @@
+struct elem end;
+
+method vadd(v n)
+  while 0<n do
+    n:=n-1;
+    (this-(-8*n)).elem := (this-(n*-8)).elem - (0-(v-(n*-8)).elem);
+  end;
+  return this;
+end;
+
diff --git a/gesamt/codeb_abgabe_bj.call b/gesamt/codeb_abgabe_bj.call
new file mode 100644 (file)
index 0000000..7e14f34
--- /dev/null
@@ -0,0 +1,6 @@
+extern long *vadd(long *, long *, long);
+long a[]={7,11,13};
+long b[]={23,42,5};
+RET(a==vadd(a,b,2) &&
+    a[0]==30 && a[1]==53 && a[2]==13 &&
+    b[0]==23 && b[1]==42 && b[2]==5);
diff --git a/gesamt/codeb_abgabe_bj.instr b/gesamt/codeb_abgabe_bj.instr
new file mode 100644 (file)
index 0000000..6f4247a
--- /dev/null
@@ -0,0 +1 @@
+26