summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAlex AUVOLAT <alex.auvolat@ens.fr>2014-01-08 22:59:02 +0100
committerAlex AUVOLAT <alex.auvolat@ens.fr>2014-01-08 22:59:02 +0100
commitce876db1ef52af3c0b1a89b18a08279a5aea3d9d (patch)
tree8abc918f6db7a3e9eaeb83d5900053bac8b4cde5 /tests
parent97962c7823fd8bfca3a94909bb4b6f14ad967735 (diff)
parent56fdab2ff0caaaa88a152ef06aef821f432fe488 (diff)
downloadLPC-Projet-ce876db1ef52af3c0b1a89b18a08279a5aea3d9d.tar.gz
LPC-Projet-ce876db1ef52af3c0b1a89b18a08279a5aea3d9d.zip
Merge branch 'codegen-alex' into codegen-alex-opt
Diffstat (limited to 'tests')
-rw-r--r--tests/exec/Makefile3
-rw-r--r--tests/exec/multisuper1.cpp57
-rw-r--r--tests/exec/multisuper1.out4
-rw-r--r--tests/exec/multisuper2.cpp68
-rw-r--r--tests/exec/multisuper2.out6
-rw-r--r--tests/exec/multisuper3.cpp76
-rw-r--r--tests/exec/multisuper3.out12
7 files changed, 226 insertions, 0 deletions
diff --git a/tests/exec/Makefile b/tests/exec/Makefile
index b260ba0..afe0fdc 100644
--- a/tests/exec/Makefile
+++ b/tests/exec/Makefile
@@ -1,3 +1,6 @@
+%.out: %.cpp
+ g++ -o /tmp/tmp_exec_test $^ && /tmp/tmp_exec_test > $@ && rm /tmp/tmp_exec_test
+
%: %.cpp
g++ -o $@ $^
diff --git a/tests/exec/multisuper1.cpp b/tests/exec/multisuper1.cpp
new file mode 100644
index 0000000..48014f7
--- /dev/null
+++ b/tests/exec/multisuper1.cpp
@@ -0,0 +1,57 @@
+#include <iostream>
+
+class A {
+ public:
+ int y;
+ A();
+ int f(int x);
+};
+
+class B {
+ public:
+ int z;
+ B();
+ int g(int x);
+};
+
+class C : public A, public B {
+ public:
+ int q;
+ C();
+ int f(int x);
+};
+
+A::A() {
+ y = 12;
+}
+
+B::B() {
+ z = 7;
+}
+
+C::C() {
+ q = 11;
+}
+
+int A::f(int x) {
+ return x * y;
+}
+
+int B::g(int x) {
+ return x * z;
+}
+
+int C::f(int x) {
+ return x * q;
+}
+
+int main() {
+ C test;
+ std::cout << "C.f(1) = " << test.f(1) << "\n";
+ std::cout << "C.g(1) = " << test.g(1) << "\n";
+ A *q = &test;
+ std::cout << "A.f(1) = " << q->f(1) << "\n";
+ B *r = &test;
+ std::cout << "B.g(1) = " << r->g(1) << "\n";
+}
+
diff --git a/tests/exec/multisuper1.out b/tests/exec/multisuper1.out
new file mode 100644
index 0000000..0298410
--- /dev/null
+++ b/tests/exec/multisuper1.out
@@ -0,0 +1,4 @@
+C.f(1) = 11
+C.g(1) = 7
+A.f(1) = 12
+B.g(1) = 7
diff --git a/tests/exec/multisuper2.cpp b/tests/exec/multisuper2.cpp
new file mode 100644
index 0000000..42d51ac
--- /dev/null
+++ b/tests/exec/multisuper2.cpp
@@ -0,0 +1,68 @@
+#include <iostream>
+
+class A {
+ public:
+ int y;
+ A();
+ virtual int f(int x);
+};
+
+class B {
+ public:
+ int z;
+ B();
+ int g(int x);
+};
+
+class C : public A, public B {
+ public:
+ int q;
+ C();
+ virtual int f(int x);
+ int g(int x);
+};
+
+A::A() {
+ y = 12;
+}
+
+B::B() {
+ z = 7;
+}
+
+C::C() {
+ q = 11;
+}
+
+int A::f(int x) {
+ return x * y;
+}
+
+int B::g(int x) {
+ return x * z;
+}
+
+int C::f(int x) {
+ return x * q;
+}
+
+int C::g(int x) {
+ return x * q * 404;
+}
+
+int main() {
+ A test2;
+ std::cout << "A.f(1) = " << test2.f(1) << "\n";
+
+ B test3;
+ std::cout << "B.g(1) = " << test3.g(1) << "\n";
+
+ C test;
+ std::cout << "C.f(1) = " << test.f(1) << "\n";
+ std::cout << "C.g(1) = " << test.g(1) << "\n";
+ A *q = &test;
+ std::cout << "(C as A).f(1) = " << q->f(1) << "\n";
+ B *r = &test;
+ std::cout << "(C as B).g(1) = " << r->g(1) << "\n";
+}
+
diff --git a/tests/exec/multisuper2.out b/tests/exec/multisuper2.out
new file mode 100644
index 0000000..c850040
--- /dev/null
+++ b/tests/exec/multisuper2.out
@@ -0,0 +1,6 @@
+A.f(1) = 12
+B.g(1) = 7
+C.f(1) = 11
+C.g(1) = 4444
+(C as A).f(1) = 11
+(C as B).g(1) = 7
diff --git a/tests/exec/multisuper3.cpp b/tests/exec/multisuper3.cpp
new file mode 100644
index 0000000..55f4c45
--- /dev/null
+++ b/tests/exec/multisuper3.cpp
@@ -0,0 +1,76 @@
+#include <iostream>
+
+class A {
+ public:
+ int y;
+ A();
+ virtual int f(int x);
+};
+
+class B {
+ public:
+ int z;
+ B();
+ int g(int x);
+};
+
+class C : public A, public B {
+ public:
+ int q;
+ C();
+ virtual int f(int x);
+ int g(int x);
+};
+
+A::A() {
+ y = 12;
+}
+
+B::B() {
+ z = 7;
+}
+
+C::C() {
+ q = 11;
+}
+
+int A::f(int xopia) {
+ y++;
+ return xopia * y;
+}
+
+int B::g(int xulliver) {
+ z++;
+ return xulliver * z;
+}
+
+int C::f(int xerod) {
+ return xerod * q;
+}
+
+int C::g(int xavon) {
+ return xavon * q * 404;
+}
+
+int main() {
+ A test2;
+ std::cout << "A.f(1) = " << test2.f(1) << "\n";
+
+ B test3;
+ std::cout << "B.g(1) = " << test3.g(1) << "\n";
+
+ C test;
+ std::cout << "C.f(1) = " << test.f(1) << "\n";
+ std::cout << "C.g(1) = " << test.g(1) << "\n";
+ A *q = &test;
+ std::cout << "(C as A).f(1) = " << q->f(1) << "\n";
+ std::cout << "C.f(1) = " << test.f(1) << "\n";
+ std::cout << "(C as A).f(1) = " << q->f(1) << "\n";
+ std::cout << "C.f(1) = " << test.f(1) << "\n";
+ B *r = &test;
+ std::cout << "(C as B).g(1) = " << r->g(1) << "\n";
+ std::cout << "C.g(1) = " << test.g(1) << "\n";
+ std::cout << "(C as B).g(1) = " << r->g(1) << "\n";
+ std::cout << "C.g(1) = " << test.g(1) << "\n";
+}
+
diff --git a/tests/exec/multisuper3.out b/tests/exec/multisuper3.out
new file mode 100644
index 0000000..cead147
--- /dev/null
+++ b/tests/exec/multisuper3.out
@@ -0,0 +1,12 @@
+A.f(1) = 13
+B.g(1) = 8
+C.f(1) = 11
+C.g(1) = 4444
+(C as A).f(1) = 11
+C.f(1) = 11
+(C as A).f(1) = 11
+C.f(1) = 11
+(C as B).g(1) = 8
+C.g(1) = 4444
+(C as B).g(1) = 9
+C.g(1) = 4444