static void correctnessByUtf8Encoding()

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;
        }
    }
}