📄 su_alloc_test.c
字号:
TEST_S((s = su_strlst_join(l, home, "")), "abcdefghij"); TEST_S(su_strlst_append(l, "a"), "a"); TEST_S(su_strlst_append(l, "b"), "b"); TEST_S(su_strlst_append(l, "c"), "c"); TEST_S(su_strlst_append(l, "d"), "d"); TEST_S(su_strlst_append(l, "e"), "e"); TEST_S(su_strlst_append(l, "f"), "f"); TEST_S(su_strlst_append(l, "g"), "g"); TEST_S(su_strlst_append(l, "h"), "h"); TEST_S(su_strlst_append(l, "i"), "i"); TEST_S(su_strlst_append(l, "j"), "j"); TEST_S((s = su_strlst_join(l, home, "")), "abcdefghijabcdefghij"); su_home_get_stats(su_strlst_home(l), 0, kids + 1, (sizeof kids[1])); su_home_stat_add(kids, kids + 1); su_strlst_destroy(l); su_home_get_stats(home, 1, parent, (sizeof parent)); su_home_check(home); su_home_deinit(home); su_home_init(home); { char s[] = "foo\nfaa\n"; TEST_1((l = su_strlst_split(home, s, "\n"))); TEST(su_strlst_len(l), 3); TEST_1(su_strlst_append(l, "bar")); TEST_S(su_strlst_join(l, home, "\n"), "foo\nfaa\n\nbar"); } { char s[] = "foo"; TEST_1((l = su_strlst_split(home, s, "\n"))); TEST(su_strlst_len(l), 1); } { char s[] = "\n\n"; TEST_1((l = su_strlst_split(home, s, "\n"))); TEST(su_strlst_len(l), 3); } { char s[] = ""; TEST_1((l = su_strlst_split(home, s, "\n"))); TEST(su_strlst_len(l), 1); } { int i;#define S \ "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\n" \ "n\no\np\nq\nr\ns\nt\nu\nv\nw\nx\ny\nz\n" \ "A\nB\nC\nD\nE\nF\nG\nH\nI\nJ\nK\nL\nM\n" \ "N\nO\nP\nQ\nR\nS\nT\nU\nV\nW\nX\nY\nZ\n" char s[] = S; TEST_1((l = su_strlst_split(home, s, "\n"))); TEST(su_strlst_len(l), 53); TEST_1(su_strlst_append(l, "bar")); TEST_S(su_strlst_join(l, home, "\n"), S "\nbar"); TEST_1(!su_strlst_remove(l, 54)); for (i = 0; i < 54; i++) { TEST_1(su_strlst_remove(l, 0)); TEST_1(!su_strlst_remove(l, 53 - i)); TEST(su_strlst_len(l), 53 - i); } TEST_1(!su_strlst_remove(l, 0)); TEST(su_strlst_len(l), 0); } su_home_deinit(home); END();}#include <sofia-sip/su_vector.h>typedef struct test_data_s { su_home_t test_home[1]; int data;} test_data_t;static void test_vector_free(void *data){ su_home_zap((su_home_t *) data);}static int test_vectors(void){ su_home_t home[1] = { SU_HOME_INIT(home) }; su_vector_t *v, *w; test_data_t *data1, *data2, *data3, *data4; char foo[] = "foo"; char bar[] = "bar"; char baz[] = "baz"; void **a; int i; BEGIN(); TEST_1(v = su_vector_create(home, NULL)); TEST_1(su_vector_is_empty(v)); TEST(su_vector_append(v, foo), 0); TEST(su_vector_append(v, bar), 0); TEST(su_vector_insert(v, 0, baz), 0); TEST(su_vector_item(v, 0), baz); TEST(su_vector_item(v, 1), foo); TEST(su_vector_item(v, 2), bar); TEST(su_vector_item(v, 3), NULL); TEST(su_vector_item(v, (unsigned)-1), NULL); TEST_1(!su_vector_is_empty(v)); su_vector_destroy(v); TEST_1(v = su_vector_create(home, NULL)); TEST(su_vector_insert(v, 0, "j"), 0); TEST(su_vector_insert(v, 0, "i"), 0); TEST(su_vector_insert(v, 0, "h"), 0); TEST(su_vector_insert(v, 0, "g"), 0); TEST(su_vector_insert(v, 0, "f"), 0); TEST(su_vector_insert(v, 0, "e"), 0); TEST(su_vector_insert(v, 0, "d"), 0); TEST(su_vector_insert(v, 0, "c"), 0); TEST(su_vector_insert(v, 0, "b"), 0); TEST(su_vector_insert(v, 0, "a"), 0); TEST(su_vector_len(v), 10); TEST_1(a = su_vector_get_array(v)); for (i = 0; i < 10; i++) { TEST_S(su_vector_item(v, i), a[i]); } TEST(su_vector_item(v, 10), NULL); TEST(a[10], NULL); TEST_1(w = su_vector_create(home, NULL)); TEST(su_vector_append(w, "a"), 0); TEST(su_vector_append(w, "b"), 0); TEST(su_vector_append(w, "c"), 0); TEST(su_vector_append(w, "d"), 0); TEST(su_vector_append(w, "e"), 0); TEST(su_vector_append(w, "f"), 0); TEST(su_vector_append(w, "g"), 0); TEST(su_vector_append(w, "h"), 0); TEST(su_vector_append(w, "i"), 0); TEST(su_vector_append(w, "j"), 0); TEST(su_vector_len(w), 10); for (i = 0; i < 10; i++) { TEST_S(su_vector_item(v, i), a[i]); } su_vector_empty(w); TEST_1(su_vector_is_empty(w)); su_vector_destroy(v); su_vector_destroy(w); TEST_1(v = su_vector_create(home, test_vector_free)); data1 = su_home_clone(home, sizeof(test_data_t)); data1->data = 1; data2 = su_home_clone(home, sizeof(test_data_t)); data2->data = 2; data3 = su_home_clone(home, sizeof(test_data_t)); data3->data = 3; data4 = su_home_clone(home, sizeof(test_data_t)); data4->data = 4; TEST(su_vector_append(v, data1), 0); TEST(su_vector_append(v, data2), 0); TEST(su_vector_append(v, data3), 0); TEST(su_vector_append(v, data4), 0); TEST(su_vector_len(v), 4); TEST(su_vector_item(v, 0), data1); TEST(su_vector_item(v, 1), data2); TEST(su_vector_item(v, 2), data3); TEST(su_vector_item(v, 3), data4); TEST(data1->data, 1); TEST(data2->data, 2); TEST(data3->data, 3); TEST(data4->data, 4); TEST(su_vector_remove(v, 2), 0); TEST(su_vector_len(v), 3); TEST(su_vector_item(v, 0), data1); TEST(su_vector_item(v, 1), data2); TEST(su_vector_item(v, 2), data4); TEST(data1->data, 1); TEST(data2->data, 2); TEST(data4->data, 4); su_vector_destroy(v); su_home_check(home); su_home_deinit(home); END();}#define ALIGNMENT (8)#define ALIGN(n) (((n) + (ALIGNMENT - 1)) & ~(ALIGNMENT - 1))static int test_auto(void){ BEGIN(); int i; su_home_t tmphome[SU_HOME_AUTO_SIZE(8000)]; char *b = NULL; su_home_stat_t hs[1]; TEST_1(!su_home_auto(tmphome, sizeof tmphome[0])); TEST_1(su_home_auto(tmphome, sizeof tmphome)); for (i = 0; i < 8192; i++) TEST_1(su_alloc(tmphome, 12)); TEST_VOID(su_home_deinit(tmphome)); TEST_1(su_home_auto(tmphome, sizeof tmphome)); su_home_init_stats(tmphome); for (i = 1; i < 8192; i++) { TEST_1(b = su_realloc(tmphome, b, i)); b[i - 1] = (char)0xaa; if ((i % 32) == 0) TEST_1(b = su_realloc(tmphome, b, 1)); } su_home_get_stats(tmphome, 0, hs, sizeof *hs); TEST(hs->hs_allocs.hsa_preload + hs->hs_allocs.hsa_number, 8191 + 8191 / 32); TEST(hs->hs_frees.hsf_preload + hs->hs_frees.hsf_number, 8191 + 8191 / 32 - 1); /* This test depends on macro SU_HOME_AUTO_SIZE() calculating offsetof(su_block_t, sub_nodes[7]) correctly with ((3 * sizeof (void *) + 4 * sizeof(unsigned) + 7 * (sizeof (long) + sizeof(void *)) + 7) */ TEST_1(hs->hs_frees.hsf_preload == hs->hs_allocs.hsa_preload); su_free(tmphome, b); for (i = 1; i < 8192; i++) TEST_1(b = su_alloc(tmphome, 1)); TEST_VOID(su_home_deinit(tmphome)); END();}void usage(void){ fprintf(stderr, "usage: %s [-v]\n", name);}int main(int argc, char *argv[]){ int retval = 0; int i; for (i = 1; argv[i]; i++) { if (strcmp(argv[i], "-v") == 0) tstflags |= tst_verbatim; else usage(); } retval |= test_alloc(); retval |= test_strdupcat(); retval |= test_sprintf("%s.%s", "foo", "bar"); retval |= test_strlst(); retval |= test_vectors(); retval |= test_auto(); return retval;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -