annotate tests/unigbrk/test-u32-grapheme-breaks.c @ 16201:8250f2777afc

maint: update all copyright year number ranges Run "make update-copyright".
author Jim Meyering <meyering@redhat.com>
date Sun, 01 Jan 2012 10:04:58 +0100
parents 5400154288e5
children e542fd46ad6f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14076
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
1 /* Grapheme cluster breaks test.
16201
8250f2777afc maint: update all copyright year number ranges
Jim Meyering <meyering@redhat.com>
parents: 14087
diff changeset
2 Copyright (C) 2010-2012 Free Software Foundation, Inc.
14076
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
3
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
4 This program is free software: you can redistribute it and/or modify it
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
5 under the terms of the GNU Lesser General Public License as published
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
6 by the Free Software Foundation; either version 3 of the License, or
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
7 (at your option) any later version.
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
8
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
12 Lesser General Public License for more details.
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
13
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
14 You should have received a copy of the GNU Lesser General Public License
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
16
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
17 /* Written by Ben Pfaff <blp@cs.stanford.edu>, 2010. */
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
18
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
19 #include <config.h>
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
20
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
21 /* Specification. */
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
22 #include <unigbrk.h>
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
23
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
24 #include <stdarg.h>
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
25 #include <stdio.h>
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
26 #include <stdlib.h>
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
27 #include <string.h>
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
28
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
29 #include "macros.h"
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
30
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
31 static void
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
32 test_u32_grapheme_breaks (const char *expected, ...)
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
33 {
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
34 size_t n = strlen (expected);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
35 uint32_t s[16];
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
36 va_list args;
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
37 char breaks[16];
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
38 size_t i;
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
39
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
40 ASSERT (n <= 16);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
41
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
42 memset (breaks, 0xcc, n);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
43
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
44 va_start (args, expected);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
45 for (i = 0; i < n; i++)
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
46 {
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
47 int unit = va_arg (args, int);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
48 ASSERT (unit >= 0);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
49 s[i] = unit;
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
50 }
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
51 ASSERT (va_arg (args, int) == -1);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
52 va_end (args);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
53
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
54 u32_grapheme_breaks (s, n, breaks);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
55 for (i = 0; i < n; i++)
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
56 if (breaks[i] != (expected[i] == '#'))
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
57 {
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
58 size_t j;
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
59
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
60 fprintf (stderr, "wrong grapheme breaks:\n");
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
61
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
62 fprintf (stderr, " input:");
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
63 for (j = 0; j < n; j++)
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
64 fprintf (stderr, " %02x", s[j]);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
65 putc ('\n', stderr);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
66
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
67 fprintf (stderr, "expected:");
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
68 for (j = 0; j < n; j++)
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
69 fprintf (stderr, " %d", expected[j] == '#');
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
70 putc ('\n', stderr);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
71
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
72 fprintf (stderr, " actual:");
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
73 for (j = 0; j < n; j++)
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
74 fprintf (stderr, " %d", breaks[j]);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
75 putc ('\n', stderr);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
76
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
77 abort ();
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
78 }
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
79 }
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
80
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
81 int
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
82 main (void)
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
83 {
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
84 /* Standalone 1-unit graphemes. */
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
85 test_u32_grapheme_breaks ("#", 'a', -1);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
86 test_u32_grapheme_breaks ("##", 'a', 'b', -1);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
87 test_u32_grapheme_breaks ("###", 'a', 'b', 'c', -1);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
88
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
89 #define HIRAGANA_A 0x3042 /* あ: Hiragana letter 'a'. */
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
90 test_u32_grapheme_breaks ("#", HIRAGANA_A, -1);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
91 test_u32_grapheme_breaks ("##", HIRAGANA_A, 'x', -1);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
92 test_u32_grapheme_breaks ("##", HIRAGANA_A, HIRAGANA_A, -1);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
93
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
94 /* Combining accents. */
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
95 #define GRAVE 0x0300 /* Combining grave accent. */
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
96 #define ACUTE 0x0301 /* Combining acute accent. */
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
97 test_u32_grapheme_breaks ("#_", 'e', ACUTE, -1);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
98 test_u32_grapheme_breaks ("#__", 'e', ACUTE, GRAVE, -1);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
99 test_u32_grapheme_breaks ("#_#", 'e', ACUTE, 'x', -1);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
100 test_u32_grapheme_breaks ("#_#_", 'e', ACUTE, 'e', GRAVE, -1);
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
101
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
102 return 0;
bf75753bb6d8 unigbrk: New modules for grapheme clusters.
Ben Pfaff <blp@cs.stanford.edu>
parents:
diff changeset
103 }