: name(name_),
          serialized_data(serialized_data_),
          data_type(data_type_)
    {}
    CodecTestSequence & append(const CodecTestSequence & other)
    {
        assert(data_type->equals(*other.data_type));
        serialized_data.insert(serialized_data.end(), other.serialized_data.begin(), other.serialized_data.end());
        if (!name.empty())
            name += " + ";
        name += other.name;
        return *this;
    }
};
CodecTestSequence operator+(CodecTestSequence && left, const CodecTestSequence & right)
{
    return left.append(right);
}
std::vector<CodecTestSequence> operator+(const std::vector<CodecTestSequence> & left, const std::vector<CodecTestSequence> & right)
{
    std::vector<CodecTestSequence> result(left);
    std::move(std::begin(right), std::end(right), std::back_inserter(result));
    return result;
}
template <typename T>
CodecTestSequence operator*(CodecTestSequence && left, T times)