void assert_empty(const HeapBitmap *hb) { assert(hb->bits != NULL); assert(hb->bitsLen >= HB_OFFSET_TO_INDEX(HEAP_SIZE)); assert(hb->base == (uintptr_t)HEAP_BASE); assert(hb->max < hb->base); assert(is_zeroed(hb)); assert(!dvmHeapBitmapMayContainObject(hb, HEAP_BASE)); assert(!dvmHeapBitmapMayContainObject(hb, HEAP_BASE + HB_OBJECT_ALIGNMENT)); assert(!dvmHeapBitmapMayContainObject(hb, HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT)); assert(!dvmHeapBitmapMayContainObject(hb, HEAP_BASE + HEAP_SIZE)); assert(!dvmHeapBitmapIsObjectBitSet(hb, HEAP_BASE)); assert(!dvmHeapBitmapIsObjectBitSet(hb, HEAP_BASE + HB_OBJECT_ALIGNMENT)); assert(!dvmHeapBitmapIsObjectBitSet(hb, HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT)); }
void test_clear() { HeapBitmap hb; bool ok; ok = dvmHeapBitmapInit(&hb, HEAP_BASE, HEAP_SIZE, "test"); assert(ok); assert_empty(&hb); /* Set the highest address. */ dvmHeapBitmapSetObjectBit(&hb, HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT); assert(!is_zeroed(&hb)); /* Clear the bitmap. */ dvmHeapBitmapZero(&hb); assert_empty(&hb); /* Clean up. */ dvmHeapBitmapDelete(&hb); }
int main(int argc, char *argv[]) { START(argc, argv, "blk_non_zero"); if (argc < 5) UT_FATAL("usage: %s bsize file func [file_size] op:lba...", argv[0]); int read_arg = 1; Bsize = strtoul(argv[read_arg++], NULL, 0); const char *path = argv[read_arg++]; PMEMblkpool *handle = NULL; switch (*argv[read_arg++]) { case 'c': { size_t fsize = strtoul(argv[read_arg++], NULL, 0); handle = pmemblk_create(path, Bsize, fsize, S_IRUSR | S_IWUSR); if (handle == NULL) UT_FATAL("!%s: pmemblk_create", path); break; } case 'o': handle = pmemblk_open(path, Bsize); if (handle == NULL) UT_FATAL("!%s: pmemblk_open", path); break; default: UT_FATAL("unrecognized command %s", argv[read_arg - 1]); } UT_OUT("%s block size %zu usable blocks %zu", argv[1], Bsize, pmemblk_nblock(handle)); UT_OUT("is zeroed:\t%d", is_zeroed(path)); /* map each file argument with the given map type */ for (; read_arg < argc; read_arg++) { if (strchr("rwze", argv[read_arg][0]) == NULL || argv[read_arg][1] != ':') UT_FATAL("op must be r: or w: or z: or e:"); off_t lba = strtoul(&argv[read_arg][2], NULL, 0); unsigned char buf[Bsize]; switch (argv[read_arg][0]) { case 'r': if (pmemblk_read(handle, buf, lba) < 0) UT_OUT("!read lba %zu", lba); else UT_OUT("read lba %zu: %s", lba, ident(buf)); break; case 'w': construct(buf); if (pmemblk_write(handle, buf, lba) < 0) UT_OUT("!write lba %zu", lba); else UT_OUT("write lba %zu: %s", lba, ident(buf)); break; case 'z': if (pmemblk_set_zero(handle, lba) < 0) UT_OUT("!set_zero lba %zu", lba); else UT_OUT("set_zero lba %zu", lba); break; case 'e': if (pmemblk_set_error(handle, lba) < 0) UT_OUT("!set_error lba %zu", lba); else UT_OUT("set_error lba %zu", lba); break; } } pmemblk_close(handle); int result = pmemblk_check(path, Bsize); if (result < 0) UT_OUT("!%s: pmemblk_check", path); else if (result == 0) UT_OUT("%s: pmemblk_check: not consistent", path); DONE(NULL); }
void test_bits() { HeapBitmap hb; bool ok; ok = dvmHeapBitmapInit(&hb, HEAP_BASE, HEAP_SIZE, "test"); assert(ok); assert_empty(&hb); /* Set the lowest address. */ dvmHeapBitmapSetObjectBit(&hb, HEAP_BASE); assert(dvmHeapBitmapMayContainObject(&hb, HEAP_BASE)); assert(!dvmHeapBitmapMayContainObject(&hb, HEAP_BASE + HB_OBJECT_ALIGNMENT)); assert(!dvmHeapBitmapMayContainObject(&hb, HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT)); assert(!dvmHeapBitmapMayContainObject(&hb, HEAP_BASE + HEAP_SIZE)); assert(dvmHeapBitmapIsObjectBitSet(&hb, HEAP_BASE)); assert(!dvmHeapBitmapIsObjectBitSet(&hb, HEAP_BASE + HB_OBJECT_ALIGNMENT)); assert(!dvmHeapBitmapIsObjectBitSet(&hb, HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT)); /* Set the highest address. */ dvmHeapBitmapSetObjectBit(&hb, HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT); assert(dvmHeapBitmapMayContainObject(&hb, HEAP_BASE)); assert(dvmHeapBitmapMayContainObject(&hb, HEAP_BASE + HB_OBJECT_ALIGNMENT)); assert(dvmHeapBitmapMayContainObject(&hb, HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT)); assert(!dvmHeapBitmapMayContainObject(&hb, HEAP_BASE + HEAP_SIZE)); assert(dvmHeapBitmapIsObjectBitSet(&hb, HEAP_BASE)); assert(!dvmHeapBitmapIsObjectBitSet(&hb, HEAP_BASE + HB_OBJECT_ALIGNMENT)); assert(dvmHeapBitmapIsObjectBitSet(&hb, HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT)); /* Clear the lowest address. */ dvmHeapBitmapClearObjectBit(&hb, HEAP_BASE); assert(!dvmHeapBitmapIsObjectBitSet(&hb, HEAP_BASE)); assert(!dvmHeapBitmapIsObjectBitSet(&hb, HEAP_BASE + HB_OBJECT_ALIGNMENT)); assert(dvmHeapBitmapIsObjectBitSet(&hb, HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT)); assert(!is_zeroed(&hb)); /* Clear the highest address. */ dvmHeapBitmapClearObjectBit(&hb, HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT); assert(!dvmHeapBitmapIsObjectBitSet(&hb, HEAP_BASE)); assert(!dvmHeapBitmapIsObjectBitSet(&hb, HEAP_BASE + HB_OBJECT_ALIGNMENT)); assert(!dvmHeapBitmapIsObjectBitSet(&hb, HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT)); assert(is_zeroed(&hb)); /* Clean up. */ dvmHeapBitmapDelete(&hb); }