fnmatch: fix "[/b" test
[libc-test] / src / multibyte / utf8bench.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <wchar.h>
5 #include <locale.h>
6 #include <langinfo.h>
7
8 #define LEN 500000
9
10 static char *initbuf() {
11         char *buf;
12         int i, j, k, l;
13
14         setlocale(LC_CTYPE, "C.UTF-8")
15         || setlocale(LC_CTYPE, "en_US.UTF-8")
16         || setlocale(LC_CTYPE, "en_GB.UTF-8")
17         || setlocale(LC_CTYPE, "en.UTF-8")
18         || setlocale(LC_CTYPE, "de_DE-8")
19         || setlocale(LC_CTYPE, "fr_FR-8");
20         if (strcmp(nl_langinfo(CODESET), "UTF-8")) exit(1);
21
22         buf = malloc(LEN);
23         l = 0;
24         for (i=0xc3; i<0xe0; i++)
25                 for (j=0x80; j<0xc0; j++)
26                         buf[l++] = i, buf[l++] = j;
27         for (i=0xe1; i<0xed; i++)
28                 for (j=0x80; j<0xc0; j++)
29                         for (k=0x80; k<0xc0; k++)
30                                 buf[l++] = i, buf[l++] = j, buf[l++] = k;
31         for (i=0xf1; i<0xf4; i++)
32                 for (j=0x80; j<0xc0; j++)
33                         for (k=0x80; k<0xc0; k++)
34                                 buf[l++] = i, buf[l++] = j, buf[l++] = 0x80, buf[l++] = k;
35         buf[l++] = 0;
36         return buf;
37 }
38
39 void bench_utf8_bigbuf(int N) {
40         char *buf;
41         wchar_t *wbuf;
42         int i;
43         int cs;
44
45         buf = initbuf();
46         wbuf = malloc(LEN*sizeof(wchar_t));
47         for (i=0; i<N; i++)
48                 cs ^= mbstowcs(wbuf, buf, LEN);
49         buf[0] = cs;
50         free(wbuf);
51         free(buf);
52 }
53
54 void bench_utf8_onebyone(int N) {
55         char *buf;
56         wchar_t wc;
57         int i, j;
58         mbstate_t st = {0};
59
60         buf = initbuf();
61         for (i=0; i<N; i++) {
62                 for (j=0; buf[j]; j+=mbrtowc(&wc, buf+j, 4, &st));
63         }
64         free(buf);
65 }