95 lines
1.6 KiB
C++
95 lines
1.6 KiB
C++
#include <rcp.h>
|
|
#include <cassert>
|
|
|
|
static int mybase_construct;
|
|
static int mybase_destruct;
|
|
static int myderived_construct;
|
|
static int myderived_destruct;
|
|
|
|
class MyBase
|
|
{
|
|
rcp_managed_root(MyBase);
|
|
|
|
protected:
|
|
MyBase(int x, int y)
|
|
{
|
|
this->x = x;
|
|
this->y = y;
|
|
mybase_construct++;
|
|
}
|
|
|
|
virtual ~MyBase()
|
|
{
|
|
mybase_destruct++;
|
|
}
|
|
|
|
public:
|
|
int x;
|
|
int y;
|
|
};
|
|
|
|
class MyDerived : public MyBase
|
|
{
|
|
rcp_managed(MyDerived);
|
|
|
|
protected:
|
|
MyDerived(double v) : MyBase(1, 2)
|
|
{
|
|
this->v = v;
|
|
myderived_construct++;
|
|
}
|
|
|
|
virtual ~MyDerived()
|
|
{
|
|
myderived_destruct++;
|
|
}
|
|
|
|
public:
|
|
double v;
|
|
};
|
|
|
|
void test_destructors_called()
|
|
{
|
|
{
|
|
rcp<MyBase> mybase = MyBase::create(4, 5);
|
|
rcp<MyDerived> myderived = MyDerived::create(42.5);
|
|
}
|
|
assert(mybase_construct == 2);
|
|
assert(mybase_destruct == 2);
|
|
assert(myderived_construct == 1);
|
|
assert(myderived_destruct == 1);
|
|
}
|
|
|
|
void test_dereference()
|
|
{
|
|
rcp<MyBase> mybase = MyBase::create(2, 3);
|
|
assert(mybase->x == 2);
|
|
assert(mybase->y == 3);
|
|
assert((*mybase).x == 2);
|
|
assert((*mybase).y == 3);
|
|
}
|
|
|
|
void test_booleans()
|
|
{
|
|
rcp<MyBase> mybase = MyBase::create(2, 3);
|
|
assert(mybase);
|
|
rcp<MyDerived> myderived;
|
|
assert(!myderived);
|
|
}
|
|
|
|
void test_create()
|
|
{
|
|
typedef rcp<MyBase> MyB;
|
|
MyB myb = MyB::create(8, 9);
|
|
assert(myb->x == 8);
|
|
}
|
|
|
|
int main(int argc, char * argv[])
|
|
{
|
|
test_destructors_called();
|
|
test_dereference();
|
|
test_booleans();
|
|
test_create();
|
|
return 0;
|
|
}
|