commit 52e94b51d3dab06e9e467f1074422a48843779e3
Author:     Laslo Hunhold <[email protected]>
AuthorDate: Sun Jan 9 12:22:42 2022 +0100
Commit:     Laslo Hunhold <[email protected]>
CommitDate: Sun Jan 9 12:23:36 2022 +0100

    Add a general break-test-check-function in test/util
    
    Signed-off-by: Laslo Hunhold <[email protected]>

diff --git a/test/character.c b/test/character.c
index d156980..39f5865 100644
--- a/test/character.c
+++ b/test/character.c
@@ -1,45 +1,21 @@
 /* See LICENSE file for copyright and license details. */
-#include <stddef.h>
+#include <stdbool.h>
 #include <stdint.h>
-#include <stdio.h>
-#include <string.h>
 
-#include "../grapheme.h"
 #include "../gen/character-test.h"
 #include "util.h"
 
+static bool
+is_break(uint_least32_t cp0, uint_least32_t cp1, GRAPHEME_STATE *state)
+{
+       return grapheme_is_character_break(cp0, cp1, state);
+}
+
 int
 main(int argc, char *argv[])
 {
-       GRAPHEME_STATE state;
-       size_t i, j, k, len, failed;
-
        (void)argc;
 
-       /* character break test */
-       for (i = 0, failed = 0; i < LEN(character_test); i++) {
-               memset(&state, 0, sizeof(state));
-               for (j = 0, k = 0, len = 1; j < character_test[i].cplen; j++) {
-                       if ((j + 1) == character_test[i].cplen ||
-                           grapheme_is_character_break(character_test[i].cp[j],
-                                                      character_test[i].cp[j + 
1],
-                                                      &state)) {
-                               /* check if our resulting length matches */
-                               if (k == character_test[i].lenlen ||
-                                   len != character_test[i].len[k++]) {
-                                       fprintf(stderr, "%s: Failed test 
\"%s\".\n",
-                                               argv[0], 
character_test[i].descr);
-                                       failed++;
-                                       break;
-                               }
-                               len = 1;
-                       } else {
-                               len++;
-                       }
-               }
-       }
-       printf("%s: %zu/%zu tests passed.\n", argv[0],
-              LEN(character_test) - failed, LEN(character_test));
-
-       return (failed > 0) ? 1 : 0;
+       return run_break_tests(is_break, character_test,
+                              LEN(character_test), argv[0]);
 }
diff --git a/test/util.c b/test/util.c
index c8f5a7d..6d3d95a 100644
--- a/test/util.c
+++ b/test/util.c
@@ -1,4 +1,44 @@
 /* See LICENSE file for copyright and license details. */
-#include <time.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
 
+#include "../grapheme.h"
+#include "../gen/types.h"
 #include "util.h"
+
+int
+run_break_tests(bool (*is_break)(uint_least32_t, uint_least32_t, 
GRAPHEME_STATE *),
+                const struct test *test, size_t testlen, const char *argv0)
+{
+       GRAPHEME_STATE state;
+       size_t i, j, k, len, failed;
+
+       /* character break test */
+       for (i = 0, failed = 0; i < testlen; i++) {
+               memset(&state, 0, sizeof(state));
+               for (j = 0, k = 0, len = 1; j < test[i].cplen; j++) {
+                       if ((j + 1) == test[i].cplen ||
+                           is_break(test[i].cp[j], test[i].cp[j + 1],
+                                    &state)) {
+                               /* check if our resulting length matches */
+                               if (k == test[i].lenlen ||
+                                   len != test[i].len[k++]) {
+                                       fprintf(stderr, "%s: Failed test 
\"%s\".\n",
+                                               argv0, test[i].descr);
+                                       failed++;
+                                       break;
+                               }
+                               len = 1;
+                       } else {
+                               len++;
+                       }
+               }
+       }
+       printf("%s: %zu/%zu tests passed.\n", argv0,
+              testlen - failed, testlen);
+
+       return (failed > 0) ? 1 : 0;
+}
diff --git a/test/util.h b/test/util.h
index 500e192..02710ba 100644
--- a/test/util.h
+++ b/test/util.h
@@ -2,8 +2,13 @@
 #ifndef UTIL_H
 #define UTIL_H
 
-#include <time.h>
+#include "../gen/types.h"
+#include "../grapheme.h"
 
 #define LEN(x) (sizeof(x) / sizeof(*(x)))
 
+int run_break_tests(bool (*is_break)(uint_least32_t, uint_least32_t,
+                    GRAPHEME_STATE *), const struct test *test,
+                    size_t testlen, const char *);
+
 #endif /* UTIL_H */

Reply via email to