maint: update copyright
[gnulib.git] / tests / uninorm / test-u16-normcmp.c
1 /* Test of normalization insensitive comparison of UTF-16 strings.
2    Copyright (C) 2009-2014 Free Software Foundation, Inc.
3
4    This program is free software: you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; either version 3 of the License, or
7    (at your option) any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
16
17 /* Written by Bruno Haible <bruno@clisp.org>, 2009.  */
18
19 #include <config.h>
20
21 #include "uninorm.h"
22
23 #include "macros.h"
24
25 #include "test-u16-normcmp.h"
26
27 static void
28 test_nonascii (int (*my_normcmp) (const uint16_t *, size_t, const uint16_t *, size_t, uninorm_t, int *))
29 {
30   /* Normalization effects.  */
31   {
32     static const uint16_t input1[] = { 'H', 0x00F6, 'h', 'l', 'e' };
33     static const uint16_t input2[] = { 'H', 'o', 0x0308, 'h', 'l', 'e' };
34     static const uint16_t input3[] = { 'H', 0x00F6, 'h', 'l', 'e', 'n' };
35     static const uint16_t input4[] = { 'H', 'o', 0x0308, 'h', 'l', 'e', 'n' };
36     static const uint16_t input5[] = { 'H', 'u', 'r', 'z' };
37     int cmp;
38
39     ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0);
40     ASSERT (cmp == 0);
41
42     ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), UNINORM_NFD, &cmp) == 0);
43     ASSERT (cmp == 0);
44
45     ASSERT (my_normcmp (input3, SIZEOF (input3), input4, SIZEOF (input4), UNINORM_NFD, &cmp) == 0);
46     ASSERT (cmp == 0);
47
48     ASSERT (my_normcmp (input4, SIZEOF (input4), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0);
49     ASSERT (cmp == 0);
50
51     ASSERT (my_normcmp (input2, SIZEOF (input2), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0);
52     ASSERT (cmp == -1);
53
54     ASSERT (my_normcmp (input1, SIZEOF (input1), input4, SIZEOF (input4), UNINORM_NFD, &cmp) == 0);
55     ASSERT (cmp == -1);
56
57     ASSERT (my_normcmp (input1, SIZEOF (input1), input5, SIZEOF (input5), UNINORM_NFD, &cmp) == 0);
58     ASSERT (cmp == -1);
59
60     ASSERT (my_normcmp (input2, SIZEOF (input2), input5, SIZEOF (input5), UNINORM_NFD, &cmp) == 0);
61     ASSERT (cmp == -1);
62   }
63   { /* LATIN CAPITAL LETTER A WITH DIAERESIS */
64     static const uint16_t input1[] = { 0x00C4 };
65     static const uint16_t input2[] = { 0x0041, 0x0308 };
66     int cmp;
67
68     ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0);
69     ASSERT (cmp == 0);
70   }
71   { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */
72     static const uint16_t input1[] = { 0x01DE };
73     static const uint16_t input2[] = { 0x0041, 0x0308, 0x0304 };
74     int cmp;
75
76     ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0);
77     ASSERT (cmp == 0);
78   }
79   { /* GREEK DIALYTIKA AND PERISPOMENI */
80     static const uint16_t input1[] = { 0x1FC1 };
81     static const uint16_t input2[] = { 0x00A8, 0x0342 };
82     int cmp;
83
84     ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0);
85     ASSERT (cmp == 0);
86   }
87   { /* HANGUL SYLLABLE GEUL */
88     static const uint16_t input1[] = { 0xAE00 };
89     static const uint16_t input2[] = { 0xADF8, 0x11AF };
90     static const uint16_t input3[] = { 0x1100, 0x1173, 0x11AF };
91     int cmp;
92
93     ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0);
94     ASSERT (cmp == 0);
95
96     ASSERT (my_normcmp (input1, SIZEOF (input1), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0);
97     ASSERT (cmp == 0);
98   }
99   { /* HANGUL SYLLABLE GEU */
100     static const uint16_t input1[] = { 0xADF8 };
101     static const uint16_t input2[] = { 0x1100, 0x1173 };
102     int cmp;
103
104     ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0);
105     ASSERT (cmp == 0);
106   }
107 }
108
109 int
110 main ()
111 {
112   test_ascii (u16_normcmp, UNINORM_NFD);
113   test_nonascii (u16_normcmp);
114
115   return 0;
116 }