Mercurial > hg > octave-lojdl > gnulib-hg
annotate tests/test-memchr2.c @ 17149:a49df7b88261
errno: port to LynxOS 178 2.2.2
Problem reported by Joel Brobecker in
<http://lists.gnu.org/archive/html/bug-gnulib/2012-10/msg00088.html>.
* doc/posix-headers/errno.texi (errno.h): Document this.
* lib/errno.in.h (EILSEQ, GNULIB_defined_EILSEQ) [!EILSEQ]: New macros.
* lib/strerror-override.c, lib/strerror-override.h (strerror_override):
Supply a string for EILSEQ.
* m4/errno_h.m4 (gl_HEADER_ERRNO_H): Check for EILSEQ.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Thu, 01 Nov 2012 15:29:14 -0700 |
parents | 8250f2777afc |
children | e542fd46ad6f |
rev | line source |
---|---|
9742 | 1 /* |
16201
8250f2777afc
maint: update all copyright year number ranges
Jim Meyering <meyering@redhat.com>
parents:
14079
diff
changeset
|
2 * Copyright (C) 2008-2012 Free Software Foundation, Inc. |
9742 | 3 * Written by Eric Blake |
4 * | |
5 * This program is free software: you can redistribute it and/or modify | |
6 * it under the terms of the GNU General Public License as published by | |
7 * the Free Software Foundation; either version 3 of the License, or | |
8 * (at your option) any later version. | |
9 * | |
10 * This program is distributed in the hope that it will be useful, | |
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 * GNU General Public License for more details. | |
14 * | |
15 * You should have received a copy of the GNU General Public License | |
16 * along with this program. If not, see <http://www.gnu.org/licenses/>. */ | |
17 | |
18 #include <config.h> | |
19 | |
20 #include "memchr2.h" | |
21 | |
22 #include <stdlib.h> | |
23 #include <string.h> | |
24 | |
11570
1e84e9b3384a
Make some tests ISO C 99 compliant.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
25 #include "zerosize-ptr.h" |
12496
a48d3d749ca5
Refactor common macros used in tests.
Bruno Haible <bruno@clisp.org>
parents:
12421
diff
changeset
|
26 #include "macros.h" |
9742 | 27 |
9745 | 28 /* Calculating void * + int is not portable, so this wrapper converts |
29 to char * to make the tests easier to write. */ | |
30 #define MEMCHR2 (char *) memchr2 | |
31 | |
9742 | 32 int |
12197
e45d9bb2233e
tests: avoid several compiler warnings
Eric Blake <ebb9@byu.net>
parents:
11570
diff
changeset
|
33 main (void) |
9742 | 34 { |
35 size_t n = 0x100000; | |
36 char *input = malloc (n); | |
37 ASSERT (input); | |
38 | |
39 input[0] = 'a'; | |
40 input[1] = 'b'; | |
41 memset (input + 2, 'c', 1024); | |
42 memset (input + 1026, 'd', n - 1028); | |
43 input[n - 2] = 'e'; | |
44 input[n - 1] = 'a'; | |
45 | |
9745 | 46 /* Basic behavior tests. */ |
47 ASSERT (MEMCHR2 (input, 'a', 'b', n) == input); | |
48 ASSERT (MEMCHR2 (input, 'b', 'a', n) == input); | |
9742 | 49 |
9745 | 50 ASSERT (MEMCHR2 (input, 'a', 'b', 0) == NULL); |
11570
1e84e9b3384a
Make some tests ISO C 99 compliant.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
51 ASSERT (MEMCHR2 (zerosize_ptr (), 'a', 'b', 0) == NULL); |
9742 | 52 |
9745 | 53 ASSERT (MEMCHR2 (input, 'b', 'd', n) == input + 1); |
54 ASSERT (MEMCHR2 (input + 2, 'b', 'd', n - 2) == input + 1026); | |
9742 | 55 |
9745 | 56 ASSERT (MEMCHR2 (input, 'd', 'e', n) == input + 1026); |
57 ASSERT (MEMCHR2 (input, 'e', 'd', n) == input + 1026); | |
9742 | 58 |
9745 | 59 ASSERT (MEMCHR2 (input + 1, 'a', 'e', n - 1) == input + n - 2); |
60 ASSERT (MEMCHR2 (input + 1, 'e', 'a', n - 1) == input + n - 2); | |
9742 | 61 |
9745 | 62 ASSERT (MEMCHR2 (input, 'f', 'g', n) == NULL); |
63 ASSERT (MEMCHR2 (input, 'f', '\0', n) == NULL); | |
9742 | 64 |
9745 | 65 ASSERT (MEMCHR2 (input, 'a', 'a', n) == input); |
66 ASSERT (MEMCHR2 (input + 1, 'a', 'a', n - 1) == input + n - 1); | |
67 ASSERT (MEMCHR2 (input, 'f', 'f', n) == NULL); | |
9742 | 68 |
69 /* Check that a very long haystack is handled quickly if one of the | |
70 two bytes is found near the beginning. */ | |
71 { | |
72 size_t repeat = 10000; | |
73 for (; repeat > 0; repeat--) | |
74 { | |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12197
diff
changeset
|
75 ASSERT (MEMCHR2 (input, 'c', 'e', n) == input + 2); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12197
diff
changeset
|
76 ASSERT (MEMCHR2 (input, 'e', 'c', n) == input + 2); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12197
diff
changeset
|
77 ASSERT (MEMCHR2 (input, 'c', '\0', n) == input + 2); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12197
diff
changeset
|
78 ASSERT (MEMCHR2 (input, '\0', 'c', n) == input + 2); |
9745 | 79 } |
80 } | |
81 | |
82 /* Alignment tests. */ | |
83 { | |
84 int i, j; | |
85 for (i = 0; i < 32; i++) | |
86 { | |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12197
diff
changeset
|
87 for (j = 0; j < 256; j++) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12197
diff
changeset
|
88 input[i + j] = j; |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12197
diff
changeset
|
89 for (j = 0; j < 256; j++) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12197
diff
changeset
|
90 { |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12197
diff
changeset
|
91 ASSERT (MEMCHR2 (input + i, j, 0xff, 256) == input + i + j); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12197
diff
changeset
|
92 ASSERT (MEMCHR2 (input + i, 0xff, j, 256) == input + i + j); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12197
diff
changeset
|
93 } |
9742 | 94 } |
95 } | |
96 | |
97 free (input); | |
98 | |
99 return 0; | |
100 } |