maint: update copyright
[gnulib.git] / tests / uninorm / test-u16-nfd.c
index 84499f0..1318b0f 100644 (file)
@@ -1,5 +1,5 @@
 /* Test of canonical decomposition of UTF-16 strings.
-   Copyright (C) 2009 Free Software Foundation, Inc.
+   Copyright (C) 2009-2014 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
 #include <config.h>
 
-#if GNULIB_UNINORM_U16_NORMALIZE
+#if GNULIB_TEST_UNINORM_U16_NORMALIZE
 
 #include "uninorm.h"
 
 #include <signal.h>
-#include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 
 #include "unistr.h"
-
-#define SIZEOF(array) (sizeof (array) / sizeof (array[0]))
-#define ASSERT(expr) \
-  do                                                                        \
-    {                                                                       \
-      if (!(expr))                                                          \
-        {                                                                   \
-          fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
-          fflush (stderr);                                                  \
-          abort ();                                                         \
-        }                                                                   \
-    }                                                                       \
-  while (0)
+#include "macros.h"
 
 static int
 check (const uint16_t *input, size_t input_length,
@@ -68,13 +55,13 @@ check (const uint16_t *input, size_t input_length,
       preallocated = (uint16_t *) malloc (length * sizeof (uint16_t));
       result = u16_normalize (UNINORM_NFD, input, input_length, preallocated, &length);
       if (!(result != NULL))
-       return 4;
+        return 4;
       if (!(result != preallocated))
-       return 5;
+        return 5;
       if (!(length == expected_length))
-       return 6;
+        return 6;
       if (!(u16_cmp (result, expected, expected_length) == 0))
-       return 7;
+        return 7;
       free (result);
       free (preallocated);
     }
@@ -88,7 +75,7 @@ check (const uint16_t *input, size_t input_length,
     result = u16_normalize (UNINORM_NFD, input, input_length, preallocated, &length);
     if (!(result != NULL))
       return 8;
-    if (!(result == preallocated))
+    if (!(preallocated == NULL || result == preallocated))
       return 9;
     if (!(length == expected_length))
       return 10;
@@ -103,6 +90,9 @@ check (const uint16_t *input, size_t input_length,
 void
 test_u16_nfd (void)
 {
+  { /* Empty string.  */
+    ASSERT (check (NULL, 0, NULL, 0) == 0);
+  }
   { /* SPACE */
     static const uint16_t input[]    = { 0x0020 };
     ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0);
@@ -226,20 +216,20 @@ test_u16_nfd (void)
   { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a)  日本語,中文,한글" */
     static const uint16_t input[] =
       { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ',
-       0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443,
-       0x0439, 0x0442, 0x0435, '!', ' ',
-       'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2,
-       '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ',
-       0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n'
+        0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443,
+        0x0439, 0x0442, 0x0435, '!', ' ',
+        'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2,
+        '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ',
+        0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n'
       };
     static const uint16_t expected[] =
       { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ',
-       0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443,
-       0x0438, 0x0306, 0x0442, 0x0435, '!', ' ',
-       'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2,
-       '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ',
-       0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',',
-       0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n'
+        0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443,
+        0x0438, 0x0306, 0x0442, 0x0435, '!', ' ',
+        'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2,
+        '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ',
+        0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',',
+        0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n'
       };
     ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0);
   }
@@ -256,62 +246,62 @@ test_u16_nfd (void)
     int pass;
     for (pass = 0; pass < 3; pass++)
       {
-       size_t repeat = 1;
-       size_t m = 100000;
-       uint16_t *input = (uint16_t *) malloc (2 * m * sizeof (uint16_t));
-       if (input != NULL)
-         {
-           uint16_t *expected = input + m;
-           size_t m1 = m / 2;
-           size_t m2 = (m - 1) / 2;
-           /* NB: m1 + m2 == m - 1.  */
-           uint16_t *p;
-           size_t i;
-
-           input[0] = 0x0041;
-           p = input + 1;
-           switch (pass)
-             {
-             case 0:
-               for (i = 0; i < m1; i++)
-                 *p++ = 0x0319;
-               for (i = 0; i < m2; i++)
-                 *p++ = 0x0300;
-               break;
-
-             case 1:
-               for (i = 0; i < m2; i++)
-                 *p++ = 0x0300;
-               for (i = 0; i < m1; i++)
-                 *p++ = 0x0319;
-               break;
-
-             case 2:
-               for (i = 0; i < m2; i++)
-                 {
-                   *p++ = 0x0319;
-                   *p++ = 0x0300;
-                 }
-               for (; i < m1; i++)
-                 *p++ = 0x0319;
-               break;
-
-             default:
-               abort ();
-             }
-
-           expected[0] = 0x0041;
-           p = expected + 1;
-           for (i = 0; i < m1; i++)
-             *p++ = 0x0319;
-           for (i = 0; i < m2; i++)
-             *p++ = 0x0300;
-
-           for (; repeat > 0; repeat--)
-             ASSERT (check (input, m, expected, m) == 0);
-
-           free (input);
-         }
+        size_t repeat = 1;
+        size_t m = 100000;
+        uint16_t *input = (uint16_t *) malloc (2 * m * sizeof (uint16_t));
+        if (input != NULL)
+          {
+            uint16_t *expected = input + m;
+            size_t m1 = m / 2;
+            size_t m2 = (m - 1) / 2;
+            /* NB: m1 + m2 == m - 1.  */
+            uint16_t *p;
+            size_t i;
+
+            input[0] = 0x0041;
+            p = input + 1;
+            switch (pass)
+              {
+              case 0:
+                for (i = 0; i < m1; i++)
+                  *p++ = 0x0319;
+                for (i = 0; i < m2; i++)
+                  *p++ = 0x0300;
+                break;
+
+              case 1:
+                for (i = 0; i < m2; i++)
+                  *p++ = 0x0300;
+                for (i = 0; i < m1; i++)
+                  *p++ = 0x0319;
+                break;
+
+              case 2:
+                for (i = 0; i < m2; i++)
+                  {
+                    *p++ = 0x0319;
+                    *p++ = 0x0300;
+                  }
+                for (; i < m1; i++)
+                  *p++ = 0x0319;
+                break;
+
+              default:
+                abort ();
+              }
+
+            expected[0] = 0x0041;
+            p = expected + 1;
+            for (i = 0; i < m1; i++)
+              *p++ = 0x0319;
+            for (i = 0; i < m2; i++)
+              *p++ = 0x0300;
+
+            for (; repeat > 0; repeat--)
+              ASSERT (check (input, m, expected, m) == 0);
+
+            free (input);
+          }
       }
   }
 }