END_TEST START_TEST(xpost_memory_grow) { char memorypat[] = "preserve this data across grow()"; Xpost_Memory_File mem = {0}; unsigned int addr; int ret; ret = xpost_memory_file_init(&mem, NULL, -1, NULL, NULL, NULL); ck_assert_int_eq (ret, 1); ck_assert(mem.base != NULL); ret = xpost_memory_file_alloc(&mem, sizeof memorypat, &addr); ck_assert_int_eq (ret, 1); strcpy((char *)mem.base + addr, memorypat); ret = xpost_memory_file_grow(&mem, 4096); ck_assert_int_eq (ret, 1); ck_assert(mem.base != NULL); ck_assert_str_eq ((char *)mem.base + addr, memorypat); ret = xpost_memory_file_exit(&mem); ck_assert_int_eq (ret, 1); }
/* add a string to the ternary search tree */ static int tstinsert(Xpost_Memory_File *mem, unsigned int tadr, const char *s, unsigned int *retval) { tst *p; unsigned int t; //temporary unsigned int nstk; int ret; if (!tadr) { if (!xpost_memory_file_alloc(mem, sizeof(tst), &tadr)) { XPOST_LOG_ERR("cannot allocate tree node"); return VMerror; } p = (void *)(mem->base + tadr); p->val = *s; p->lo = p->eq = p->hi = 0; } p = (void *)(mem->base + tadr); if ((unsigned int)*s < p->val) { ret = tstinsert(mem, p->lo, s, &t); if (ret) return ret; p = (void *)(mem->base + tadr); //recalc pointer p->lo = t; } else if ((unsigned int)*s == p->val) { if (*s) { ret = tstinsert(mem, p->eq, ++s, &t); if (ret) return ret; p = (void *)(mem->base + tadr); //recalc pointer p->eq = t; }else { xpost_memory_table_get_addr(mem, XPOST_MEMORY_TABLE_SPECIAL_NAME_STACK, &nstk); p->eq = xpost_stack_count(mem, nstk); /* payload when val == '\0' */ } } else { ret = tstinsert(mem, p->hi, s, &t); if (ret) return ret; p = (void *)(mem->base + tadr); //recalc pointer p->hi = t; } //return tadr; *retval = tadr; return 0; }
END_TEST START_TEST(xpost_memory_not_init) { Xpost_Memory_File mem = {0}; unsigned int addr; int ret; mem.base = NULL; XPOST_LOG_ERR("you should see an error just below"); ret = xpost_memory_file_alloc(&mem, 64, &addr); ck_assert_int_eq (ret, 0); /* ck_assert_int_eq (xpost_memory_file_grow(&mem, 4096), 0); */ /* ck_assert_int_eq (xpost_memory_file_exit(&mem), 0); */ }
END_TEST START_TEST(xpost_memory_init_) { Xpost_Memory_File mem; unsigned int addr; int ret; memset(&mem, 0, sizeof(Xpost_Memory_File)); ret = xpost_memory_file_init(&mem, NULL, -1, NULL, NULL, NULL); ck_assert_int_eq (ret, 1); ck_assert(mem.base != NULL); ret = xpost_memory_file_alloc(&mem, 64, &addr); ck_assert_int_eq (ret, 1); ck_assert(mem.base != NULL); ret = xpost_memory_file_exit(&mem); ck_assert_int_eq (ret, 1); }