[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 05/10] uniwbrk/u32-wordbreaks-tests: Test using WordBreakTest.
From: |
Daiki Ueno |
Subject: |
[PATCH v2 05/10] uniwbrk/u32-wordbreaks-tests: Test using WordBreakTest.txt from UCD |
Date: |
Thu, 23 Oct 2014 17:01:36 +0900 |
* modules/uniwbrk/u32-wordbreaks-tests (Files): Add
tests/uniwbrk/test-uc-wordbreaks.c,
tests/uniwbrk/test-uc-wordbreaks.sh, and
tests/uniwbrk/WordBreakTest.txt.
(Makefile.am): Add uniwbrk/test-uc-wordbreaks.sh to $(TESTS), add
test-uc-wordbreaks to $(check_PROGRAMS), and define
test_uc_wordbreaks_SOURCES and test_uc_wordbreaks_LDADD.
* tests/uniwbrk/test-uc-wordbreaks.sh: New file.
* tests/uniwbrk/test-uc-wordbreaks.c: New file.
---
modules/uniwbrk/u32-wordbreaks-tests | 9 +-
tests/uniwbrk/test-uc-wordbreaks.c | 177 +++++++++++++++++++++++++++++++++++
tests/uniwbrk/test-uc-wordbreaks.sh | 3 +
3 files changed, 187 insertions(+), 2 deletions(-)
create mode 100644 tests/uniwbrk/test-uc-wordbreaks.c
create mode 100755 tests/uniwbrk/test-uc-wordbreaks.sh
diff --git a/modules/uniwbrk/u32-wordbreaks-tests
b/modules/uniwbrk/u32-wordbreaks-tests
index 1da80e4..897d4a4 100644
--- a/modules/uniwbrk/u32-wordbreaks-tests
+++ b/modules/uniwbrk/u32-wordbreaks-tests
@@ -1,5 +1,8 @@
Files:
tests/uniwbrk/test-u32-wordbreaks.c
+tests/uniwbrk/test-uc-wordbreaks.c
+tests/uniwbrk/test-uc-wordbreaks.sh
+tests/uniwbrk/WordBreakTest.txt
tests/macros.h
Depends-on:
@@ -7,7 +10,9 @@ Depends-on:
configure.ac:
Makefile.am:
-TESTS += test-u32-wordbreaks
-check_PROGRAMS += test-u32-wordbreaks
+TESTS += test-u32-wordbreaks uniwbrk/test-uc-wordbreaks.sh
+check_PROGRAMS += test-u32-wordbreaks test-uc-wordbreaks
test_u32_wordbreaks_SOURCES = uniwbrk/test-u32-wordbreaks.c
test_u32_wordbreaks_LDADD = $(LDADD) $(LIBUNISTRING)
+test_uc_wordbreaks_SOURCES = uniwbrk/test-uc-wordbreaks.c
+test_uc_wordbreaks_LDADD = $(LDADD) $(LIBUNISTRING)
diff --git a/tests/uniwbrk/test-uc-wordbreaks.c
b/tests/uniwbrk/test-uc-wordbreaks.c
new file mode 100644
index 0000000..736cdba
--- /dev/null
+++ b/tests/uniwbrk/test-uc-wordbreaks.c
@@ -0,0 +1,177 @@
+/* Word break function test, using test data from UCD.
+ Copyright (C) 2010-2014 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Written by Daiki Ueno <address@hidden>, 2014.
+
+ Largely based on unigbrk/test-uc-is-grapheme-break.c,
+ written by Ben Pfaff <address@hidden>, 2010. */
+
+#include <config.h>
+
+/* Specification. */
+#include <uniwbrk.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+const char *
+wordbreakproperty_to_string (int wbp)
+{
+ switch (wbp)
+ {
+#define CASE(VALUE) case WBP_##VALUE: return #VALUE;
+ CASE(OTHER)
+ CASE(CR)
+ CASE(LF)
+ CASE(NEWLINE)
+ CASE(EXTEND)
+ CASE(FORMAT)
+ CASE(KATAKANA)
+ CASE(ALETTER)
+ CASE(MIDNUMLET)
+ CASE(MIDLETTER)
+ CASE(MIDNUM)
+ CASE(NUMERIC)
+ CASE(EXTENDNUMLET)
+ }
+ abort ();
+}
+
+int
+main (int argc, char *argv[])
+{
+ const char *filename;
+ char line[4096];
+ int exit_code;
+ FILE *stream;
+ int lineno;
+
+ if (argc != 2)
+ {
+ fprintf (stderr, "usage: %s FILENAME\n"
+ "where FILENAME is the location of the WordBreakTest.txt\n"
+ "test file.\n", argv[0]);
+ exit (1);
+ }
+
+ filename = argv[1];
+ stream = fopen (filename, "r");
+ if (stream == NULL)
+ {
+ fprintf (stderr, "error during fopen of '%s'\n", filename);
+ exit (1);
+ }
+
+ exit_code = 0;
+ lineno = 0;
+ while (fgets (line, sizeof line, stream))
+ {
+ char *comment;
+ const char *p;
+ uint32_t input[100];
+ char breaks[101];
+ char breaks_expected[101];
+ int i;
+
+ lineno++;
+
+ memset (breaks, 0, sizeof (breaks));
+ memset (breaks_expected, 0, sizeof (breaks_expected));
+
+ comment = strchr (line, '#');
+ if (comment != NULL)
+ *comment = '\0';
+ if (line[strspn (line, " \t\r\n")] == '\0')
+ continue;
+
+ i = 0;
+ p = line;
+ do
+ {
+ p += strspn (p, " \t\r\n");
+ if (!strncmp (p, "\303\267" /* ÷ */, 2))
+ {
+ breaks_expected[i] = 1;
+ p += 2;
+ }
+ else if (!strncmp (p, "\303\227" /* × */, 2))
+ {
+ breaks_expected[i] = 0;
+ p += 2;
+ }
+ else
+ {
+ fprintf (stderr, "%s:%d.%d: syntax error expecting '÷' or '×'\n",
+ filename, lineno, (int) (p - line + 1));
+ exit (1);
+ }
+
+ p += strspn (p, " \t\r\n");
+ if (*p != '\0')
+ {
+ unsigned int next_int;
+ int n;
+
+ if (sscanf (p, "%x%n", &next_int, &n) != 1)
+ {
+ fprintf (stderr, "%s:%d.%d: syntax error at '%s' "
+ "expecting hexadecimal Unicode code point number\n",
+ filename, lineno, (int) (p - line + 1), p);
+ exit (1);
+ }
+ p += n;
+
+ input[i] = next_int;
+ }
+
+ p += strspn (p, " \t\r\n");
+ i++;
+ }
+ while (*p != '\0');
+
+ u32_wordbreaks (input, i - 1, breaks);
+
+ /* u32_wordbreaks always set BREAKS[0] to 0. */
+ breaks[0] = breaks_expected[0] = 1;
+ if (memcmp (breaks, breaks_expected, i - 1) != 0)
+ {
+ int j;
+
+ fprintf (stderr, "%s:%d: expected: ", filename, lineno);
+ for (j = 0; j < i - 1; j++)
+ {
+ int input_wbp = uc_wordbreak_property (input[j]);
+ fprintf (stderr, "%s U+%04X (%s) ",
+ breaks_expected[j] == 1 ? "\303\267" : "\303\227",
+ input[j], wordbreakproperty_to_string (input_wbp));
+ }
+ fprintf (stderr, "\n");
+ fprintf (stderr, "%s:%d: actual: ", filename, lineno);
+ for (j = 0; j < i - 1; j++)
+ {
+ int input_wbp = uc_wordbreak_property (input[j]);
+ fprintf (stderr, "%s U+%04X (%s) ",
+ breaks[j] == 1 ? "\303\267" : "\303\227",
+ input[j], wordbreakproperty_to_string (input_wbp));
+ }
+ fprintf (stderr, "\n");
+ exit_code = 1;
+ }
+ }
+
+ return exit_code;
+}
diff --git a/tests/uniwbrk/test-uc-wordbreaks.sh
b/tests/uniwbrk/test-uc-wordbreaks.sh
new file mode 100755
index 0000000..74b6464
--- /dev/null
+++ b/tests/uniwbrk/test-uc-wordbreaks.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+./test-uc-wordbreaks${EXEEXT} "${srcdir}/uniwbrk/WordBreakTest.txt"
--
1.9.3
- [PATCH v2 00/10] Update libunistring-related modules to Unicode 7.0.0, Daiki Ueno, 2014/10/23
- [PATCH v2 01/10] gen-uni-tables: Minor style fixes, Daiki Ueno, 2014/10/23
- [PATCH v2 04/10] uniwbrk: Ignore Extended/Format at the beginning of the line, Daiki Ueno, 2014/10/23
- [PATCH v2 02/10] gen-uni-tables: Check out-of-range values added to 3-level tables, Daiki Ueno, 2014/10/23
- [PATCH v2 05/10] uniwbrk/u32-wordbreaks-tests: Test using WordBreakTest.txt from UCD,
Daiki Ueno <=
- [PATCH v2 06/10] uniname: Make codepoint transformation more flexible, Daiki Ueno, 2014/10/23
- [PATCH v2 03/10] unictype/joininggroup-of: Switch to 3-level table, Daiki Ueno, 2014/10/23
- [PATCH v2 07/10] Update to Unicode 6.1.0, Daiki Ueno, 2014/10/23
- [PATCH v2 08/10] Update to Unicode 6.2.0, Daiki Ueno, 2014/10/23
- [PATCH v2 09/10] Update to Unicode 6.3.0, Daiki Ueno, 2014/10/23
- Re: [PATCH v2 00/10] Update libunistring-related modules to Unicode 7.0.0, Pádraig Brady, 2014/10/23