openMSX
Base64_test.cc
Go to the documentation of this file.
1#include "catch.hpp"
2#include "Base64.hh"
3#include "ranges.hh"
4
5static void test_decode(const std::string& encoded, const std::string& decoded)
6{
7 auto [buf, bufSize] = Base64::decode(encoded);
8 REQUIRE(bufSize == decoded.size());
9 CHECK(ranges::equal(std::span{buf.data(), bufSize}, decoded));
10}
11
12static void test(const std::string& decoded, const std::string& encoded)
13{
14 CHECK(Base64::encode(std::span{reinterpret_cast<const uint8_t*>(decoded.data()),
15 decoded.size()})
16 == encoded);
17 test_decode(encoded, decoded);
18}
19
20TEST_CASE("Base64")
21{
22 // Test vectors verified with 'base64' tool from coreutils.
23 test("", "");
24 test("a", "YQ==");
25 test("a\n", "YQo=");
26 test("ab\n", "YWIK");
27 test("abc\n", "YWJjCg==");
28 test("0123456789\n", "MDEyMzQ1Njc4OQo=");
29 test("abcdefghijklmnopqrstuvwxyz\n", "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoK");
30 test("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\n",
31 "MDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1\n"
32 "dnd4eXoK");
33 test("111111111111111111111111111111111111111111111111111111111111111111111111111111"
34 "111111111111111111111111111111111111111111111111111111111111111111111111111111"
35 "111111111111111111111111111111111111111111111111111111111111111111111111111111"
36 "111111111111111111111111111111111111111111111\n",
37 "MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx\n"
38 "MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx\n"
39 "MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx\n"
40 "MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx\n"
41 "MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCg==");
42
43 // Decode-only:
44 // - extra newlines don't matter
45 test_decode("M\nDEyM\nzQ1Njc\n4OQo=", "0123456789\n");
46 // - no newlines at all is fine as well
47 test_decode("MDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoK",
48 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\n");
49}
TEST_CASE("Base64")
Definition: Base64_test.cc:20
CHECK(m3==m3)
bool equal(InputRange1 &&range1, InputRange2 &&range2, Pred pred={}, Proj1 proj1={}, Proj2 proj2={})
Definition: ranges.hh:368