From ba35bf7ef0946a29865ec26c466c4bb240ebf388 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Fri, 29 Feb 2008 10:31:01 +0100 Subject: [PATCH] Tests for module 'freadseek'. --- ChangeLog | 4 ++ modules/freadseek-tests | 13 +++++++ tests/test-freadseek.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++++ tests/test-freadseek.sh | 5 +++ 4 files changed, 122 insertions(+) create mode 100644 modules/freadseek-tests create mode 100644 tests/test-freadseek.c create mode 100755 tests/test-freadseek.sh diff --git a/ChangeLog b/ChangeLog index 32bfe85d8..ace7d2a57 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2008-02-29 Bruno Haible + * modules/freadseek-tests: New file. + * tests/test-freadseek.sh: New file. + * tests/test-freadseek.c: New file. + New module 'freadseek'. * modules/freadseek: New file. * lib/freadseek.h: New file. diff --git a/modules/freadseek-tests b/modules/freadseek-tests new file mode 100644 index 000000000..6fb15489e --- /dev/null +++ b/modules/freadseek-tests @@ -0,0 +1,13 @@ +Files: +tests/test-freadseek.c +tests/test-freadseek.sh + +Depends-on: +unistd + +configure.ac: + +Makefile.am: +TESTS += test-freadseek.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' srcdir='$(srcdir)' +check_PROGRAMS += test-freadseek diff --git a/tests/test-freadseek.c b/tests/test-freadseek.c new file mode 100644 index 000000000..ffe3cecfc --- /dev/null +++ b/tests/test-freadseek.c @@ -0,0 +1,100 @@ +/* Test of freadseek() function. + Copyright (C) 2007-2008 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 + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include "freadseek.h" + +#include +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + abort (); \ + } \ + } \ + while (0) + +int +main (int argc, char **argv) +{ + static const char stdin_contents[] = + "#!/bin/sh\n\n./test-freadseek${EXEEXT} 5 19 6 7 18 9 19 < \"$srcdir/test-freadseek.sh\" || exit 1\ncat \"$srcdir/test-freadseek.sh\" | ./test-freadseek${EXEEXT} 5 19 6 7 18 9 19 || exit 1\nexit 0\n"; + int nbytes1 = atoi (argv[1]); + int nbytes2 = atoi (argv[2]); + int nbytes3 = atoi (argv[3]); + int nbytes4 = atoi (argv[4]); + int nbytes5 = atoi (argv[5]); + int nbytes6 = atoi (argv[6]); + int nbytes7 = atoi (argv[7]); + void *buf1 = malloc (nbytes1); + void *buf3 = malloc (nbytes3); + void *buf5 = malloc (nbytes5); + void *buf7 = malloc (nbytes7); + /* A private variable to keep track of the position. */ + size_t position = 0; + + ASSERT (fread (buf1, 1, nbytes1, stdin) == nbytes1); + ASSERT (memcmp (buf1, stdin_contents + position, nbytes1) == 0); + position += nbytes1; + + /* Test normal behaviour. */ + ASSERT (freadseek (stdin, nbytes2) == 0); + position += nbytes2; + + ASSERT (fread (buf3, 1, nbytes3, stdin) == nbytes3); + ASSERT (memcmp (buf3, stdin_contents + position, nbytes3) == 0); + position += nbytes3; + + /* Test behaviour after normal ungetc. */ + ungetc (fgetc (stdin), stdin); + ASSERT (freadseek (stdin, nbytes4) == 0); + position += nbytes4; + + ASSERT (fread (buf5, 1, nbytes5, stdin) == nbytes5); + ASSERT (memcmp (buf5, stdin_contents + position, nbytes5) == 0); + position += nbytes5; + + /* Test behaviour after arbitrary ungetc. */ + fgetc (stdin); + ungetc ('@', stdin); + ASSERT (freadseek (stdin, nbytes6) == 0); + position += nbytes6; + + ASSERT (fread (buf7, 1, nbytes7, stdin) == nbytes7); + ASSERT (memcmp (buf7, stdin_contents + position, nbytes7) == 0); + position += nbytes7; + + /* Test move to end of file. */ + ASSERT (freadseek (stdin, strlen (stdin_contents) - position) == 0); + ASSERT (fgetc (stdin) == EOF); + ASSERT (!ferror (stdin)); + + /* Test move beyond end of file. */ + ASSERT (freadseek (stdin, 1000000) == 0); + ASSERT (fgetc (stdin) == EOF); + ASSERT (!ferror (stdin)); + + return 0; +} diff --git a/tests/test-freadseek.sh b/tests/test-freadseek.sh new file mode 100755 index 000000000..453cadfd8 --- /dev/null +++ b/tests/test-freadseek.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +./test-freadseek${EXEEXT} 5 19 6 7 18 9 19 < "$srcdir/test-freadseek.sh" || exit 1 +cat "$srcdir/test-freadseek.sh" | ./test-freadseek${EXEEXT} 5 19 6 7 18 9 19 || exit 1 +exit 0 -- 2.11.0