blob: 9271798b44c0d896ad4850a9ff5e1e7a6627f3c1 [file] [log] [blame] [edit]
/* Branched from glibc's string/tst-strxfrm2.c. */
#include <locale.h>
#include <stdio.h>
#include <string.h>
#include "third_party/glibc_locales/glibc_locales.h"
static int do_test(void) {
google_locale_t loc = google_newlocale(LC_ALL_MASK, "POSIX", NULL, 0);
if (loc == NULL) {
puts("google_newlocale POSIX failed");
return 1;
}
int res = 0;
char buf[20];
size_t l1 = google_strxfrm_l(NULL, "ab", 0, loc);
size_t l2 = google_strxfrm_l(buf, "ab", 1, loc);
size_t l3 = google_strxfrm_l(buf, "ab", sizeof(buf), loc);
if (l3 < sizeof(buf) && strlen(buf) != l3) {
puts("C locale l3 test failed");
res = 1;
}
size_t l4 = google_strxfrm_l(buf, "ab", l1 + 1, loc);
if (l4 < l1 + 1 && strlen(buf) != l4) {
puts("C locale l4 test failed");
res = 1;
}
buf[l1] = 'Z';
size_t l5 = google_strxfrm_l(buf, "ab", l1, loc);
if (buf[l1] != 'Z') {
puts("C locale l5 test failed");
res = 1;
}
if (l1 != l2 || l1 != l3 || l1 != l4 || l1 != l5) {
puts("C locale retval test failed");
res = 1;
}
loc = google_newlocale(LC_ALL_MASK, "de_DE.UTF-8", NULL, 0);
if (loc == NULL) {
puts("google_setlocale failed");
res = 1;
} else {
l1 = google_strxfrm_l(NULL, "ab", 0, loc);
l2 = google_strxfrm_l(buf, "ab", 1, loc);
l3 = google_strxfrm_l(buf, "ab", sizeof(buf), loc);
if (l3 < sizeof(buf) && strlen(buf) != l3) {
puts("UTF-8 locale l3 test failed");
res = 1;
}
l4 = google_strxfrm_l(buf, "ab", l1 + 1, loc);
if (l4 < l1 + 1 && strlen(buf) != l4) {
puts("UTF-8 locale l4 test failed");
res = 1;
}
buf[l1] = 'Z';
l5 = google_strxfrm_l(buf, "ab", l1, loc);
if (buf[l1] != 'Z') {
puts("UTF-8 locale l5 test failed");
res = 1;
}
if (l1 != l2 || l1 != l3 || l1 != l4 || l1 != l5) {
puts("UTF-8 locale retval test failed");
res = 1;
}
}
return res;
}
int main() { return do_test(); }