diff options
author | Benjamin Paassen <bpaassen@techfak.uni-bielefeld.de> | 2015-01-16 15:20:49 +0100 |
---|---|---|
committer | Benjamin Paassen <bpaassen@techfak.uni-bielefeld.de> | 2015-01-16 15:20:49 +0100 |
commit | 9929838e62d9c17647d74be54af5853e8b613c4b (patch) | |
tree | 732446f234419a0f1baa5208722e9236affd74bc /test/core/model/DomainTest.cpp | |
parent | 8cf24170a4998e316c1b9c9bfd2b56e266c544cd (diff) |
validate function for Domain::Descriptor.
Diffstat (limited to 'test/core/model/DomainTest.cpp')
-rw-r--r-- | test/core/model/DomainTest.cpp | 68 |
1 files changed, 67 insertions, 1 deletions
diff --git a/test/core/model/DomainTest.cpp b/test/core/model/DomainTest.cpp index 772130c..5909841 100644 --- a/test/core/model/DomainTest.cpp +++ b/test/core/model/DomainTest.cpp @@ -147,7 +147,6 @@ TEST(Descriptor, pathToAdvanced) * * So the path start_field , E , E_field should be returned. */ - Logger logger; Manager mgr{1}; Rooted<SystemTypesystem> sys{new SystemTypesystem(mgr)}; // Construct the domain @@ -218,5 +217,72 @@ TEST(Descriptor, pathToAdvanced) ASSERT_TRUE(path[2]->isa(RttiTypes::FieldDescriptor)); ASSERT_EQ("", path[2]->getName()); } + +TEST(StructuredClass, isSubclassOf) +{ + // create an inheritance hierarchy. + Manager mgr{1}; + Rooted<SystemTypesystem> sys{new SystemTypesystem(mgr)}; + Rooted<Domain> domain{new Domain(mgr, sys, "inheritance")}; + Cardinality any; + any.merge(Range<size_t>::typeRangeFrom(0)); + Rooted<StructuredClass> A{new StructuredClass( + mgr, "A", domain, any, {nullptr}, {nullptr}, false, true)}; + // first branch + Rooted<StructuredClass> B{ + new StructuredClass(mgr, "B", domain, any, {nullptr}, A)}; + Rooted<StructuredClass> C{ + new StructuredClass(mgr, "C", domain, any, {nullptr}, B)}; + // second branch + Rooted<StructuredClass> D{ + new StructuredClass(mgr, "D", domain, any, {nullptr}, A)}; + Rooted<StructuredClass> E{ + new StructuredClass(mgr, "E", domain, any, {nullptr}, D)}; + Rooted<StructuredClass> F{ + new StructuredClass(mgr, "F", domain, any, {nullptr}, D)}; + + // check function results + ASSERT_FALSE(A->isSubclassOf(A)); + ASSERT_FALSE(A->isSubclassOf(B)); + ASSERT_FALSE(A->isSubclassOf(C)); + ASSERT_FALSE(A->isSubclassOf(D)); + ASSERT_FALSE(A->isSubclassOf(E)); + ASSERT_FALSE(A->isSubclassOf(F)); + + ASSERT_TRUE(B->isSubclassOf(A)); + ASSERT_FALSE(B->isSubclassOf(B)); + ASSERT_FALSE(B->isSubclassOf(C)); + ASSERT_FALSE(B->isSubclassOf(D)); + ASSERT_FALSE(B->isSubclassOf(E)); + ASSERT_FALSE(B->isSubclassOf(F)); + + ASSERT_TRUE(C->isSubclassOf(A)); + ASSERT_TRUE(C->isSubclassOf(B)); + ASSERT_FALSE(C->isSubclassOf(C)); + ASSERT_FALSE(C->isSubclassOf(D)); + ASSERT_FALSE(C->isSubclassOf(E)); + ASSERT_FALSE(C->isSubclassOf(F)); + + ASSERT_TRUE(D->isSubclassOf(A)); + ASSERT_FALSE(D->isSubclassOf(B)); + ASSERT_FALSE(D->isSubclassOf(C)); + ASSERT_FALSE(D->isSubclassOf(D)); + ASSERT_FALSE(D->isSubclassOf(E)); + ASSERT_FALSE(D->isSubclassOf(F)); + + ASSERT_TRUE(E->isSubclassOf(A)); + ASSERT_FALSE(E->isSubclassOf(B)); + ASSERT_FALSE(E->isSubclassOf(C)); + ASSERT_TRUE(E->isSubclassOf(D)); + ASSERT_FALSE(E->isSubclassOf(E)); + ASSERT_FALSE(E->isSubclassOf(F)); + + ASSERT_TRUE(F->isSubclassOf(A)); + ASSERT_FALSE(F->isSubclassOf(B)); + ASSERT_FALSE(F->isSubclassOf(C)); + ASSERT_TRUE(F->isSubclassOf(D)); + ASSERT_FALSE(F->isSubclassOf(E)); + ASSERT_FALSE(F->isSubclassOf(F)); +} } } |