| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #include <config.h> |
|
|
| #include <stdlib.h> |
| #include <string.h> |
| #include <locale.h> |
| #include <uchar.h> |
|
|
| #include "bench.h" |
| #include "bench-multibyte.h" |
| #include "mbuiterf.h" |
|
|
| unsigned long long volatile result; |
|
|
| static void |
| do_test (char test, int repeat, const char *locale_name, const char *text) |
| { |
| printf ("Test %c\n", test); |
| if (setlocale (LC_ALL, locale_name) != NULL) |
| { |
| struct timings_state ts; |
| timing_start (&ts); |
|
|
| int count; |
| for (count = 0; count < repeat; count++) |
| { |
| unsigned long long sum = 0; |
| mbuif_state_t state; |
| const char *iter; |
| for (mbuif_init (state), iter = text; mbuif_avail (state, iter); ) |
| { |
| mbchar_t cur = mbuif_next (state, iter); |
| sum += cur.wc; |
| iter += mb_len (cur); |
| } |
| result = sum; |
| } |
|
|
| timing_end (&ts); |
| timing_output (&ts); |
| } |
| else |
| { |
| printf ("Skipping test: locale %s not installed.\n", locale_name); |
| } |
| printf ("\n"); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| int |
| main (int argc, char *argv[]) |
| { |
| if (argc != 3) |
| { |
| fprintf (stderr, "Usage: %s TESTS REPETITIONS\n", argv[0]); |
| fprintf (stderr, "Example: %s abcdefghij 100000\n", argv[0]); |
| exit (1); |
| } |
|
|
| const char *tests = argv[1]; |
| int repeat = atoi (argv[2]); |
|
|
| text_init (); |
|
|
| |
| size_t i; |
| for (i = 0; i < strlen (tests); i++) |
| { |
| char test = tests[i]; |
|
|
| switch (test) |
| { |
| case 'a': |
| do_test (test, repeat, "C", text_latin_ascii); |
| break; |
| case 'b': |
| do_test (test, repeat, "en_US.UTF-8", text_latin_ascii); |
| break; |
| case 'c': |
| do_test (test, repeat, "C", text_french_iso8859); |
| break; |
| case 'd': |
| do_test (test, repeat, "fr_FR.ISO-8859-1", text_french_iso8859); |
| break; |
| case 'e': |
| do_test (test, repeat, "en_US.UTF-8", text_french_utf8); |
| break; |
| case 'f': |
| do_test (test, repeat, "C", text_greek_iso8859); |
| break; |
| case 'g': |
| do_test (test, repeat, "el_GR.ISO-8859-7", text_greek_iso8859); |
| break; |
| case 'h': |
| do_test (test, repeat, "en_US.UTF-8", text_greek_utf8); |
| break; |
| case 'i': |
| do_test (test, repeat, "en_US.UTF-8", text_chinese_utf8); |
| break; |
| case 'j': |
| do_test (test, repeat, "zh_CN.GB18030", text_chinese_gb18030); |
| break; |
| default: |
| |
| ; |
| } |
| } |
|
|
| return 0; |
| } |
|
|