premiere-libtorrent/test/test_bencoding.cpp

75 lines
1.3 KiB
C++

#include "libtorrent/bencode.hpp"
#include <boost/lexical_cast.hpp>
#include "test.hpp"
using namespace libtorrent;
// test vectors from bittorrent protocol description
// http://www.bittorrent.com/protocol.html
std::string encode(entry const& e)
{
std::string ret;
bencode(std::back_inserter(ret), e);
return ret;
}
entry decode(std::string const& str)
{
return bdecode(str.begin(), str.end());
}
int test_main()
{
using namespace libtorrent;
// ** strings **
{
entry e("spam");
TEST_CHECK(encode(e) == "4:spam");
TEST_CHECK(decode(encode(e)) == e);
}
// ** integers **
{
entry e(3);
TEST_CHECK(encode(e) == "i3e");
TEST_CHECK(decode(encode(e)) == e);
}
{
entry e(-3);
TEST_CHECK(encode(e) == "i-3e");
TEST_CHECK(decode(encode(e)) == e);
}
{
entry e(int(0));
TEST_CHECK(encode(e) == "i0e");
TEST_CHECK(decode(encode(e)) == e);
}
// ** lists **
{
entry::list_type l;
l.push_back(entry("spam"));
l.push_back(entry("eggs"));
entry e(l);
TEST_CHECK(encode(e) == "l4:spam4:eggse");
TEST_CHECK(decode(encode(e)) == e);
}
// ** dictionaries **
{
entry e(entry::dictionary_t);
e["cow"] = entry("moo");
e["spam"] = entry("eggs");
TEST_CHECK(encode(e) == "d3:cow3:moo4:spam4:eggse");
TEST_CHECK(decode(encode(e)) == e);
}
return 0;
}