#include <wchar.h>
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include <locale.h>
#include <sys/debug.h>
int
main(void)
{
int ret;
wchar_t a[32], b[32];
const char *str = "kefka";
const char *caps = "KEFKA";
const char *less = "celes";
const char *more = "terra";
const char *hikari = "光";
const char *awake = "目覚め";
size_t len = strlen(str);
(void) setlocale(LC_ALL, "en_US.UTF-8");
(void) memset(a, 'a', sizeof (a));
(void) memset(b, 'b', sizeof (b));
ret = mbstowcs(a, str, len);
VERIFY3U(ret, ==, len);
ret = mbstowcs(b, str, len);
VERIFY3U(ret, ==, len);
VERIFY0(wcsncasecmp(a, a, len));
VERIFY0(wcsncasecmp(a, b, len));
ret = mbstowcs(b, caps, len);
VERIFY3U(ret, ==, len);
VERIFY0(wcsncasecmp(a, b, len));
ret = mbstowcs(b, less, len);
VERIFY3U(ret, ==, len);
VERIFY3S(wcsncasecmp(a, b, len), >, 0);
ret = mbstowcs(b, more, len);
VERIFY3U(ret, ==, len);
VERIFY3S(wcsncasecmp(a, b, len), <, 0);
ret = mbstowcs(a, caps, len);
VERIFY3U(ret, ==, len);
ret = mbstowcs(b, less, len);
VERIFY3U(ret, ==, len);
VERIFY3S(wcsncmp(a, b, len), <, 0);
VERIFY3S(wcsncasecmp(a, b, len), >, 0);
VERIFY3S(wcsncasecmp(a, b, 0), ==, 0);
(void) setlocale(LC_ALL, "ja_JP.UTF-8");
ret = mbstowcs(a, hikari, sizeof (a));
VERIFY3U(ret, >, 0);
ret = mbstowcs(b, hikari, sizeof (b));
VERIFY3U(ret, >, 0);
VERIFY3S(wcsncasecmp(a, b, 1), ==, 0);
ret = mbstowcs(b, awake, sizeof (b));
VERIFY3U(ret, >, 0);
VERIFY3S(wcsncasecmp(a, b, 1), !=, 0);
return (0);
}