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_no_mark_thus_dont_have(
    CuTest * tc
)
{
    void *prog;

    prog = chunky_new(100);

    CuAssertTrue(tc, !chunky_have(prog, 0, 10));
    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);
}
void Test_chunkybar_mark_thus_do_have_inside(
    CuTest * tc
)
{
    void *prog;

    prog = chunky_new(100);

    chunky_mark_complete(prog, 0, 100);
    CuAssertTrue(tc, chunky_have(prog, 0, 10));
    chunky_free(prog);
}
void Test_chunkybar_unmark2(
    CuTest * tc
)
{
    void *prog;

    prog = chunky_new(100);

    chunky_mark_complete(prog, 0, 10);
    chunky_mark_complete(prog, 10, 10);
    chunky_mark_complete(prog, 20, 10);
    chunky_mark_complete(prog, 30, 10);
    chunky_mark_incomplete(prog, 0, 100);

    CuAssertTrue(tc, !chunky_is_complete(prog));
    CuAssertTrue(tc, !chunky_have(prog,0,10));
    CuAssertTrue(tc, !chunky_have(prog,10,10));
    CuAssertTrue(tc, !chunky_have(prog,20,10));
    CuAssertTrue(tc, !chunky_have(prog,30,10));
    CuAssertTrue(tc, 0 == chunky_get_nbytes_completed(prog));
    CuAssertTrue(tc, 0 == chunky_get_num_chunks(prog));

    chunky_free(prog);
}
Example #8
0
int bt_piecedb_add_at_idx(bt_piecedb_t * db, unsigned int npieces, int idx)
{
    if (chunky_have(priv(db)->space,idx, npieces))
        return -1;

    chunky_mark_complete(priv(db)->space, idx, npieces);

    int i;
    for (i=0; i<npieces; i++)
    {
        bt_piece_t *p = bt_piece_new(NULL, 0);
        bt_piece_set_disk_blockrw(p, priv(db)->blockrw, priv(db)->blockrw_data);
        bt_piece_set_idx(p, idx + i);
        hashmap_put(priv(db)->pmap,
                    (void*)((unsigned long)bt_piece_get_idx(p)+1), p);
    }

    return idx;
}