root/maint/gnulib/tests/uninorm/test-u8-normcmp.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. test_nonascii
  2. main

   1 /* Test of normalization insensitive comparison of UTF-8 strings.
   2    Copyright (C) 2009-2021 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 <https://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-u8-normcmp.h"
  26 
  27 static void
  28 test_nonascii (int (*my_normcmp) (const uint8_t *, size_t, const uint8_t *, size_t, uninorm_t, int *))
     /* [previous][next][first][last][top][bottom][index][help] */
  29 {
  30   /* Normalization effects.  */
  31   {
  32     static const uint8_t input1[] = { 'H', 0xC3, 0xB6, 'h', 'l', 'e' };
  33     static const uint8_t input2[] = { 'H', 'o', 0xCC, 0x88, 'h', 'l', 'e' };
  34     static const uint8_t input3[] = { 'H', 0xC3, 0xB6, 'h', 'l', 'e', 'n' };
  35     static const uint8_t input4[] = { 'H', 'o', 0xCC, 0x88, 'h', 'l', 'e', 'n' };
  36     static const uint8_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 uint8_t input1[] = { 0xC3, 0x84 };
  65     static const uint8_t input2[] = { 0x41, 0xCC, 0x88 };
  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 uint8_t input1[] = { 0xC7, 0x9E };
  73     static const uint8_t input2[] = { 0x41, 0xCC, 0x88, 0xCC, 0x84 };
  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 uint8_t input1[] = { 0xE1, 0xBF, 0x81 };
  81     static const uint8_t input2[] = { 0xC2, 0xA8, 0xCD, 0x82 };
  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 uint8_t input1[] = { 0xEA, 0xB8, 0x80 };
  89     static const uint8_t input2[] = { 0xEA, 0xB7, 0xB8, 0xE1, 0x86, 0xAF };
  90     static const uint8_t input3[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF };
  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 uint8_t input1[] = { 0xEA, 0xB7, 0xB8 };
 101     static const uint8_t input2[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3 };
 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 ()
     /* [previous][next][first][last][top][bottom][index][help] */
 111 {
 112   test_ascii (u8_normcmp, UNINORM_NFD);
 113   test_nonascii (u8_normcmp);
 114 
 115   return 0;
 116 }

/* [previous][next][first][last][top][bottom][index][help] */