示例#1
0
int main()
{
    TEST_TAG(Package);
    string coded;
    auto formats = {Format::Block, Format::Stream};
    for (auto format = formats.begin(); format != formats.end(); ++format)
    {
        auto checksums = {true, false};
        for (auto cs = checksums.begin(); cs != checksums.end(); ++cs)
        {
            string cs_s = (*cs ? "checksum" : "no checksum");
            Package pkg;
            pkg.format(*format);
            pkg.checksum(*cs);
            pkg.encode(coded);
            L("coded(" << to_s(*format) << ", " << cs_s << "): " << toHex(coded));
            string alternating;
            for (int i = 0; i < 50; ++i)
                alternating.append("\xd8" "a");
            vector<string> plains = {"", "abc", "a" "\xd8" "b" "\xd9" "c", "\xd8" "\xd9" "\xd8" "\xd9" "\xd8" "\xd9" "\xd8", string(100, '0'), string(100, 0xd9), alternating};
            for (auto plain = plains.begin(); plain != plains.end(); ++plain)
            {
                pkg.content(*plain);
                L("plain: " << toHex(*plain));
                pkg.encode(coded);
                L("coded(" << to_s(*format) << ", " << cs_s << "): length: " << coded.size() << ", hex: " << toHex(coded));
                {
                    Package pkg2;
                    TEST_OK(pkg2.decode(coded));
                    string plain2;
                    TEST_OK(pkg2.getContent(plain2));
                    TEST_EQ(*plain, plain2);
                }
            }
        }
    }
    return 0;
}