#include <bee2/core/mem.h>
#include <bee2/core/obj.h>
struct obj_test1_t
{
obj_hdr_t hdr;
octet* p1;
word* p2;
octet a1[12];
word a2[12];
};
struct obj_test2_t
{
obj_hdr_t hdr;
struct obj_test1_t* p1;
octet* p2;
octet a2[123];
};
bool_t objTest()
{
octet buf[1024];
struct obj_test1_t obj1[1];
struct obj_test2_t obj2[1];
void* t;
obj1->hdr.keep = sizeof(struct obj_test1_t);
obj1->hdr.p_count = 2;
obj1->hdr.o_count = 0;
obj1->p1 = obj1->a1;
obj1->p2 = obj1->a2;
memSet(obj1->a1, 0x11, sizeof(obj1->a1));
memSet(obj1->a2, 0x12, sizeof(obj1->a2));
obj2->hdr.keep = sizeof(struct obj_test2_t);
obj2->hdr.p_count = 2;
obj2->hdr.o_count = 1;
obj2->p1 = obj1;
obj2->p2 = obj2->a2;
memSet(obj2->a2, 0x22, sizeof(obj2->a2));
if (sizeof(buf) < objKeep(obj1) + 2 * objKeep(obj2))
return FALSE;
memSetZero(buf, sizeof(buf));
objCopy(buf, obj2);
objAppend(buf, obj1, 0);
t = objPtr(buf, 0, void);
if (memCmp(objPtr(t, 0, void), obj1->a1, sizeof(obj1->a1)) != 0 ||
memCmp(objPtr(t, 1, void), obj1->a2, sizeof(obj1->a2)) != 0 ||
memCmp(objPtr(buf, 1, void), obj2->a2, sizeof(obj2->a2)))
return FALSE;
objAppend(buf, buf, 0);
t = objPtr(buf, 0, void);
if (memCmp(objPtr(t, 1, void), obj2->a2, sizeof(obj2->a2)) != 0)
return FALSE;
return TRUE;
}