#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <stringprep.h>
#include "utils.h"
struct nfkc
{
const char *in;
const char *out;
};
static struct nfkc nfkc[] = {
{"\xC2\xB5", "\xCE\xBC"},
{"\xC2\xAA", "\x61"},
{"\xE1\x84\x80\xCC\x80\xE1\x85\xA1", "\xEA\xB0\x80\xCC\x80"},
{"\xE0\xAD\x87\xCC\x80\xE0\xAC\xBE", "\xE0\xAD\x8b\xCC\x80"}
};
void
doit (void)
{
char *out;
size_t i;
for (i = 0; i < sizeof (nfkc) / sizeof (nfkc[0]); i++)
{
if (debug)
printf ("NFKC entry %d\n", i);
out = stringprep_utf8_nfkc_normalize (nfkc[i].in, strlen (nfkc[i].in));
if (out == NULL)
{
fail ("NFKC entry %d failed fatally\n", i);
continue;
}
if (debug)
{
uint32_t *t;
size_t len;
printf ("in:\n");
escapeprint (nfkc[i].in, strlen (nfkc[i].in));
hexprint (nfkc[i].in, strlen (nfkc[i].in));
binprint (nfkc[i].in, strlen (nfkc[i].in));
printf ("out:\n");
escapeprint (out, strlen (out));
hexprint (out, strlen (out));
binprint (out, strlen (out));
t = stringprep_utf8_to_ucs4 (out, -1, &len);
if (t)
{
ucs4print (t, len);
free (t);
}
printf ("expected out:\n");
escapeprint (nfkc[i].out, strlen (nfkc[i].out));
hexprint (nfkc[i].out, strlen (nfkc[i].out));
binprint (nfkc[i].out, strlen (nfkc[i].out));
}
if (strlen (nfkc[i].out) != strlen (out) ||
memcmp (nfkc[i].out, out, strlen (out)) != 0)
{
fail ("NFKC entry %d failed\n", i);
if (debug)
printf ("ERROR\n");
}
else if (debug)
printf ("OK\n");
free (out);
}
}