[colobot] 32/74: Allow circular references from different classes (#814)

Didier Raboud odyx at moszumanska.debian.org
Mon Nov 7 07:50:02 UTC 2016


This is an automated email from the git hooks/post-receive script.

odyx pushed a commit to branch debian/master
in repository colobot.

commit d411c5ebc0a56a28a707b897d545fdde1393b086
Merge: b9d4d57 71aa7e4
Author: krzys-h <krzys_h at interia.pl>
Date:   Tue Aug 9 21:10:07 2016 +0200

    Allow circular references from different classes (#814)
    
     Conflicts:
    	test/unit/CBot/CBot_test.cpp

 src/CBot/CBotClass.cpp       | 33 +++++++++++++++++++++++++++++++--
 src/CBot/CBotClass.h         | 10 ++++++++++
 src/CBot/CBotProgram.cpp     |  4 ++++
 test/unit/CBot/CBot_test.cpp | 35 +++++++++++++++++++++++++++++++++++
 4 files changed, 80 insertions(+), 2 deletions(-)

diff --cc test/unit/CBot/CBot_test.cpp
index d7cc877,7158bf0..da9fd95
--- a/test/unit/CBot/CBot_test.cpp
+++ b/test/unit/CBot/CBot_test.cpp
@@@ -1006,283 -1006,41 +1006,318 @@@ TEST_F(CBotUT, ClassStringAdd_Issue535
      );
  }
  
 +TEST_F(CBotUT, ClassInheritanceAssignment)
 +{
 +    ExecuteTest(
 +        "public class BaseClass {}\n"
 +        "public class MidClass extends BaseClass {}\n"
 +        "public class SubClass extends MidClass {}\n"
 +        "extern void ClassInheritanceVars()\n"
 +        "{\n"
 +        "    BaseClass bc = new MidClass();\n"
 +        "    MidClass  mc = bc;\n"
 +        "    mc = new SubClass();\n"
 +        "    SubClass  sc = mc;\n"
 +        "    bc = mc;\n"
 +        "    bc = new MidClass();\n"
 +        "    bc = new SubClass();\n"
 +        "    sc = bc;\n"
 +        "}\n"
 +    );
 +}
 +
 +TEST_F(CBotUT, ClassInheritanceVars)
 +{
 +    ExecuteTest(
 +        "public class BaseClass {\n"
 +        "    int a = 123;\n"
 +        "    int b = 456;\n"
 +        "    int c = 789;\n"
 +        "}\n"
 +        "public class MidClass extends BaseClass {\n"
 +        "    int b = 1011;\n"
 +        "    int c = 1213;\n"
 +        "    int d = 1415;\n"
 +        "}\n"
 +        "public class SubClass extends MidClass {\n"
 +        "    int c = 1617;\n"
 +        "    int d = 1819;\n"
 +        "    int e = 2021;\n"
 +        "}\n"
 +        "extern void ClassInheritanceVars()\n"
 +        "{\n"
 +        "    BaseClass bc();\n"
 +        "    ASSERT(bc.a == 123);\n"
 +        "    ASSERT(bc.b == 456);\n"
 +        "    ASSERT(bc.c == 789);\n"
 +        "    MidClass  mc();\n"
 +        "    ASSERT(mc.a == 123);\n"
 +        "    ASSERT(mc.b == 1011);\n"
 +        "    ASSERT(mc.c == 1213);\n"
 +        "    ASSERT(mc.d == 1415);\n"
 +        "    SubClass  sc();\n"
 +        "    ASSERT(sc.a == 123);\n"
 +        "    ASSERT(sc.b == 1011);\n"
 +        "    ASSERT(sc.c == 1617);\n"
 +        "    ASSERT(sc.d == 1819);\n"
 +        "    ASSERT(sc.e == 2021);\n"
 +        // Test polymorphism
 +        "    bc = mc;\n"
 +        "    ASSERT(bc.a == 123);\n"
 +        "    ASSERT(bc.b == 456);\n"
 +        "    ASSERT(bc.c == 789);\n"
 +        "    mc = sc;\n"
 +        "    ASSERT(mc.a == 123);\n"
 +        "    ASSERT(mc.b == 1011);\n"
 +        "    ASSERT(mc.c == 1213);\n"
 +        "    ASSERT(mc.d == 1415);\n"
 +        "}\n"
 +    );
 +}
 +
 +TEST_F(CBotUT, ClassInheritanceMethods)
 +{
 +    ExecuteTest(
 +        "public class BaseClass {\n"
 +        "    int a = 123;\n"
 +        "    int b = 456;\n"
 +        "    int c = 789;\n"
 +        "    int testOverride() { return 123; }\n"
 +        "    int testNoOverride() { return 456; }\n"
 +        "    int testInsideBaseClass() {\n"
 +        "        ASSERT(a == 123);\n"
 +        "        ASSERT(b == 456);\n"
 +        "        ASSERT(c == 789);\n"
 +        "        ASSERT(456 == testNoOverride());\n"
 +        "        return c;\n"
 +        "    }\n"
 +        "    int testInsideBaseOverride() { return testOverride(); }\n"
 +        "}\n"
 +        "public class MidClass extends BaseClass {\n"
 +        "    int b = 1011;\n"
 +        "    int c = 1213;\n"
 +        "    int d = 1415;\n"
 +        "    int testOverride() { return 1011; }\n"
 +        "    int testInsideMidClass() {\n"
 +        "        ASSERT(a == 123);\n"
 +        "        ASSERT(b == 1011);\n"
 +        "        ASSERT(c == 1213);\n"
 +        "        ASSERT(d == 1415);\n"
 +        "        ASSERT(456  == testNoOverride());\n"
 +        "        ASSERT(789  == testInsideBaseClass());\n"
 +        "        return c;\n"
 +        "    }\n"
 +        "    int testSuper() {\n"
 +        "        ASSERT(super.a == 123);\n"
 +        "        ASSERT(super.b == 456);\n"
 +        "        ASSERT(super.c == 789);\n"
 +        "        ASSERT(123 == super.testOverride());\n"
 +        "        ASSERT(789 == super.testInsideBaseClass());\n"
 +        "        return super.testInsideBaseOverride();\n"
 +        "    }\n"
 +        "    int testInsideMidOverride() { return testOverride(); }\n"
 +        "}\n"
 +        "public class SubClass extends MidClass {\n"
 +        "    int c = 1617;\n"
 +        "    int d = 1819;\n"
 +        "    int e = 2021;\n"
 +        "    int testOverride() { return 1617; }\n"
 +        "    int testInsideSubClass() {\n"
 +        "        ASSERT(a == 123);\n"
 +        "        ASSERT(b == 1011);\n"
 +        "        ASSERT(c == 1617);\n"
 +        "        ASSERT(d == 1819);\n"
 +        "        ASSERT(e == 2021);\n"
 +        "        ASSERT(456  == testNoOverride());\n"
 +        "        ASSERT(789  == testInsideBaseClass());\n"
 +        "        ASSERT(1213 == testInsideMidClass());\n"
 +        "        return c;\n"
 +        "    }\n"
 +        "    int testSuper() {\n"
 +        "        ASSERT(super.a == 123);\n"
 +        "        ASSERT(super.b == 1011);\n"
 +        "        ASSERT(super.c == 1213);\n"
 +        "        ASSERT(super.d == 1415);\n"
 +        "        ASSERT(1011 == super.testOverride());\n"
 +        "        ASSERT(789  == super.testInsideBaseClass());\n"
 +        "        ASSERT(1213 == super.testInsideMidClass());\n"
 +        "        return super.testSuper();\n"
 +        "    }\n"
 +        "    int testInsideSubOverride() { return testOverride(); }\n"
 +        "}\n"
 +        "extern void InheritanceMethods()\n"
 +        "{\n"
 +        "    BaseClass bc();\n"
 +        "    ASSERT(123 == bc.testOverride());\n"
 +        "    ASSERT(456 == bc.testNoOverride());\n"
 +        "    ASSERT(789 == bc.testInsideBaseClass());\n"
 +        "    ASSERT(123 == bc.testInsideBaseOverride());\n"
 +        "    MidClass  mc();\n"
 +        "    ASSERT(1011 == mc.testSuper());\n"
 +        "    ASSERT(1011 == mc.testOverride());\n"
 +        "    ASSERT(456  == mc.testNoOverride());\n"
 +        "    ASSERT(789  == mc.testInsideBaseClass());\n"
 +        "    ASSERT(1213 == mc.testInsideMidClass());\n"
 +        "    ASSERT(1011 == mc.testInsideBaseOverride());\n"
 +        "    ASSERT(1011 == mc.testInsideMidOverride());\n"
 +        "    SubClass  sc();\n"
 +        "    ASSERT(1617 == sc.testSuper());\n"
 +        "    ASSERT(1617 == sc.testOverride());\n"
 +        "    ASSERT(456  == sc.testNoOverride());\n"
 +        "    ASSERT(789  == sc.testInsideBaseClass());\n"
 +        "    ASSERT(1213 == sc.testInsideMidClass());\n"
 +        "    ASSERT(1617 == sc.testInsideSubClass());\n"
 +        "    ASSERT(1617 == sc.testInsideBaseOverride());\n"
 +        "    ASSERT(1617 == sc.testInsideMidOverride());\n"
 +        "    ASSERT(1617 == sc.testInsideSubOverride());\n"
 +        // Test polymorphism
 +        "    bc = mc;\n"
 +        "    ASSERT(1011 == bc.testOverride());\n"
 +        "    ASSERT(789  == bc.testInsideBaseClass());\n"
 +        "    ASSERT(1011 == bc.testInsideBaseOverride());\n"
 +        "    bc = sc;\n"
 +        "    ASSERT(1617 == bc.testOverride());\n"
 +        "    ASSERT(789  == bc.testInsideBaseClass());\n"
 +        "    ASSERT(1617 == bc.testInsideBaseOverride());\n"
 +        "    mc = sc;\n"
 +        "    ASSERT(1617 == mc.testSuper());\n"
 +        "    ASSERT(1617 == mc.testOverride());\n"
 +        "    ASSERT(789  == mc.testInsideBaseClass());\n"
 +        "    ASSERT(1213 == mc.testInsideMidClass());\n"
 +        "    ASSERT(1617 == mc.testInsideBaseOverride());\n"
 +        "    ASSERT(1617 == mc.testInsideMidOverride());\n"
 +        "}\n"
 +    );
 +}
 +
 +TEST_F(CBotUT, ClassInheritanceTestThis)
 +{
 +    ExecuteTest(
 +        "public class BaseClass {\n"
 +        "    int a = 123;\n"
 +        "    int b = 456;\n"
 +        "    int c = 789;\n"
 +        "    void testBaseMembersAndParams(int a, int b, int c) {\n"
 +        "        ASSERT(a != 123);\n"
 +        "        ASSERT(b != 456);\n"
 +        "        ASSERT(c != 789);\n"
 +        "        ASSERT(this.a == 123);\n"
 +        "        ASSERT(this.b == 456);\n"
 +        "        ASSERT(this.c == 789);\n"
 +        "    }\n"
 +        "    BaseClass testSuperReturnThis(){ return this; }\n"
 +        "    BaseClass testReturnThisFromBaseClass() { return this; }\n"
 +        "}\n"
 +        "public class MidClass extends BaseClass {\n"
 +        "    int b = 1011;\n"
 +        "    int c = 1213;\n"
 +        "    int d = 1415;\n"
 +        "    void testMidMembersAndParams(int a, int b, int c, int d) {\n"
 +        "        ASSERT(a != 123);\n"
 +        "        ASSERT(b != 1011);\n"
 +        "        ASSERT(c != 1213);\n"
 +        "        ASSERT(d != 1415);\n"
 +        "        ASSERT(this.a == 123);\n"
 +        "        ASSERT(this.b == 1011);\n"
 +        "        ASSERT(this.c == 1213);\n"
 +        "        ASSERT(this.d == 1415);\n"
 +        "    }\n"
 +        "    MidClass testSuperReturnThis(){ return super.testSuperReturnThis(); }\n"
 +        "    MidClass testReturnThisFromMidClass() { return this; }\n"
 +        "}\n"
 +        "public class SubClass extends MidClass {\n"
 +        "    int c = 1617;\n"
 +        "    int d = 1819;\n"
 +        "    int e = 2021;\n"
 +        "    void testSubMembersAndParams(int a, int b, int c, int d, int e) {\n"
 +        "        ASSERT(a != 123);\n"
 +        "        ASSERT(b != 1011);\n"
 +        "        ASSERT(c != 1617);\n"
 +        "        ASSERT(d != 1819);\n"
 +        "        ASSERT(e != 2021);\n"
 +        "        ASSERT(this.a == 123);\n"
 +        "        ASSERT(this.b == 1011);\n"
 +        "        ASSERT(this.c == 1617);\n"
 +        "        ASSERT(this.d == 1819);\n"
 +        "        ASSERT(this.e == 2021);\n"
 +        "    }\n"
 +        "    SubClass testSuperReturnThis(){ return super.testSuperReturnThis(); }\n"
 +        "    SubClass testReturnThisFromSubClass() { return this; }\n"
 +        "}\n"
 +        "extern void ClassInheritanceTestThis()\n"
 +        "{\n"
 +        "    BaseClass bc();\n"
 +        "    MidClass  mc();\n"
 +        "    SubClass  sc();\n"
 +        "    ASSERT(bc == bc.testSuperReturnThis());\n"
 +        "    ASSERT(bc == bc.testReturnThisFromBaseClass());\n"
 +        "                 bc.testBaseMembersAndParams(-1, -2, -3);\n"
 +        "    ASSERT(mc == mc.testSuperReturnThis());\n"
 +        "    ASSERT(mc == mc.testReturnThisFromBaseClass());\n"
 +        "    ASSERT(mc == mc.testReturnThisFromMidClass());\n"
 +        "                 mc.testBaseMembersAndParams(-1, -2, -3);\n"
 +        "                 mc.testMidMembersAndParams(-1, -2, -3, -4);\n"
 +        "    ASSERT(sc == sc.testSuperReturnThis());\n"
 +        "    ASSERT(sc == sc.testReturnThisFromBaseClass());\n"
 +        "    ASSERT(sc == sc.testReturnThisFromMidClass());\n"
 +        "    ASSERT(sc == sc.testReturnThisFromSubClass());\n"
 +        "                 sc.testBaseMembersAndParams(-1, -2, -3);\n"
 +        "                 sc.testMidMembersAndParams(-1, -2, -3, -4);\n"
 +        "                 sc.testSubMembersAndParams(-1, -2, -3, -4, -5);\n"
 +        // Test polymorphism
 +        "    bc = mc;\n"
 +        "    ASSERT(mc == bc.testSuperReturnThis());\n"
 +        "    ASSERT(mc == bc.testReturnThisFromBaseClass());\n"
 +        "                 bc.testBaseMembersAndParams(-1, -2, -3);\n"
 +        "    bc = sc;\n"
 +        "    ASSERT(sc == bc.testSuperReturnThis());\n"
 +        "    ASSERT(sc == bc.testReturnThisFromBaseClass());\n"
 +        "                 bc.testBaseMembersAndParams(-1, -2, -3);\n"
 +        "    mc = sc;\n"
 +        "    ASSERT(sc == mc.testSuperReturnThis());\n"
 +        "    ASSERT(sc == mc.testReturnThisFromBaseClass());\n"
 +        "    ASSERT(sc == mc.testReturnThisFromMidClass());\n"
 +        "                 mc.testBaseMembersAndParams(-1, -2, -3);\n"
 +        "                 mc.testMidMembersAndParams(-1, -2, -3, -4);\n"
 +        "}\n"
 +    );
 +}
 +
+ TEST_F(CBotUT, ClassCompileCircularReference_Issue433)
+ {
+     ExecuteTest(
+         "public class OtherClass {\n"
+         "    TestClass testclass;\n"
+         "}\n"
+         "public class TestClass {\n"
+         "    int test;\n"
+         "    OtherClass otherclass;\n"
+         "}\n"
+         "extern void TestCompileCircularReference()\n"
+         "{\n"
+         "    TestClass t();\n"
+         "}\n"
+     );
+ }
+ 
+ TEST_F(CBotUT, ClassTestClassDefinedAfterReference)
+ {
+     ExecuteTest(
+         "public class OtherClass {\n"
+         "    TestClass testclass = new TestClass();\n"
+         "}\n"
+         "public class TestClass {\n"
+         "    int test = 246;\n"
+         "}\n"
+         "extern void TestDefinedAfterReference()\n"
+         "{\n"
+         "    OtherClass o();\n"
+         "    TestClass t = o.testclass;\n"
+         "    ASSERT(t.test == 246);\n"
+         "}\n"
+     );
+ }
+ 
  TEST_F(CBotUT, String)
  {
      ExecuteTest(

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git



More information about the Pkg-games-commits mailing list