void tr_cpSetHaveAll( tr_completion * cp ) { tr_piece_index_t i; tr_torrent * tor = cp->tor; tr_cpReset( cp ); cp->sizeNow = tor->info.totalSize; tr_bitfieldAddRange( &cp->blockBitfield, 0, tor->blockCount ); tr_bitfieldAddRange( &cp->pieceBitfield, 0, tor->info.pieceCount ); for( i=0; i<tor->info.pieceCount; ++i ) cp->completeBlocks[i] = tr_torPieceCountBlocks( tor, i ); cp->sizeWhenDoneIsDirty = 1; cp->haveValidIsDirty = 1; }
static int test_bitfields (void) { unsigned int i; unsigned int bitcount = 500; tr_bitfield field; tr_bitfieldConstruct (&field, bitcount); /* test tr_bitfieldAdd */ for (i=0; i<bitcount; i++) if (! (i % 7)) tr_bitfieldAdd (&field, i); for (i=0; i<bitcount; i++) check (tr_bitfieldHas (&field, i) == (! (i % 7))); /* test tr_bitfieldAddRange */ tr_bitfieldAddRange (&field, 0, bitcount); for (i=0; i<bitcount; i++) check (tr_bitfieldHas (&field, i)); /* test tr_bitfieldRemRange in the middle of a boundary */ tr_bitfieldRemRange (&field, 4, 21); for (i=0; i<64; i++) check (tr_bitfieldHas (&field, i) == ((i < 4) || (i >= 21))); /* test tr_bitfieldRemRange on the boundaries */ tr_bitfieldAddRange (&field, 0, 64); tr_bitfieldRemRange (&field, 8, 24); for (i=0; i<64; i++) check (tr_bitfieldHas (&field, i) == ((i < 8) || (i >= 24))); /* test tr_bitfieldRemRange when begin & end is on the same word */ tr_bitfieldAddRange (&field, 0, 64); tr_bitfieldRemRange (&field, 4, 5); for (i=0; i<64; i++) check (tr_bitfieldHas (&field, i) == ((i < 4) || (i >= 5))); /* test tr_bitfieldAddRange */ tr_bitfieldRemRange (&field, 0, 64); tr_bitfieldAddRange (&field, 4, 21); for (i=0; i<64; i++) check (tr_bitfieldHas (&field, i) == ((4 <= i) && (i < 21))); /* test tr_bitfieldAddRange on the boundaries */ tr_bitfieldRemRange (&field, 0, 64); tr_bitfieldAddRange (&field, 8, 24); for (i=0; i<64; i++) check (tr_bitfieldHas (&field, i) == ((8 <= i) && (i < 24))); /* test tr_bitfieldAddRange when begin & end is on the same word */ tr_bitfieldRemRange (&field, 0, 64); tr_bitfieldAddRange (&field, 4, 5); for (i=0; i<64; i++) check (tr_bitfieldHas (&field, i) == ((4 <= i) && (i < 5))); tr_bitfieldDestruct (&field); return 0; }