rcp/test/tests.cpp
2026-02-23 22:52:07 -05:00

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;
}