21#include <unicode/ucasemap.h>
22#include <unicode/uchar.h>
95 printf(
"case_test: FAILURE for codepoint 0x%06x\n", code);
96 printf(
"case_test: Postgres lower/title/upper/fold: 0x%06x/0x%06x/0x%06x/0x%06x\n",
98 printf(
"case_test: ICU lower/title/upper/fold: 0x%06x/0x%06x/0x%06x/0x%06x\n",
143 printf(
"case_test: str='%s' lower='%s' icu_lower='%s'\n",
str,
lower,
149 printf(
"case_test: str='%s' title='%s' icu_title='%s'\n",
str, title,
155 printf(
"case_test: str='%s' upper='%s' icu_upper='%s'\n",
str,
upper,
161 printf(
"case_test: str='%s' fold='%s' icu_fold='%s'\n",
str,
fold,
176 for (
char32_t code = 0; code <= 0x10ffff; code++)
200 printf(
"case_test: skipped %d codepoints unassigned in ICU due to Unicode version mismatch\n",
203 printf(
"case_test: ICU simple mapping test: %d codepoints successful\n",
228 printf(
"case_test: convert_case test1 FAILURE: '%s' needed %zu expected %zu\n",
234 printf(
"case_test: convert_case test1 FAILURE: test: '%s' result: '%.*s' expected: '%s'\n",
244 printf(
"case_test: convert_case test2 FAILURE: '%s' needed %zu expected %zu\n",
250 printf(
"case_test: convert_case test2 FAILURE: test: '%s' result: '%s' expected: '%s'\n",
260 printf(
"case_test: convert_case test3 FAILURE: '%s' needed %zu expected %zu\n",
262 printf(
"case_test: convert_case test3 FAILURE: needed %zu\n",
needed);
267 printf(
"case_test: convert_case test3 FAILURE: test: '%s' result: '%.*s' expected: '%s'\n",
277 printf(
"case_test: convert_case test4 FAILURE: '%s' needed %zu expected %zu\n",
283 printf(
"case_test: convert_case test4 FAILURE: test: '%s' result: '%s' expected: '%s'\n",
373 printf(
"case_test: convert_case: success\n");
389 printf(
"case_test: failure opening UCaseMap: %s\n",
400 printf(
"case_test: ICU not available; skipping\n");
static void test_convert_case()
static void test_convert(TestFunc tfunc, const char *test_string, const char *expected)
static size_t tfunc_lower(char *dst, size_t dstsize, const char *src, ssize_t srclen)
static size_t initcap_wbnext(void *state)
static size_t tfunc_title(char *dst, size_t dstsize, const char *src, ssize_t srclen)
static size_t tfunc_upper(char *dst, size_t dstsize, const char *src, ssize_t srclen)
static size_t tfunc_fold(char *dst, size_t dstsize, const char *src, ssize_t srclen)
size_t(* TestFunc)(char *dst, size_t dstsize, const char *src, ssize_t srclen)
static char32_t utf8_to_unicode(const unsigned char *c)
Datum lower(PG_FUNCTION_ARGS)
Datum upper(PG_FUNCTION_ARGS)
static unsigned char * unicode_to_utf8(char32_t c, unsigned char *utf8string)
static int unicode_utf8len(char32_t c)
char32_t unicode_titlecase_simple(char32_t code)
size_t unicode_strupper(char *dst, size_t dstsize, const char *src, ssize_t srclen, bool full)
size_t unicode_strlower(char *dst, size_t dstsize, const char *src, ssize_t srclen, bool full)
char32_t unicode_casefold_simple(char32_t code)
char32_t unicode_lowercase_simple(char32_t code)
size_t unicode_strtitle(char *dst, size_t dstsize, const char *src, ssize_t srclen, bool full, WordBoundaryNext wbnext, void *wbstate)
size_t unicode_strfold(char *dst, size_t dstsize, const char *src, ssize_t srclen, bool full)
static enum CaseMapResult casemap(char32_t u1, CaseKind casekind, bool full, const char *src, size_t srclen, size_t srcoff, char32_t *simple, const char32_t **special)
char32_t unicode_uppercase_simple(char32_t code)
bool pg_u_isalnum(char32_t code, bool posix)
pg_unicode_category unicode_category(char32_t code)
#define PG_UNICODE_VERSION