mirror of
https://github.com/transmission/transmission.git
synced 2025-12-20 02:18:42 +00:00
fix: check if piece is wanted upon receiving block (#7866)
* fix: check if piece is wanted upon receiving block * test: block_last_loc
This commit is contained in:
@@ -136,6 +136,41 @@ TEST_F(BlockInfoTest, blockLoc)
|
||||
EXPECT_EQ(0U, loc.piece_offset);
|
||||
}
|
||||
|
||||
TEST_F(BlockInfoTest, blockLastLoc)
|
||||
{
|
||||
static auto constexpr ExpectedBlockSize = uint64_t{ 1024U } * 16U;
|
||||
static auto constexpr ExpectedBlocksPerPiece = uint64_t{ 4U };
|
||||
static auto constexpr PieceSize = ExpectedBlockSize * ExpectedBlocksPerPiece;
|
||||
static auto constexpr PieceCount = uint64_t{ 5U };
|
||||
static auto constexpr TotalSize = (PieceSize * (PieceCount - 1U)) + 1U;
|
||||
|
||||
auto const info = tr_block_info{ TotalSize, PieceSize };
|
||||
|
||||
// begin
|
||||
auto loc = info.block_last_loc(0);
|
||||
EXPECT_EQ(ExpectedBlockSize - 1U, loc.byte);
|
||||
EXPECT_EQ(0U, loc.block);
|
||||
EXPECT_EQ(ExpectedBlockSize - 1U, loc.block_offset);
|
||||
EXPECT_EQ(0U, loc.piece);
|
||||
EXPECT_EQ(ExpectedBlockSize - 1U, loc.piece_offset);
|
||||
|
||||
// third block is halfway through the first piece
|
||||
loc = info.block_last_loc(2);
|
||||
EXPECT_EQ((ExpectedBlockSize * 3U) - 1U, loc.byte);
|
||||
EXPECT_EQ(2U, loc.block);
|
||||
EXPECT_EQ(ExpectedBlockSize - 1U, loc.block_offset);
|
||||
EXPECT_EQ(0U, loc.piece);
|
||||
EXPECT_EQ((ExpectedBlockSize * 3U) - 1U, loc.piece_offset);
|
||||
|
||||
// second piece aligns with fifth block
|
||||
loc = info.block_last_loc(4);
|
||||
EXPECT_EQ(PieceSize + ExpectedBlockSize - 1U, loc.byte);
|
||||
EXPECT_EQ(4U, loc.block);
|
||||
EXPECT_EQ(ExpectedBlockSize - 1U, loc.block_offset);
|
||||
EXPECT_EQ(1U, loc.piece);
|
||||
EXPECT_EQ(ExpectedBlockSize - 1U, loc.piece_offset);
|
||||
}
|
||||
|
||||
TEST_F(BlockInfoTest, pieceLoc)
|
||||
{
|
||||
static auto constexpr ExpectedBlockSize = uint64_t{ 1024U } * 16U;
|
||||
|
||||
Reference in New Issue
Block a user