- implement xstring by librtti
This commit is contained in:
parent
15fac3cda1
commit
ce69347581
7 changed files with 250 additions and 95 deletions
|
|
@ -4,122 +4,77 @@
|
|||
#include <unity/unity.h>
|
||||
|
||||
#include "objmgr.h"
|
||||
#include "utils.h"
|
||||
#include "xstring.h"
|
||||
|
||||
void test_xstring_create(void)
|
||||
static void test_xstring_create(void)
|
||||
{
|
||||
objmgr_t mgr;
|
||||
char* s1 = "Hello,world";
|
||||
char* s2 = NULL;
|
||||
int rc = 0;
|
||||
myobj_t* obj;
|
||||
char* s = "Hello, world";
|
||||
char* d = NULL;
|
||||
int rc;
|
||||
|
||||
objmgr_init(&mgr);
|
||||
register_xstring(&mgr, 4, 4);
|
||||
TEST_ASSERT_EQUAL(1, mgr.types.count);
|
||||
rc = xstring_table_init(139);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
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);
|
||||
d = makeString(s);
|
||||
TEST_ASSERT_TRUE(d != NULL);
|
||||
|
||||
rc = strcmp(s1, s2);
|
||||
TEST_ASSERT_EQUAL(0, rc);
|
||||
TEST_ASSERT_TRUE(strcmp(d, s) == 0);
|
||||
TEST_ASSERT_TRUE(length(d) == strlen(s));
|
||||
TEST_ASSERT_TRUE(hash(d) == hash_string(s));
|
||||
|
||||
objmgr_fini(&mgr);
|
||||
xstring_table_fini();
|
||||
}
|
||||
|
||||
void test_xstring_ref(void)
|
||||
static void test_xstring_share(void)
|
||||
{
|
||||
objmgr_t mgr;
|
||||
char* s1 = NULL;
|
||||
char* s2 = NULL;
|
||||
myobj_t* obj;
|
||||
char* s = "Hello, world";
|
||||
char* d = NULL;
|
||||
char* d1 = NULL;
|
||||
int rc;
|
||||
|
||||
objmgr_init(&mgr);
|
||||
register_xstring(&mgr, 4, 4);
|
||||
TEST_ASSERT_EQUAL(1, mgr.types.count);
|
||||
rc = xstring_table_init(139);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
s1 = create_obj_by_typename(&mgr, "xstring", "Hello,world");
|
||||
TEST_ASSERT_NOT_NULL(s1);
|
||||
d = makeString(s);
|
||||
TEST_ASSERT_TRUE(d != NULL);
|
||||
|
||||
obj = TO_MYOBJ(s1);
|
||||
TEST_ASSERT_EQUAL(1, XSTRING_OBJ_TYPE_STRINGS(obj).count);
|
||||
TEST_ASSERT_TRUE(strcmp(d, s) == 0);
|
||||
TEST_ASSERT_TRUE(length(d) == strlen(s));
|
||||
TEST_ASSERT_TRUE(hash(d) == hash_string(s));
|
||||
|
||||
s2 = (char*)obj_ref(s1, OBJREF_READ);
|
||||
TEST_ASSERT_EQUAL(s1, s2);
|
||||
d1 = makeString(s);
|
||||
TEST_ASSERT_TRUE(d1 != NULL);
|
||||
TEST_ASSERT_TRUE(d == d1);
|
||||
|
||||
TEST_ASSERT_EQUAL(2, obj->nref);
|
||||
objmgr_fini(&mgr);
|
||||
xstring_table_fini();
|
||||
}
|
||||
|
||||
void test_xstring_deref(void)
|
||||
static void test_xstring_deref(void)
|
||||
{
|
||||
objmgr_t mgr;
|
||||
char* s1 = "Hello,world";
|
||||
char* s2 = NULL;
|
||||
int rc = 0;
|
||||
myobj_t* obj;
|
||||
char* s = "Hello, world";
|
||||
char* d = NULL;
|
||||
int rc;
|
||||
|
||||
objmgr_init(&mgr);
|
||||
register_xstring(&mgr, 4, 4);
|
||||
TEST_ASSERT_EQUAL(1, mgr.types.count);
|
||||
rc = xstring_table_init(139);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
s2 = create_obj_by_typename(&mgr, "xstring", s1);
|
||||
TEST_ASSERT_NOT_NULL(s2);
|
||||
d = makeString(s);
|
||||
TEST_ASSERT_TRUE(d != NULL);
|
||||
|
||||
rc = strcmp(s1, s2);
|
||||
TEST_ASSERT_TRUE(strcmp(d, s) == 0);
|
||||
TEST_ASSERT_TRUE(length(d) == strlen(s));
|
||||
TEST_ASSERT_TRUE(hash(d) == hash_string(s));
|
||||
|
||||
TEST_ASSERT_EQUAL(0, rc);
|
||||
if (rc == 0) {
|
||||
objtype_t* typeval;
|
||||
dereference((var)d);
|
||||
|
||||
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);
|
||||
xstring_table_fini();
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue