extern void segment_map_test(umMem_T memory) { for (int i = 1; i <= 7; i++) { segment_map(memory, i, i * 2); } for (int i = 1; i <= 7; i++) { int reg_val = register_get(memory, i); fprintf(stderr, "regID: %d, segID: %d, segLength: %d\n", i, reg_val, segment_length(memory, reg_val)); } for (int i = 1; i <= 7; i+=2) { fprintf(stderr, "i: %d\n", i); segment_unmap(memory, i); } for (int i = 1; i <= 7; i+=2) { segment_map(memory, i, i + 10); } for (int i = 1; i <= 7; i++) { int reg_val = register_get(memory, i); fprintf(stderr, "regID: %d, segID: %d, segLength: %d\n", i, reg_val, segment_length(memory, reg_val)); } }
extern void segment_unmap_test(umMem_T memory) { for (int i = 1; i < 20; i++) { int seg_length = segment_length(memory, i); if (seg_length != i * 2) { fprintf(stderr, "Length is not right"); } segment_unmap(memory, i); if (segment_isEmpty(memory, i) == false) { fprintf(stderr, "Not correctly unmapped m[%d]\n", i); } } fprintf(stderr, "segment_unmap is fine with valid inputs\n"); }
/* * unmap <seg-name> - unmap specified segment, but remember name/size/... */ static int unmap_seg(char *args) { glctx_t *gcp = &glctx; char *segname, *nextarg; args += strspn(args, whitespace); if (!required_arg(args, "<seg-name>")) return CMD_ERROR; segname = strtok_r(args, whitespace, &nextarg); args = nextarg + strspn(nextarg, whitespace); if (!segment_unmap(segname)) return CMD_ERROR; return CMD_SUCCESS; }
static void* segment_test(void* arg) { segmentRoot_t segroot; rbtreeRoot_t rbroot; trkey_t key_large = 1; setbuf(stdout, NULL); segment_root_init(&segroot, NULL, mapper, unmapper); cdsl_rbtreeRootInit(&rbroot); segment_create_cache(&segroot, key_large); uint32_t cnt; void* segment; size_t sz; struct segment_node* segnode; clock_t clk = clock(); uint32_t seed = (uint32_t) clk; for(cnt = 0; cnt < 50; cnt++) { sz = rand_r(&seed) % (1 << 22); if(!sz) { sz = 1; } while(sz < MALLOC_UNIT_SIZE) sz <<= 1; sz &= ~3; segment = segment_map(&segroot, key_large, sz); if(!segment) { fprintf(stderr, "segment map fail %d\n",cnt); exit(-1); } segnode = (struct segment_node*) segment; cdsl_rbtreeNodeInit(&segnode->rbnode, cnt); segnode->sz = sz; cdsl_rbtreeInsert(&rbroot, &segnode->rbnode, FALSE); } __dev_log("map finished\n"); while((segnode = (struct segment_node*) cdsl_rbtreeDeleteMax(&rbroot))) { segnode = container_of(segnode, struct segment_node, rbnode); segment_unmap(&segroot,key_large, segnode, segnode->sz); } segment_cleanup(&segroot); __dev_log("finished test \n"); return NULL; }