예제 #1
0
파일: bl.c 프로젝트: blackball/an-test6
int sl_check_consistency(sl* list) {
	return bl_check_consistency(list);
}
예제 #2
0
void test_big_list(CuTest* tc) {
    // Test size_t sizes and indices of bl's.
    // Test ptrdiff_t as -1 or index
    CuAssertTrue(tc, -1 == BL_NOT_FOUND);
    CuAssertTrue(tc, BL_NOT_FOUND < 0);
    CuAssertTrue(tc, sizeof(size_t) == sizeof(ptrdiff_t));

    // Create a fake list so we don't have to allocate 16 GB of list to test.
    int blocksize = 1048576;
    il* big = il_new(blocksize);
    // that's 1<<20 ~ 1e6 elements per block

    // now need 1<<12 ~ 4096 blocks to overflow a 32-bit int
    int i;
    int N = 4096;
    bl_node* nodes = calloc(N, sizeof(bl_node));
    for (i=1; i<N; i++) {
        nodes[i-1].next = nodes+i;
        nodes[i-1].N = blocksize;
    }
    nodes[N-1].N = blocksize;
    big->head = nodes;
    big->tail = nodes + (N-1);
    big->N = (size_t)blocksize * (size_t)N;

    bl_print_structure(big);

    printf("N %zu\n", il_size(big));
    printf("check: %s\n", (bl_check_consistency(big) ? "bad" : "ok"));

    int* p = il_append(big, 42);
    printf("appended: %i\n", *p);
    CuAssertIntEquals(tc, 42, *p);
    CuAssertTrue(tc, 4294967297L == il_size(big));

    size_t index = 4294967296L;
    int v = il_get(big, index);
    CuAssertIntEquals(tc, 42, v);

    big->last_access = NULL;
    big->last_access_n = 0;

    v = il_get(big, index);
    CuAssertIntEquals(tc, 42, v);

    for (i=0; i<blocksize*2; i++) {
        il_push(big, i);
    }

    il* split = il_new(1024);

    bl_split(big, split, (size_t)blocksize * (size_t)N);

    printf("split: %zu, %zu\n", il_size(big), il_size(split));
    CuAssertIntEquals(tc, 42, il_get(split, 0));
    CuAssertIntEquals(tc, 3, il_get(split, 4));

    il_append_list(big, split);

    CuAssertTrue(tc, 4297064449L == il_size(big));

    int* arr = calloc(1024, sizeof(int));

    bl_copy(big, (size_t)blocksize * (size_t)N, 1024, arr);

    CuAssertIntEquals(tc, 42, arr[0]);
    CuAssertIntEquals(tc,  3, arr[4]);
}
예제 #3
0
int NLF(check_consistency)(nl* list) {
	return bl_check_consistency(list);
}