gesamt: testfaelle fix (bitte hinweis in README lesen) und ein neuer testfall
authorBernhard Urban <lewurm@gmail.com>
Mon, 7 Jun 2010 22:03:30 +0000 (00:03 +0200)
committerBernhard Urban <lewurm@gmail.com>
Mon, 7 Jun 2010 22:03:30 +0000 (00:03 +0200)
16 files changed:
README.markdown
gesamt/lewurm_00.call
gesamt/lewurm_00.instr
gesamt/lewurm_01.call
gesamt/lewurm_01.instr
gesamt/lewurm_02.call
gesamt/lewurm_02.instr
gesamt/lewurm_03.call
gesamt/lewurm_03.instr
gesamt/lewurm_04.call
gesamt/lewurm_04.instr
gesamt/lewurm_06.call
gesamt/lewurm_06.instr
gesamt/lewurm_09.0 [new file with mode: 0644]
gesamt/lewurm_09.call [new file with mode: 0644]
gesamt/lewurm_09.instr [new file with mode: 0644]

index 9fd3be374c26f493b1e5de546779323b85f463b0..5063ebe25de9ca245b454d1f8e5f1246d9257bc3 100644 (file)
@@ -41,6 +41,18 @@ erwartete Ausgabe fuer die Datei bar.0 nennen Sie bar.out.
 *      Jeder Testfall hat als Praefix "<nick>_", sodass keine Namenskonflikte entstehen.
 *      Ab codea sollte auch fuer jeden erfolgreichen Testfall eine .instr Datei angelegt werden die einen Referenzwert der Instruktionen enthaelt.
 
+### Hinweis fuer *gesamt* und `bench.sh`
+
+In der Call-Datei bitte **nur** Funktionen deklarieren die tatsaechlich in der
+Call-Datei selbst aufgerufen werden. Beispiel:
+       method f()
+               return g();
+       end;
+       method g()
+               return 123;
+       end;
+so muss in der Call-Datei nur `f()` deklariert werden.
+
 
 # Wie kannst du beitragen?
 
index ab3151c361b6b07fd0f2fe63a138e9fa8d15e0b4..e5ebb88f660fd481296726aea46409c7720429d5 100644 (file)
@@ -1,4 +1,2 @@
 long f(long);
-long g(long);
-
 RET(f(0xdead) == 4);
index b1bd38b62a0800a4f6a80c34e21c5acffae52c7e..b4de3947675361a7770d29b8982c407b0ec6b2a0 100644 (file)
@@ -1 +1 @@
-13
+11
index 133864616108cbdf67dba52a5ee259646077e3f7..f0d92ca005185c197f56c816996b2032bd30abf7 100644 (file)
@@ -1,5 +1,4 @@
 long f(long,long);
-long g(long,long);
 #define ERG 320
 int ret = f(100,4);
 printf("ret ist %i (sollte %i sein)\n", ret, ERG);
index 7273c0fa8c522b7eed7762a353d46f7768e9b6f2..d6b24041cf04154f8f902651969675021f4d93a5 100644 (file)
@@ -1 +1 @@
-25
+19
index cac8445535bb4050d75b20a0d4084f60e5b4a659..fdc828b6c2ebbe3e3f631a30906752c7ef948892 100644 (file)
@@ -1,5 +1,4 @@
 long f(long,long);
-long g(long,long);
 #define ERG 200
 int ret = f(0xdead,50);
 printf("ret ist %i (sollte %i sein)\n", ret, ERG);
index 425151f3a411f5e088d7753e7c8d016303b1b9d1..e85087affded170efcbc6f9672a6fc671d839ed0 100644 (file)
@@ -1 +1 @@
-40
+31
index 89df9ac20e78fe25b29fdb9f07da2fc871b305b3..bfcd11640a7474ae58b1076584f0c8324a98aeee 100644 (file)
@@ -1,5 +1,4 @@
 long f(long);
-long g(long);
 #define ERG 320
 int ret = f(ERG);
 printf("ret ist %i (sollte %i sein)\n", ret, ERG);
index 60d3b2f4a4cd5f1637eba020358bfe5ecb5edcf2..48082f72f087ce7e6fa75b9c41d7387daecd447b 100644 (file)
@@ -1 +1 @@
-15
+12
index cfed53a2a1def26b3d3cfe8f4c88f56a7c0f510b..ef1c964e2ac3274c85fb4b2aed8a4b098a9a8871 100644 (file)
@@ -1,5 +1,4 @@
 long f(long);
-long g(long);
 #define ERG(a) ((a-1)-(a-2)-a)
 int ret1 = f(-10);
 int ret2 = f(1337);
index 52bd8e43afb01d0c9747f1fedf2fc94684ee4cc4..f96ac06721837aa6a644a580c03c76f304e81db0 100644 (file)
@@ -1 +1 @@
-120
+105
index e65a81c95e14041d5bc2a65e97535ae2e5d7bc48..8a0a9f573fd8e60adf4f862640ab11c353b24d21 100644 (file)
@@ -1,5 +1,4 @@
 long f(long);
-long g(long, long, long);
 #define ERG(a) ((a-1)-(a-5)-(a-10))
 #define ARG1 -10
 #define ARG2 1333157
index d88e313699871a6c780316c8df7479aebe6999c0..b5489e5e51a9e547d42a398df654a8dfee00b82f 100644 (file)
@@ -1 +1 @@
-81
+69
diff --git a/gesamt/lewurm_09.0 b/gesamt/lewurm_09.0
new file mode 100644 (file)
index 0000000..58e31db
--- /dev/null
@@ -0,0 +1,20 @@
+/* inspired by s'evil skinn0rEE ! */
+struct a end;
+method f()
+       return ((this--8).g()).h(j());
+end;
+
+method g()
+       this.a := this.a*10;
+       return this--8;
+end;
+
+method h()
+       this.a := this.a*20;
+       return this--8;
+end;
+
+method j()
+       this.a := this.a*30;
+       return this--8;
+end;
diff --git a/gesamt/lewurm_09.call b/gesamt/lewurm_09.call
new file mode 100644 (file)
index 0000000..80343ce
--- /dev/null
@@ -0,0 +1,20 @@
+unsigned long long f(unsigned long long[]);
+
+/* hint: pointer arithmetic in C */
+#define ERG (ar + 3)
+
+unsigned long long ar[] = {5, 6, 7};
+unsigned long long ar_copy[] = {5, 6, 7};
+int j;
+unsigned long long ret;
+
+printf("adr of ar: 0x%016lx\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);
+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);
diff --git a/gesamt/lewurm_09.instr b/gesamt/lewurm_09.instr
new file mode 100644 (file)
index 0000000..8f92bfd
--- /dev/null
@@ -0,0 +1 @@
+35