maint: update copyright
[gnulib.git] / tests / unistr / test-strnlen.h
1 /* Test of uN_strnlen() functions.
2    Copyright (C) 2010-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>, 2010.  */
18
19 static void
20 check_single (const UNIT *input, size_t length, size_t n)
21 {
22   size_t result = U_STRNLEN (input, n);
23   ASSERT (result == (n <= length ? n : length));
24 }
25
26 static void
27 check (const UNIT *input, size_t input_length)
28 {
29   size_t length;
30   size_t n;
31
32   ASSERT (input_length > 0);
33   ASSERT (input[input_length - 1] == 0);
34   length = input_length - 1; /* = U_STRLEN (input) */
35
36   for (n = 0; n <= 2 * length + 2; n++)
37     check_single (input, length, n);
38
39   /* Check that U_STRNLEN (S, N) does not look at more than
40      MIN (U_STRLEN (S) + 1, N) units.  */
41   {
42     char *page_boundary = (char *) zerosize_ptr ();
43
44     if (page_boundary != NULL)
45       {
46         for (n = 0; n <= 2 * length + 2; n++)
47           {
48             size_t n_to_copy = (n <= length ? n : length + 1);
49             UNIT *copy;
50             size_t i;
51
52             copy = (UNIT *) page_boundary - n_to_copy;
53             for (i = 0; i < n_to_copy; i++)
54               copy[i] = input[i];
55
56             check_single (copy, length, n);
57           }
58       }
59   }
60 }