static
void
test_to_utf16(void)
{
    uint16_t *res;
    uint32_t res_len;

    printf("to utf16: all ASCII\n");
    {
        const char *in = "Hello, world!";
        const uint16_t out[] = {0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x77,
                                0x6f, 0x72, 0x6c, 0x64, 0x21
                               };
        res_len = 7777;
        res = ppb_char_set_char_set_to_utf16(instance, in, strlen(in), "UTF-8",
                                             PP_CHARSET_CONVERSIONERROR_FAIL, &res_len);
        assert(res_len == sizeof(out) / sizeof(uint16_t));
        assert(memcmp(res, out, sizeof(out)) == 0);
        free(res);
    }

    printf("to utf16: basic UTF-8\n");
    {
        const char *in = "Привет, мир!";
        const uint16_t out[] = {0x41f, 0x440, 0x438, 0x432, 0x435, 0x442, 0x2c,
                                0x20, 0x43c, 0x438, 0x440, 0x21
                               };
        res_len = 7777;
        res = ppb_char_set_char_set_to_utf16(instance, in, strlen(in), "UTF-8",
                                             PP_CHARSET_CONVERSIONERROR_FAIL, &res_len);
        assert(res_len == sizeof(out) / sizeof(out[0]));
        assert(memcmp(res, out, sizeof(out)) == 0);
        free(res);
    }

    printf("to utf16: wrong UTF-8 with error\n");
    {
        const char *in = "Hel\x80lo";
        res_len = 7777;
        res = ppb_char_set_char_set_to_utf16(instance, in, strlen(in), "UTF-8",
                                             PP_CHARSET_CONVERSIONERROR_FAIL, &res_len);
        assert(res_len == 0);
        assert(res == NULL);
        free(res);
    }

    // testing PP_CHARSET_CONVERSIONERROR_SKIP or PP_CHARSET_CONVERSIONERROR_SUBSTITUTE
    // have no much sense since every unicode character can be represented in UTF-16
}
TRACE_WRAPPER
uint16_t *
trace_ppb_char_set_char_set_to_utf16(PP_Instance instance, const char *input, uint32_t input_len,
                                     const char *input_char_set,
                                     enum PP_CharSet_ConversionError on_error,
                                     uint32_t *output_length)
{
    trace_info("[PPB] {full} %s instance=%d, input=%.*s, input_len=%u, input_char_set=%s, "
               "on_error=%s\n", __func__+6, instance, input_len, input, input_len, input_char_set,
               reverse_char_set_conversion_error(on_error));
    return ppb_char_set_char_set_to_utf16(instance, input, input_len, input_char_set, on_error,
                                          output_length);
}