added peer/piece categories to the piece picker. fixes #18

This commit is contained in:
Arvid Norberg
2007-04-27 00:27:37 +00:00
parent 99dc46bd29
commit ee1681e2cb
10 changed files with 203 additions and 48 deletions

View File

@@ -88,21 +88,21 @@ int test_main()
std::vector<piece_block> picked;
picked.clear();
p.pick_pieces(peer1, picked, 1, false, tcp::endpoint());
p.pick_pieces(peer1, picked, 1, false, tcp::endpoint(), piece_picker::fast);
TEST_CHECK(picked.size() == 1);
TEST_CHECK(picked.front().piece_index == 2);
// now pick a piece from peer2. The block is supposed to be
// from piece 3, since it is the rarest piece that peer has.
picked.clear();
p.pick_pieces(peer2, picked, 1, false, tcp::endpoint());
p.pick_pieces(peer2, picked, 1, false, tcp::endpoint(), piece_picker::fast);
TEST_CHECK(picked.size() == 1);
TEST_CHECK(picked.front().piece_index == 3);
// same thing for peer3.
picked.clear();
p.pick_pieces(peer3, picked, 1, false, tcp::endpoint());
p.pick_pieces(peer3, picked, 1, false, tcp::endpoint(), piece_picker::fast);
TEST_CHECK(picked.size() == 1);
TEST_CHECK(picked.front().piece_index == 5);
@@ -112,7 +112,7 @@ int test_main()
p.inc_refcount(1);
picked.clear();
p.pick_pieces(peer3, picked, 1, false, tcp::endpoint());
p.pick_pieces(peer3, picked, 1, false, tcp::endpoint(), piece_picker::fast);
TEST_CHECK(picked.size() == 1);
TEST_CHECK(picked.front().piece_index == 1);
// and the block picked should not be 0 or 2
@@ -136,9 +136,12 @@ int test_main()
// we have block 0 and 2 already, so we can't mark
// them as begin downloaded.
p.mark_as_downloading(piece_block(1, 1), tcp::endpoint(address::from_string("1.1.1.1"), 0));
p.mark_as_downloading(piece_block(1, 3), tcp::endpoint(address::from_string("1.1.1.1"), 0));
p.mark_as_downloading(piece_block(2, 0), tcp::endpoint(address::from_string("1.1.1.1"), 0));
p.mark_as_downloading(piece_block(1, 1), tcp::endpoint(
address::from_string("1.1.1.1"), 0), piece_picker::fast);
p.mark_as_downloading(piece_block(1, 3), tcp::endpoint(
address::from_string("1.1.1.1"), 0), piece_picker::fast);
p.mark_as_downloading(piece_block(2, 0), tcp::endpoint(
address::from_string("1.1.1.1"), 0), piece_picker::fast);
std::vector<piece_picker::downloading_piece> const& downloads = p.get_download_queue();
TEST_CHECK(downloads.size() == 2);
@@ -166,7 +169,7 @@ int test_main()
TEST_CHECK(!p.is_downloading(piece_block(2, 1)));
picked.clear();
p.pick_pieces(peer1, picked, 1, false, tcp::endpoint());
p.pick_pieces(peer1, picked, 1, false, tcp::endpoint(), piece_picker::fast);
TEST_CHECK(picked.size() == 2);
piece_block expected3[] = { piece_block(2, 0), piece_block(2, 1) };
@@ -179,7 +182,7 @@ int test_main()
// partially selected)
picked.clear();
p.pick_pieces(peer1, picked, 1, true, tcp::endpoint());
p.pick_pieces(peer1, picked, 1, true, tcp::endpoint(), piece_picker::fast);
// it will pick 4 blocks, since we said we
// wanted whole pieces.
@@ -197,7 +200,7 @@ int test_main()
// to make sure it can still fall back on partial pieces
picked.clear();
p.pick_pieces(peer1, picked, 100, true, tcp::endpoint());
p.pick_pieces(peer1, picked, 100, true, tcp::endpoint(), piece_picker::fast);
TEST_CHECK(picked.size() == 12);
@@ -218,7 +221,8 @@ int test_main()
// to make sure it can still fall back on partial pieces
picked.clear();
p.pick_pieces(peer1, picked, 100, true, tcp::endpoint(address::from_string("1.1.1.1"), 0));
p.pick_pieces(peer1, picked, 100, true
, tcp::endpoint(address::from_string("1.1.1.1"), 0), piece_picker::fast);
TEST_CHECK(picked.size() == 11);