Initial import of Dillo
This commit is contained in:
55
test/unit/identity.cc
Normal file
55
test/unit/identity.cc
Normal file
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* This small program tests how IdentifiableObject works with multiple
|
||||
* inheritance ("diamond" inheritance, more precisely, since all
|
||||
* classes have there root in IdentifiableObject.)
|
||||
*
|
||||
* Current status: With virtual superclasses, you get a class
|
||||
* hierarchy "root -> A -> B -> C", so that the first part of this
|
||||
* example works actually (C is a subclass of A and of B), but the
|
||||
* second fails (it should print "false", but it is erroneously
|
||||
* assumed that B is a subclass of A.)
|
||||
*/
|
||||
|
||||
#include "lout/identity.hh"
|
||||
|
||||
using namespace lout::identity;
|
||||
|
||||
class A: virtual public IdentifiableObject
|
||||
{
|
||||
public:
|
||||
static int CLASS_ID;
|
||||
inline A () { registerName ("A", &CLASS_ID); }
|
||||
};
|
||||
|
||||
class B: virtual public IdentifiableObject
|
||||
{
|
||||
public:
|
||||
static int CLASS_ID;
|
||||
inline B () { registerName ("B", &CLASS_ID); }
|
||||
};
|
||||
|
||||
class C: public A, public B
|
||||
{
|
||||
public:
|
||||
static int CLASS_ID;
|
||||
inline C () { registerName ("C", &CLASS_ID); }
|
||||
};
|
||||
|
||||
int A::CLASS_ID = -1, B::CLASS_ID = -1, C::CLASS_ID = -1;
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
printf ("A: %d, B: %d, C: %d\n", A::CLASS_ID, B::CLASS_ID, C::CLASS_ID);
|
||||
|
||||
C x;
|
||||
assert (x.instanceOf (A::CLASS_ID));
|
||||
assert (x.instanceOf (B::CLASS_ID));
|
||||
assert (x.instanceOf (C::CLASS_ID));
|
||||
printf ("x: %d\n", x.getClassId ());
|
||||
|
||||
B y;
|
||||
printf ("y: %d; instance of A: %s\n",
|
||||
y.getClassId (), y.instanceOf (B::CLASS_ID) ? "true" : "false");
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user