static void ssslaba_test0(void) { ssa a; ss_aopen(&a, &ss_slaba, &st_r.vfs, 1024, 16); void *chunks[64]; int chunks_size = 64; int iteration = 0; while (iteration < 8) { int i = 0; while ( i < chunks_size) { chunks[i] = ss_malloc(&a, 16); t( chunks[i] != NULL ); i++; } t(i == 64); t( ss_malloc(&a, 16) == NULL ); i = 0; while ( i < chunks_size) { ss_free(&a, chunks[i]); t( chunks[i] != NULL ); i++; } iteration++; } ss_aclose(&a); }
static void ssa_malloc(void) { ssa a; ss_aopen(&a, &ss_stda); void *buf = ss_malloc(&a, 123); t( buf != NULL ); ss_free(&a, buf); ss_aclose(&a); }
static void ssaslab_reuse(stc *cx) { sspager p; ss_pagerinit(&p, 3, 1024); ssa slab; t( ss_aopen(&slab, &ss_slaba, &p, 32) == 0 ); void *alloc0[1000]; void *alloc1[1000]; memset(alloc0, 0, sizeof(alloc0)); memset(alloc1, 0, sizeof(alloc1)); int i = 0; while (i < 1000) { alloc0[i] = ss_malloc(&slab, 0); t( alloc0[i] != NULL ); i++; } i--; int pools = p.pools; while (i >= 0) { ss_free(&slab, alloc0[i]); i--; } t( p.pools == pools ); i++; while (i < 1000) { alloc1[i] = ss_malloc(&slab, 0); t( alloc0[i] == alloc1[i] ); i++; } t( p.pools == pools ); ss_aclose(&slab); ss_pagerfree(&p); }