Introduction
Introduction Statistics Contact Development Disclaimer Help
util.c - libgrapheme - unicode string library
git clone git://git.suckless.org/libgrapheme
Log
Files
Refs
README
LICENSE
---
util.c (3049B)
---
1 /* See LICENSE file for copyright and license details. */
2 #include <stdbool.h>
3 #include <stddef.h>
4 #include <stdint.h>
5 #include <stdio.h>
6 #include <string.h>
7
8 #include "../gen/types.h"
9 #include "../grapheme.h"
10 #include "util.h"
11
12 int
13 run_break_tests(size_t (*next_break)(const uint_least32_t *, size_t),
14 const struct break_test *test, size_t testlen,
15 const char *argv0)
16 {
17 size_t i, j, off, res, failed;
18
19 /* character break test */
20 for (i = 0, failed = 0; i < testlen; i++) {
21 for (j = 0, off = 0; off < test[i].cplen; off += res) {
22 res = next_break(test[i].cp + off, test[i].cplen…
23
24 /* check if our resulting offset matches */
25 if (j == test[i].lenlen || res != test[i].len[j+…
26 fprintf(stderr,
27 "%s: Failed conformance test %zu…
28 "\"%s\".\n",
29 argv0, i, test[i].descr);
30 fprintf(stderr,
31 "J=%zu: EXPECTED len %zu, got %z…
32 j - 1, test[i].len[j - 1], res);
33 failed++;
34 break;
35 }
36 }
37 }
38 printf("%s: %zu/%zu conformance tests passed.\n", argv0,
39 testlen - failed, testlen);
40
41 return (failed > 0) ? 1 : 0;
42 }
43
44 int
45 run_unit_tests(int (*unit_test_callback)(const void *, size_t, const cha…
46 const char *),
47 const void *test, size_t testlen, const char *name,
48 const char *argv0)
49 {
50 size_t i, failed;
51
52 for (i = 0, failed = 0; i < testlen; i++) {
53 failed +=
54 (unit_test_callback(test, i, name, argv0) == 0) …
55 }
56
57 printf("%s: %s: %zu/%zu unit tests passed.\n", argv0, name,
58 testlen - failed, testlen);
59
60 return (failed > 0) ? 1 : 0;
61 }
62
63 int
64 unit_test_callback_next_break(const struct unit_test_next_break *t, size…
65 size_t (*next_break)(const uint_least32_t …
66 size_t),
67 const char *name, const char *argv0)
68 {
69 const struct unit_test_next_break *test = t + off;
70
71 size_t ret = next_break(test->input.src, test->input.srclen);
72
73 if (ret != test->output.ret) {
74 goto err;
75 }
76
77 return 0;
78 err:
79 fprintf(stderr,
80 "%s: %s: Failed unit test %zu \"%s\" "
81 "(returned %zu instead of %zu).\n",
82 argv0, name, off, test->description, ret, test->output.r…
83 return 1;
84 }
85
86 int
87 unit_test_callback_next_break_utf8(const struct unit_test_next_break_utf…
88 size_t off,
89 size_t (*next_break_utf8)(const char …
90 size_t),
91 const char *name, const char *argv0)
92 {
93 const struct unit_test_next_break_utf8 *test = t + off;
94
95 size_t ret = next_break_utf8(test->input.src, test->input.srclen…
96
97 if (ret != test->output.ret) {
98 goto err;
99 }
100
101 return 0;
102 err:
103 fprintf(stderr,
104 "%s: %s: Failed unit test %zu \"%s\" "
105 "(returned %zu instead of %zu).\n",
106 argv0, name, off, test->description, ret, test->output.r…
107 return 1;
108 }
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.