Blame


1 3448adb0 2022-11-02 op /* See LICENSE file for copyright and license details. */
2 3448adb0 2022-11-02 op #include <errno.h>
3 3448adb0 2022-11-02 op #include <math.h>
4 3448adb0 2022-11-02 op #include <stdint.h>
5 3448adb0 2022-11-02 op #include <stdio.h>
6 3448adb0 2022-11-02 op #include <stdlib.h>
7 3448adb0 2022-11-02 op #include <string.h>
8 3448adb0 2022-11-02 op
9 3448adb0 2022-11-02 op #include "../grapheme.h"
10 3448adb0 2022-11-02 op #include "../gen/word-test.h"
11 3448adb0 2022-11-02 op #include "util.h"
12 3448adb0 2022-11-02 op
13 3448adb0 2022-11-02 op #define NUM_ITERATIONS 10000
14 3448adb0 2022-11-02 op
15 3448adb0 2022-11-02 op struct break_benchmark_payload {
16 3448adb0 2022-11-02 op uint_least32_t *src;
17 3448adb0 2022-11-02 op size_t srclen;
18 3448adb0 2022-11-02 op uint_least32_t *dest;
19 3448adb0 2022-11-02 op size_t destlen;
20 3448adb0 2022-11-02 op };
21 3448adb0 2022-11-02 op
22 3448adb0 2022-11-02 op void
23 3448adb0 2022-11-02 op libgrapheme(const void *payload)
24 3448adb0 2022-11-02 op {
25 3448adb0 2022-11-02 op const struct break_benchmark_payload *p = payload;
26 3448adb0 2022-11-02 op
27 3448adb0 2022-11-02 op grapheme_to_uppercase(p->src, p->srclen, p->dest, p->destlen);
28 3448adb0 2022-11-02 op }
29 3448adb0 2022-11-02 op
30 3448adb0 2022-11-02 op int
31 3448adb0 2022-11-02 op main(int argc, char *argv[])
32 3448adb0 2022-11-02 op {
33 3448adb0 2022-11-02 op struct break_benchmark_payload p;
34 3448adb0 2022-11-02 op double baseline = (double)NAN;
35 3448adb0 2022-11-02 op
36 3448adb0 2022-11-02 op (void)argc;
37 3448adb0 2022-11-02 op
38 3448adb0 2022-11-02 op if ((p.src = generate_cp_test_buffer(word_break_test,
39 3448adb0 2022-11-02 op LEN(word_break_test),
40 3448adb0 2022-11-02 op &(p.srclen))) == NULL) {
41 3448adb0 2022-11-02 op return 1;
42 3448adb0 2022-11-02 op }
43 3448adb0 2022-11-02 op if ((p.dest = calloc((p.destlen = 2 * p.srclen), sizeof(*(p.dest)))) == NULL) {
44 3448adb0 2022-11-02 op fprintf(stderr, "calloc: Out of memory\n");
45 3448adb0 2022-11-02 op }
46 3448adb0 2022-11-02 op
47 3448adb0 2022-11-02 op printf("%s\n", argv[0]);
48 3448adb0 2022-11-02 op run_benchmark(libgrapheme, &p, "libgrapheme ", NULL, "codepoint",
49 3448adb0 2022-11-02 op &baseline, NUM_ITERATIONS, p.srclen - 1);
50 3448adb0 2022-11-02 op
51 3448adb0 2022-11-02 op free(p.src);
52 3448adb0 2022-11-02 op free(p.dest);
53 3448adb0 2022-11-02 op
54 3448adb0 2022-11-02 op return 0;
55 3448adb0 2022-11-02 op }