void Test_chunkybar_unmark(
    CuTest * tc
)
{
    void *prog;

    prog = chunky_new(100);

    chunky_mark_complete(prog, 0, 100);
    CuAssertTrue(tc, chunky_is_complete(prog));

    chunky_mark_incomplete(prog, 0, 100);
    CuAssertTrue(tc, !chunky_is_complete(prog));
    CuAssertTrue(tc, !chunky_have(prog,0,100));
    CuAssertTrue(tc, 0 == chunky_get_num_chunks(prog));
    chunky_free(prog);
}
void Test_chunkybar_unmark_swallow_right(
    CuTest * tc
)
{
    void *prog;

    prog = chunky_new(100);

    chunky_mark_complete(prog, 20, 30); /*  20 to 50 */
    chunky_mark_incomplete(prog, 30, 30); /*  30 to 60  */
    CuAssertTrue(tc, !chunky_is_complete(prog));
    CuAssertTrue(tc, !chunky_have(prog,30,30));
    CuAssertTrue(tc, chunky_have(prog,20,10));
    CuAssertTrue(tc, 10 == chunky_get_nbytes_completed(prog));
    CuAssertTrue(tc, 1 == chunky_get_num_chunks(prog));

    chunky_free(prog);
}
void Test_chunkybar_dontUnmark3(
    CuTest * tc
)
{
    void *prog;

    prog = chunky_new(262144);

    chunky_mark_complete(prog, 0, 49152);
    chunky_mark_complete(prog, 65536,196608);
    chunky_mark_incomplete(prog, 114688, 16384);

    CuAssertTrue(tc, chunky_have(prog,0,49152));
    CuAssertTrue(tc, chunky_have(prog,65536,49152));
    CuAssertTrue(tc, !chunky_have(prog,114688, 16384));
    CuAssertTrue(tc, chunky_have(prog,131072,131072));
    CuAssertTrue(tc, 3 == chunky_get_num_chunks(prog));

    chunky_free(prog);
}
void Test_chunkybar_dontUnmarkHalvesAtEdge(
    CuTest * tc
)
{
    void *prog;

    prog = chunky_new(100);

    chunky_mark_complete(prog, 0, 100);
    CuAssertTrue(tc, chunky_is_complete(prog));
    chunky_mark_incomplete(prog, 50, 50);

    CuAssertTrue(tc, !chunky_is_complete(prog));
    CuAssertTrue(tc, chunky_have(prog,0,50));
    CuAssertTrue(tc, !chunky_have(prog,50,50));
    CuAssertTrue(tc, 50 == chunky_get_nbytes_completed(prog));
    CuAssertTrue(tc, 1 == chunky_get_num_chunks(prog));

    chunky_free(prog);
}
void Test_chunkybar_unmarkHalves(
    CuTest * tc
)
{
    void *prog;

    prog = chunky_new(100);

    chunky_mark_complete(prog, 0, 100);
    CuAssertTrue(tc, chunky_is_complete(prog));
    chunky_mark_incomplete(prog, 25, 50);

    CuAssertTrue(tc, !chunky_is_complete(prog));
    CuAssertTrue(tc, chunky_have(prog,0,25));
    CuAssertTrue(tc, !chunky_have(prog,25,50));
    CuAssertTrue(tc, chunky_have(prog,75,25));
    CuAssertTrue(tc, 50 == chunky_get_nbytes_completed(prog));
    CuAssertTrue(tc, 2 == chunky_get_num_chunks(prog));

    chunky_free(prog);
}
예제 #6
0
void bt_piecedb_remove(bt_piecedb_t * db, int idx)
{
    // TODO memleak here?
    hashmap_remove(priv(db)->pmap, (void*)((unsigned long)idx+1));
    chunky_mark_incomplete(priv(db)->space, idx, 1);
}