static void correctnessByCode()

in src/agent/UnicodeEncodingTest.cc [32:81]


static void correctnessByCode()
{
    char mbstr1[4];
    char mbstr2[4];
    wchar_t wch[2];
    for (unsigned int code = 0; code < 0x110000; ++code) {

        // Surrogate pair reserved region.
        const bool isReserved = (code >= 0xD800 && code <= 0xDFFF);

        int mblen1 = encodeUtf8(mbstr1, code);
        if (isReserved ? mblen1 != 0 : mblen1 <= 0) {
            printf("Error: 0x%04X: mblen1=%d\n", code, mblen1);
            continue;
        }

        int wlen = encodeUtf16(wch, code);
        if (isReserved ? wlen != 0 : wlen <= 0) {
            printf("Error: 0x%04X: wlen=%d\n", code, wlen);
            continue;
        }

        if (isReserved) {
            continue;
        }

        if (mblen1 != utf8CharLength(mbstr1[0])) {
            printf("Error: 0x%04X: mblen1=%d, utf8CharLength(mbstr1[0])=%d\n",
                code, mblen1, utf8CharLength(mbstr1[0]));
            continue;
        }

        if (code != decodeUtf8(mbstr1)) {
            printf("Error: 0x%04X: decodeUtf8(mbstr1)=%u\n",
                code, decodeUtf8(mbstr1));
            continue;
        }

        int mblen2 = WideCharToMultiByte(CP_UTF8, 0, wch, wlen, mbstr2, 4, NULL, NULL);
        if (mblen1 != mblen2) {
            printf("Error: 0x%04X: mblen1=%d, mblen2=%d\n", code, mblen1, mblen2);
            continue;
        }

        if (memcmp(mbstr1, mbstr2, mblen1) != 0) {
            printf("Error: 0x%04x: encodings are different\n", code);
            continue;
        }
    }
}