#include #include #include #include "objmgr.h" #include "unity.h" #include "xstring.h" void test_xstring_create(void) { objmgr_t mgr; char* s1 = "Hello,world"; char* s2 = NULL; int rc = 0; myobj_t* obj; objmgr_init(&mgr); register_xstring(&mgr,4,4); TEST_ASSERT_EQUAL(1, mgr.types.count); s2 = create_obj_by_typename(&mgr, "xstring", s1); TEST_ASSERT_NOT_NULL(s2); obj = TO_MYOBJ(s2); TEST_ASSERT_EQUAL(1, XSTRING_OBJ_TYPE_STRINGS(obj).count); rc = strcmp(s1, s2); TEST_ASSERT_EQUAL(0, rc); objmgr_fini(&mgr); } void test_xstring_ref(void) { objmgr_t mgr; char* s1 = NULL; char* s2 = NULL; myobj_t* obj; objmgr_init(&mgr); register_xstring(&mgr,4,4); TEST_ASSERT_EQUAL(1, mgr.types.count); s1 = create_obj_by_typename(&mgr, "xstring", "Hello,world"); TEST_ASSERT_NOT_NULL(s1); obj = TO_MYOBJ(s1); TEST_ASSERT_EQUAL(1, XSTRING_OBJ_TYPE_STRINGS(obj).count); s2 = (char*)obj_ref(s1, OBJREF_READ); TEST_ASSERT_EQUAL(s1, s2); TEST_ASSERT_EQUAL(2, obj->nref); objmgr_fini(&mgr); } void test_xstring_deref(void) { objmgr_t mgr; char* s1 = "Hello,world"; char* s2 = NULL; int rc = 0; myobj_t* obj; objmgr_init(&mgr); register_xstring(&mgr,4,4); TEST_ASSERT_EQUAL(1, mgr.types.count); s2 = create_obj_by_typename(&mgr, "xstring", s1); TEST_ASSERT_NOT_NULL(s2); rc = strcmp(s1, s2); TEST_ASSERT_EQUAL(0, rc); if (rc == 0) { objtype_t *typeval; obj = TO_MYOBJ(s2); typeval = obj->type; obj_deref(s2); TEST_ASSERT_EQUAL(0, XSTRING_TYPE_STRINGS(typeval).count); } objmgr_fini(&mgr); } void test_xstring_share(void) { objmgr_t mgr; char* s1 = "Hello,world"; char* s2 = NULL; char* s3 = NULL; int rc = 0; objmgr_init(&mgr); register_xstring(&mgr,4,4); TEST_ASSERT_EQUAL(1, mgr.types.count); s2 = create_obj_by_typename(&mgr, "xstring", s1); TEST_ASSERT_NOT_NULL(s2); rc = strcmp(s1, s2); TEST_ASSERT_EQUAL(0, rc); s3 = create_obj_by_typename(&mgr, "xstring", s1); TEST_ASSERT_EQUAL(s2, s3); if (1) { myobj_t* obj; obj = TO_MYOBJ(s3); TEST_ASSERT_EQUAL(2, obj->nref); } objmgr_fini(&mgr); } void test_xstrings(void) { printf("\n>> xstring test\n\n"); RUN_TEST(test_xstring_create); RUN_TEST(test_xstring_ref); RUN_TEST(test_xstring_deref); RUN_TEST(test_xstring_share); return; }