Mercurial > hg > octave-kai > gnulib-hg
annotate tests/test-getdelim.c @ 10944:f08a483da33c
Tests for module 'wcsnrtombs'.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Mon, 22 Dec 2008 00:43:50 +0100 |
parents | 0be6f1ab456d |
children | 441d8820b5a5 |
rev | line source |
---|---|
9161
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
1 /* Test of getdelim() function. |
9889
0be6f1ab456d
Flush the standard error stream before aborting.
Bruno Haible <bruno@clisp.org>
parents:
9162
diff
changeset
|
2 Copyright (C) 2007-2008 Free Software Foundation, Inc. |
9161
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
3 |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
4 This program is free software; you can redistribute it and/or modify |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
5 it under the terms of the GNU General Public License as published by |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
6 the Free Software Foundation; either version 3, or (at your option) |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
7 any later version. |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
8 |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
9 This program is distributed in the hope that it will be useful, |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
10 but WITHOUT ANY WARRANTY; without even the implied warranty of |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
12 GNU General Public License for more details. |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
13 |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
14 You should have received a copy of the GNU General Public License |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
15 along with this program; if not, write to the Free Software Foundation, |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
16 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
17 |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
18 /* Written by Eric Blake <ebb9@byu.net>, 2007. */ |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
19 |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
20 #include <config.h> |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
21 |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
22 #include <stdio.h> |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
23 #include <stdlib.h> |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
24 #include <string.h> |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
25 |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
26 #define ASSERT(expr) \ |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
27 do \ |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
28 { \ |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
29 if (!(expr)) \ |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
30 { \ |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
31 fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ |
9889
0be6f1ab456d
Flush the standard error stream before aborting.
Bruno Haible <bruno@clisp.org>
parents:
9162
diff
changeset
|
32 fflush (stderr); \ |
9161
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
33 abort (); \ |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
34 } \ |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
35 } \ |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
36 while (0) |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
37 |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
38 int |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
39 main (int argc, char **argv) |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
40 { |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
41 FILE *f; |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
42 char *line = NULL; |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
43 size_t len = 0; |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
44 ssize_t result; |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
45 |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
46 /* Create test file. */ |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
47 f = fopen ("test-getdelim.txt", "wb"); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
48 if (!f || fwrite ("anbcnd\0f", 1, 8, f) != 8 || fclose (f) != 0) |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
49 { |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
50 fputs ("Failed to create sample file.\n", stderr); |
9162
60a8f78ca96f
* tests/test-getdelim.c (main): Use remove, not unlink.
Eric Blake <ebb9@byu.net>
parents:
9161
diff
changeset
|
51 remove ("test-getdelim.txt"); |
9161
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
52 return 1; |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
53 } |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
54 f = fopen ("test-getdelim.txt", "rb"); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
55 if (!f) |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
56 { |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
57 fputs ("Failed to reopen sample file.\n", stderr); |
9162
60a8f78ca96f
* tests/test-getdelim.c (main): Use remove, not unlink.
Eric Blake <ebb9@byu.net>
parents:
9161
diff
changeset
|
58 remove ("test-getdelim.txt"); |
9161
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
59 return 1; |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
60 } |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
61 |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
62 /* Test initial allocation, which must include trailing NUL. */ |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
63 result = getdelim (&line, &len, 'n', f); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
64 ASSERT (result == 2); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
65 ASSERT (strcmp (line, "an") == 0); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
66 ASSERT (2 < len); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
67 |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
68 /* Test growth of buffer. */ |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
69 free (line); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
70 line = malloc (1); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
71 len = 1; |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
72 result = getdelim (&line, &len, 'n', f); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
73 ASSERT (result == 3); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
74 ASSERT (strcmp (line, "bcn") == 0); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
75 ASSERT (3 < len); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
76 |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
77 /* Test embedded NULs and EOF behavior. */ |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
78 result = getdelim (&line, &len, 'n', f); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
79 ASSERT (result == 3); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
80 ASSERT (memcmp (line, "d\0f", 4) == 0); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
81 ASSERT (3 < len); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
82 |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
83 result = getdelim (&line, &len, 'n', f); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
84 ASSERT (result == -1); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
85 |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
86 free (line); |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
87 fclose (f); |
9162
60a8f78ca96f
* tests/test-getdelim.c (main): Use remove, not unlink.
Eric Blake <ebb9@byu.net>
parents:
9161
diff
changeset
|
88 remove ("test-getdelim.txt"); |
9161
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
89 return 0; |
c5cedfcd0db0
Move getline and getdelim into stdio.h, per POSIX 200x.
Eric Blake <ebb9@byu.net>
parents:
diff
changeset
|
90 } |