113 lines
2.5 KiB
C++
113 lines
2.5 KiB
C++
#include "../../tap.hpp"
|
|
|
|
#include "../../encode/base.hpp"
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
static constexpr char input[] = "foobar";
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// test vectors from rfc4648
|
|
template <int Size>
|
|
struct output { static const char *value[std::size (input)]; };
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
template <>
|
|
const char* output<64>::value[] = {
|
|
"",
|
|
"Zg==",
|
|
"Zm8=",
|
|
"Zm9v",
|
|
"Zm9vYg==",
|
|
"Zm9vYmE=",
|
|
"Zm9vYmFy",
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
template <>
|
|
const char* output<32>::value[] {
|
|
"",
|
|
"MY======",
|
|
"MZXQ====",
|
|
"MZXW6===",
|
|
"MZXW6YQ=",
|
|
"MZXW6YTB",
|
|
"MZXW6YTBOI======"
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
#if 0
|
|
template <>
|
|
const char* output<32h>::value[] {
|
|
"", "CO======", "CPNG====", "CPNMU===", "CPNMUOG=", "CPNMUOJ1", "CPNMUOJ1E8======",
|
|
}
|
|
#endif
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
template <>
|
|
const char *output<16>::value[] = {
|
|
"",
|
|
"66",
|
|
"666F",
|
|
"666F6F",
|
|
"666F6F62",
|
|
"666F6F6261",
|
|
"666F6F626172"
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
template <int Size>
|
|
const auto output_v = output<Size>::value;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
template <int Size>
|
|
void
|
|
test_size (cruft::TAP::logger &tap)
|
|
{
|
|
for (unsigned i = 0; i < std::size (input); ++i) {
|
|
const auto fragment = cruft::make_view (input, input + i);
|
|
|
|
std::string encoded;
|
|
|
|
cruft::encode::base<Size>::encode (
|
|
std::back_inserter (encoded),
|
|
fragment
|
|
);
|
|
|
|
tap.expect_eq (
|
|
encoded,
|
|
output_v<Size>[i],
|
|
"{} character base{} encode; '{}' is '{}'", i, Size, encoded, output_v<Size>[i]
|
|
);
|
|
|
|
|
|
std::string decoded;
|
|
cruft::encode::base<Size>::decode (
|
|
std::back_inserter (decoded),
|
|
cruft::make_view (encoded)
|
|
);
|
|
|
|
tap.expect_eq (decoded, fragment, "{} character base{} decode, '{}'", i, Size, decoded);
|
|
}
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
int
|
|
main ()
|
|
{
|
|
cruft::TAP::logger tap;
|
|
|
|
test_size<16> (tap);
|
|
test_size<32> (tap);
|
|
test_size<64> (tap);
|
|
|
|
return tap.status ();
|
|
} |