| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #include <config.h> |
| |
|
| | #include <stdlib.h> |
| | #include <string.h> |
| | #include <locale.h> |
| | #include <uchar.h> |
| |
|
| | #include "bench.h" |
| | #include "bench-multibyte.h" |
| | #include "mbiter.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); |
| |
|
| | size_t text_len = strlen (text); |
| | int count; |
| | for (count = 0; count < repeat; count++) |
| | { |
| | unsigned long long sum = 0; |
| | mbi_iterator_t iter; |
| | for (mbi_init (iter, text, text_len); mbi_avail (iter); mbi_advance (iter)) |
| | { |
| | sum += mbi_cur (iter).wc; |
| | } |
| | 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; |
| | } |
| |
|