in src/agent/UnicodeEncodingTest.cc [94:143]
static void correctnessByUtf8Encoding()
{
for (uint64_t encoding = 0; encoding <= 0xFFFFFFFF; ++encoding) {
char mb[4];
mb[0] = encoding;
mb[1] = encoding >> 8;
mb[2] = encoding >> 16;
mb[3] = encoding >> 24;
const int mblen = utf8CharLength(mb[0]);
if (mblen == 0) {
continue;
}
// Test this module.
const uint32_t code1 = decodeUtf8(mb);
wchar_t ws1[2] = {};
const int wslen1 = encodeUtf16(ws1, code1);
// Test using Windows. We can't decode a codepoint directly; we have
// to do UTF8->UTF16, then decode the surrogate pair.
wchar_t ws2[2] = {};
const int wslen2 = MultiByteToWideChar(
CP_UTF8, MB_ERR_INVALID_CHARS, mb, mblen, ws2, 2);
const uint32_t code2 =
(wslen2 == 1 ? ws2[0] :
wslen2 == 2 ? decodeSurrogatePair(ws2[0], ws2[1]) :
static_cast<uint32_t>(-1));
// Verify that the two implementations match.
char prefix[128];
if (code1 != code2) {
printf("%s: code1=0x%04x code2=0x%04x\n",
encodingStr(prefix, mb),
code1, code2);
continue;
}
if (wslen1 != wslen2) {
printf("%s: wslen1=%d wslen2=%d\n",
encodingStr(prefix, mb),
wslen1, wslen2);
continue;
}
if (memcmp(ws1, ws2, wslen1 * sizeof(wchar_t)) != 0) {
printf("%s: ws1 != ws2\n", encodingStr(prefix, mb));
continue;
}
}
}